当前位置:文档之家› 高级语言程序设计方法学第02章-10

高级语言程序设计方法学第02章-10

高级语言程序设计方法学第02章-10
高级语言程序设计方法学第02章-10

第2章 程序设计语言的设计概述

本章介绍程序设计语言的设计目标以及为实现这些目标所遵循的设计准则,设计语言最后要给出语言的参考手册,为此,从表示的角度介绍与语法,语义和上下文约束有关的概念和表示法。目前在程序语言语法文本中,语法形式表示是完整的,语义表示多半是非形式的。本章仅给出各种形式语义的初步概念,有关理论后文还要讲述。

2.1 表示与抽象(Representation & Abstraction)

程序就是程序设计语言表示的计算。所谓表示是人为制造的符号组合以表达我们需要表达的意思。每个合乎语法的表示都表达了某种语义,例如:

float n; //n是C语言中的浮点数变量

sqrt(n); //对n取平方根

由于我们约定float是浮点类型的关键字,故float n这个合法表示表明“n是浮点数”, 是一个静态的说明。同样,sqrt(n)说明要做“对n取平方根”的动作。

表示是对事物抽象的表达。抽象是对论题本质的提取。当我们为某软件投入市场作市场调查并写出分析报告时,我们已先完成了抽象(从社会效益、技术效益、经济效益列出定性或定量的分析),也完成了表示(报告正文)。表示的规则是语法的,抽象的,内容是语义的。同一事物可在不同抽象层次表示它。同一程序可用高级语言表示、汇编码表示以及机器码表示。当然,高级语言上面还可以有甚高级、超高级语言不断抽象上去。所以,每种语言都是在某个抽象层次上的表示。

从日常概念中,我们可以得知概念愈是抽象其内涵愈小(只包含主要特征,略去其余)而外延愈大(能满足该主要特征的事物愈多)。例如“张三在种地”也可以说“张三在改变生态环境”,还可以说“张三修理地球”都没有错。之所以不错是表达了主要概念:“地表情况有了变化”。但张三用锄种玉米的细节全被抽象(忽略)掉,且“李四砍树”也可以说成“改变生态环境”、“修理地球”。当然,这种近乎失真的外延是不希望的,同样,能满足高级语言描述的计算的机器码实现也可以不止一个。例如:给变量x增值1,x=x+1;这类赋值语句编译后的机器码可以有如下两种做法,按语义描述为:

1. 从内存代表x的地址中取出值放在运算器中。 1. 从内存代表x的地址中取出值放在运

算器中。

2. 加1,将结果放于某临时单元。 2. 加1将结果放入x地址中。

3. 将临时单元内容作类型检查(必要时转换),

并放入x中。

x=x+1; x+=1;

两者都对,但效率不同。左边按赋值常规做法,保证赋值安全并没有错。右边则认为编译时表达式x+1已作了类型检查,结果必然是x的类型,根据这个特殊情况节省了一步,C语言的 x+=1;的写法就是后者。其它语言两者均可,完全由编译器决定了。

2.1.1 上层抽象可用多种下层抽象实现。程序设计的四个世界。

客观世界的问题描述了客观世界对象相互之间的作用,经过分析建立解题模型。

read(m,s,d); m

u=m-s-d u=m-s-d; s

女儿8岁,儿子10岁 print(u) d

母亲35岁.问: 每人每年增1岁 read(m,s,d); u

和大于等于母亲? 一次,满足条 while(m+u>s+d+2u) u++; 指令集

问题 模型 用程序抽象实现模型 实现程序

客观世界 模型世界 程序世界 机器世界

图2-1 计算机解题的四个世界

一种模型只抽取与该层抽象有关的数据属性。例如按图2-1的问题,儿子、女儿、母亲的姓名、身高体重、文化程度...... 与本题无关。问题中的对象在本例中是三人年龄和要求解的年数。数学模型是最高级的抽象,解题公式 u=m-s-d 即本题的数学模型。程序对象可以是u,m,s,d,它直接和数学模型对象对应。由于程序对象在程序世界有自己的行为,如输入/输出操作。到计算机实现时又映射为存储对象和指令集。它又要加上分配存储 、查找地址和往运算器、存储器和输入/出设备送数的操作(输入/出还要有数、码变换)。所以 ,同一问题在问题世界,模型世界,程序世界,机器世界中对象及其相互作用是不同的 。我们研究程序设计语言的设计是从问题—模型世界的需求出发 ,在机器世界可能实现情况下,定义自己的对象表示及其相互作用的表示。对于从问题到程序,我们只介绍已有程序设计范型, 对于程序到实现,我们在以后章节将陆续分析程序各元素和各机制(即每种特征)以及它们的实现。

2.1.2 显式表示和隐式表示

程序对象及其相互作用的表示可以是显式的。如上例中的 float n,显式说明n是浮点变量;也可以是隐式的, 例如数组元素的次序(按下标序不可改); 一组连续的语句(语句次序不可改);程序中的缺省声明,如FORTRAN中符号名首字母为 1..N的程序对象自动为整型,其余为实型。 再如Ada中:

for J in 1 .. 5 loop

...

...

end loop;

其中J的类型自动为循环域(1..5)表示给出的整型。 一般说来,编译时,信息越多越准确,所以,强类型语言强调显式表示 。但显式表示带来不必要的噜嗦,使程序不够精炼。所以,在语义明确,不易出错之处,也采用隐式表示,例如Ada的常量声明:

PI: constant FLOAT: =3.1415926;

可写为:

PI: constant : = 3.1415926;

因为以3.1415926初始化时,等于声明了PI必须是浮点类型。

2.1.3聚合表示和分散表示

程序对象、操作过程(或函数)在早期语言中为了快速翻译 ,只能用较原始的表示组合起

来表示复杂的实体,或类似实体用不同的表示指明微小的差异,即分散表示。例如,FORTRAN

中没有记录数据结构,则将每个域定义为数组,各数组按同一序号取一元素构成一个记录。 再如,FORTH语言中不同类型“加”运算的分散表示:

+ 单字长加号

D+ 双字长加号

M+ 混合加号

其它语言中一个+号就概括了。这叫聚合(Coherent)表示。分散表示并不一定都坏。例如,早期语言的函数(或过程)定义的型构(Signature)和体是不能分开的:

FUNCTION SUM (V,N) //函数型构

REAL V (N) // 局部变量

SUM = 0.0

DO 200 I = 1,N // 函数体

SUM = SUM + V(I)

200 RETURN

END

而Ada等现代语言为上层表达方便,型构和体可以分开,只写:

function SUM (V: VECTOR, N: INTEGER) return FLOAT;

函数体可以写在别处,只要在联编时有一个完整定义的SUM函数存在,内部内联成一“内

聚式”即可运行。

2.2 程序设计语言的设计目标

设计程序设计语言即定义一组能表示某种范型的特征集 。每个特征有严格的定义且可以

在机器上实现。程序员灵活运用这些特征便可表达他所希望任何计算。在某种意义上说, 只

要能想得出巧妙而高效的实现,就能提供更多更方便的特征 ,但就一个语言来说,这一组特

征要能体现它的设计目标。

语言设计的目标在不同时代的软 、硬件背景下不能同一而语。例如,早期语言追求时空

效率,近代软件追求可靠性(易验证),可维护性(易读易改,改了不产生旁效),可移植性(尽

可能远离具体机器)。不同的应用范型也有不同的要求。这里仅就当今最一般的目标,给出定

性的描述:

(1)模型能力(Model Power) 语言规定的语法特征应使程序员能充分、精确、容易地表

达他的计算。

(2)语义清晰(Semantic Clarity) 每个合乎语法的表达式和程序都定义一个清晰、 无

二义性的涵 义,且不因程序执行引起语义改变。

(3)实用性(Utility) 只设计使用频繁或没有它不行的特征,即每个特征都常用。

(4)方便性(Conveniency) 越是频繁使用的特征越要简便。

(5)简单性(Simplicity) 力求简单,一致,少生僻,除非十分方便不轻易增加冗余。

(6)可读性(Readability) 程序员往往从其特征定义的表达形式上理解其内涵,力求

直接表达,“相当于”表达。

(7)可移植性(Portability)一种语言的程序在一般的机器上均可实现其计算,且不产

生歧义。

(8)效率(Efficiency) 程序设计语言的效率指三个方面:编程效率;预处理和编译效率;执行效率 。它们相互相关,对语言追求目标有不同的选择,总的希望都很高,但非常不易,只能折衷。

(9)灵活性(Flexibility)对语法以外的限定在不带来歧意的前提下允许放松。这样能更好地发挥程序员的能动性并可简化实现。C语言做得较好,如数组名也可以是指针,字符也可解释为整数等。

2.3 设计准则

以上目标有时是相互冲突的,设计者只能按具体应用目标折衷。为达到上述目标应注意以下准则:

(1)频度(Frequency)准则频繁的特征应语义清晰、方便、简单、可读。例如,

if_then_else很频繁,结构化后更清晰。

(2) 结构一致(Structure Consistency)准则 一个程序的静态结构,直观上应与动态的

计算结构一致,即表示结构与逻辑结构统一 。这是E.W.Dijkstra提出的著名的准则, 并导致结构化程序普及。违反这个原则,程序难以阅读、测试和维护,例如:

100 IF(P) GO TO 150 while NOT P do

A段 A段

IF (EXP1) GO TO 110 if (EXP1) then

B段 C段

GO TO 140 elsif (EXP2) then

110 C段 D段

IF(EXP2) GO TO 120 elsif ( EXP3) then

GO TO 140

120 D段 E段

IF (EXP3) GO TO 130 else

GO TO 140 B段

endif

130 E段 F段

140 F段 end do

GO TO 100 ... ...

150 ... ...

单看左边程序不花上10分钟很难理解程序是怎样执行的。

(3) 局部性(Locality)准则 一个模块(或函数、过程)只用自己声明的局部数据做一件事情。这是保持语义清晰最有效的措施。这个模块的修改不影响其它的部分。近代程序小函数、小过程特别多,八件事调用八次,势必增加运行时调用界面上的类型检查,使运行速度降低,为此,语言设计上增加了内联(in_line)机制。将函数代码插入到调用之处(插入时作类型检查)。既保持了局部性,又保持了速度。

因为公用数据极易产生副作用(也称边界效应),造成程序错误,而且难以查错。强行将公用数据局部化又会造成冗余和重复,逻辑上增加混乱。故近代语言有不同层次控制数据公用措施,如堆变量、自动变量、静态变量、全局量等。函数式语言全部采用局部量,Pascal、Ada、C有限制地使用全局量,BASIC全部是全局量。

(4)词法内聚(Lexical Coherence)准则 逻辑相关的代码表示上应相邻。为了编译方便,早期语言将声明部分和语句部分明显分开,如 Pascal。声明集中在顶部,过程在中间, 主程序在最下面。这就天然适合于小程序(不超过一页)。程序大了阅读主程序时来回翻以查对数据类型,是十分不方便的。所以C++的声明也是语句,可以插在语句出现的任何地方。

这样,要用什么变量,声明了就使用,这种分散表示又带来了缺乏总体概念 (到底有几个变量要到处找)的缺陷,所以,C++规定声明可以多次,定义只能有一次,就缓解了这个矛盾。

许多语言的新版本都注意到词法内聚准则, 如:

Common Lisp 也对早期LISP作了改进,例如:

((lambda (<哑参数名表>) (let (<哑实参数对>)

(<函数体>)) (<函数体>))

<实参值表>)

((lambda (x y) (let ((x 3.5) (y (+ a 2)))

(+ (* x y) ((+ (* x y)

(- x y))) (- x y)))

3.5 (+ a 2))

早期LISP的入表达式 Common LISP的改进

如果函数体很长,就近哑实结合是很方便的。

(5) 语法一致性(Syntactic Consistency)准则 看上去相似的特征,其语法定义应一致。这是为了减少程序员的记忆负担.例如,FORTRAN 的计算转移语句:

GO TO (L1, L2, .., Ln), I

I是整变量,算出第几(1..n中的某个值)就转向第几个语句标号处。但FORTRAN同时有赋值转语句:

GO TO N, (L1, L2, .., Ln)

N是要显式赋值的语句标号:ASSIGN Li To N。N和I相似,但意思、执行方法相差很多。

(6) 安全性(Security)准则 没有违反语法规定的程序错误是不能检查出来的。例如,上述FORTRAN计算转语句,程序中规定了八个语句标号,编译很容易通过。运行时I=9也符合I的类型规定 ,但无法执行,是停机还是转到所在标号之下的第一语句呢? 只好由编译器实现者定。这样,同一程序在不同编译器的环境下就有不安全因素。Pascal的 Case语句也有类似情况。近代语言的Case都增加了Otherwise分支,以防指示变量的值未按程序员预想的出现。

安全性导致静态强类型,即在编译时刻所有程序对象的类型均应检查。这样运行时检查减至最小,可保持较高的运行效率,同时有利于程序员修改程序。然而,静态强类型不利于动态继承,不利于程序扩充修改。于是,有人研究动态强类型,编译时插入运行检查代码,等到有了确定类型值时检查。这样势必减低运行效率 。所谓“强”是每一个运算的对象都要检查 。早期的C(K&R版本)是不安全的,算术运算和函数调用的参数一般不做类型匹配检查,安全性由程序员保证。

(7) 正交性和正则性(Orthogonality & Regularity)准则 每种语言特征都由独立的机制实现,即与其他特征的实现机制无关 。也就是说,使用或修改某个特征对其他特征没有影响。所以一般语言都以互不相关(正交)的基本机制来构造更有表达力更好用的机制 。与此有关的,用基本特征组合为更加复杂的特征时要符合正则性原则,所谓‘正则性’(Regularity)是指设定的某种规则或约束应无一例外。例如,数据类型是一个特征,函数求值是一个特征,设计时它们是正交的。FORTRAN,Pascal均不能满足正则性原则,即函数不能返回数组。C语言可以(返回指针即数组)。然而,若基本特征本身就不正交,正则性一定不能保证。正交设计是语言设计的基本目标。正则性减少程序员对过多例外的记忆。

(8) 数据隐藏(Data Hiddening)准则 程序模块应有显式的接口(也称界面),有了这个界面,用户就能正确使用本模块,模块实现者就有了实现本模块的所有信息 。这是D.Parnas提出的著名的模块设计准则。即实现中增加的辅助数据全部对用户隐藏。只要不改界面, 对模块内部的任何修改都不会影响到其他部分 。只重视显式接口也是抽象性、简单性的体现。 所以,Ada等近代语言把模块(包、函数、过程、任务)的规格说明和体显式分开。规格说明即接口集,并把规格说明放在一起,阅读、查找大程序特别方便 。如果模块体是事先测试好的库程序、预定义的程序,那么编制程序可以在接口的层次上,工作量可以减少一个数量级。 这是实现软件重用、提高软件生产率的语言措施。

(9) 抽象表达(Abstract Representation)准则 若某表达陈述不止一次,则应抽取因子使其以递归形式表达。例如:

ax + bx 应可表达为(a+b) x

因为递归是使有限表达无限计算,极其精炼,也是符号计算中常用的手段。故新语言或老语言新版中都增加了递归表达机制:递归函数调用和递归数据类型。

抽象表达也借鉴自然语言中主干词加修饰词的方式。即主干词定义较概括的抽象,修饰词使其具体化。例如,C++中:

static const int max_index=MAX_LENGTH-1;

这种多层修饰近代语言愈来愈明显。

抽象表达的第三种措施是提供高层抽象。早期语言只有语句级语法机制,近代语言有命名的包和模块( Ada,Modula-2)。名字代表整个块,对其内部成分的引用,则用多层点表示法(由抽象到具体):

MATHLIB. TRIANG. COS(X);

意思是数学包中的三角形包的余弦函数。

(10) 可移植(portability)准则 程序语言不应有依赖硬件或环境的特征。完全不依赖硬件或环境则会影响表达性和效率,例如,Pascal 就没有硬件操作的抽象,位模式运算,表达力比C差。两者兼顾是较难的事,因为该语言的程序总要在具体的环境和机器上运行。为了可移植把语言核心定得完全脱离机器,而每个机器提供一预定义环境是近代语言策略。Ada的基本数据类型和输入/输出机制完全由预定义程序包(用Ada加汇编写、不能够移植)提供 。因此,Ada可以不受机器物理字长限制控制数学精度。输入/输出在FORTRAN,COBOL中是语言的一部分,然而在 C,Pascal,Ada中是预定义函数。移值,扩充,修改都比较方便。特别是,程序员在编程时勿需过早把注意力集中在输入/输出的格式上。

除了以上十项准则而外,还有可扩充 —子语言准则,类型一致性准则,可见性控制原则等已见诸文献,但未获普遍推荐。本书后文中遇到时再介绍。

2.4 程序设计语言的规格说明

如前所述,定义一个语言文本是定义语法和语义,暂不涉及语用(Pragmatics)。用于表达程序设计语言的语言统称之为元语言( Meta Language)。语言规格说明必须采用一种元语言。不是以有限制的自然语言(如C)就是建立在符号学上的形式语言(Ada)。前者称为非形式表示,早期语言采用。由于自然语言不准确、有岐意,近代语言多采用后者。本节介绍近代语言采用的描述方法。

2.4.1 语法的规格说明

从符号学的观点,语法定义了一组符号,以及这组符号合法的组合规则。例如, ASCII码或EBCDIC码的基本字符集即一般程序语言的基本符号。组合规则分两部分: 微语法 也叫词法(Lexicon),定义什么样的符号组合可以构成有意义的词法短语(也叫标记token),并规定注释、空白的意义。词法短语一般分五类 :字面量、标识符、保留(关键)字 、操作符和特殊符号。组合后的标记就有了自己的词义。相当于英语的单词(word)或汉语的‘词’。

宏语法 定义什么样的词法短语的组合是合法的语法特征。这包括声明、命令、表达式和保留字规定的语法单元。它们往往是相互嵌入的,其组合规则由文法规定。

一般程序设计语言的语法由统一的文法一道给出,包括微、宏语法,只在作编译释意时区分它们。

2.4.1.1 上下文无关文法

(1)文法(Grammar)

文法可导出该语言所有可能的句子,形式地,一个文法G是一个四元组:

G=(S,N, T,P)

其中,T是终结符号串的有限集。

N是非终结符号串的有限集,是文法中提供的成分概念,相当于英语动词短语、名词短语

或定语从句等句子成分的符号表示。

T∩N = Φ,即它们是不相交的。

S是起始符号串,S∈N。

P是产生式,一般形式是:

α→β α,β∈(T∪N)*

“→”表示左端可推导出右端,如α→β,α→Υ,α→δ则可写为:

α→β|Υ|δ

如果产生式将语言的非终结符中的每一个标记都推得为终结符号,则这一组产生式集即为

该语言的全部文法。

(2) 文法的递归表示在形式文法中是必须的

例2-1 整数的产生式表示法:

→0|1|2|3|4|5|6|7|8|9

一位数字是整数

两位数字也是整数

n位数字也是整数

n个

这势必造成产生式臃肿,如果写成:

|

|

这种形式,我们要几位就几位,一条产生式就够了。我们只要不断以

置换右端的最后代之以,即可得到任何整数。读者也许注

意到上述最后的产生式第二、三个替换取一个就可以了。但它们在文法上是不同的,α→αβ是

左递归产生式,而α→βα是右递归产生式,也叫尾递归的。

不同型式的产生式决定了不同型式的文法。

(3) Chomsky 文法

·0型文法如果对产生式α→β左端和右端不加任何限制,即α∈(N∪T) EMBED Equation.2 ,β∈(N∪T)( 。这种文法对应的语言是递归可枚举语言。在编译理论中,图灵

机(或双向下推机)可以识别这种语言。

·1型文法 如果产生式形如:

α A β→αBβ α,β∈(N∪T)*, A∈N, B∈(N∪T)+

则叫做上下文相关文法,对应的语言是上下文敏感语言。线性有界自动机可识别这种语言。 ·2型文法 如果产生式形如:

A→α α∈ (N∪T)*, A∈N

左端不含终结符且只有一个非终结符。这种文法叫上下文无关文法。对应的语言即上下文

无关语言。非确定下推机能识别这种语言。

·3型文法 如果产生式形如:

A→ αB|Bα α∈T*, A,B ∈N

左端不含终结符且只有一个非终结符。右端最多也只有一个非终结符且不在最左就在最右端。这种文法叫做正则文法,对应为正则语言。有限自动机可识别这种语言。

显然,这种文法经置换可消除右端非终结符,使每一产生式均可用一终结符的正则表达式

表达。

例2-2 所有产生式的非终结符均可置换为终结符表达式。

设产生式是

N={S,R, Q}, T={a,b,c}

P={S→Ra, S→Q, R→Qb, Q→c}

则有 S→Ra→Qba→cba|S→Q→c

R→Qb→cb

Q→c

每一型文法的语言都是上一型文法语言的子语言,如图 2-1。一般说来,简单语言用3型文法即可描述。如汇编语言、程序设计语言的词法子语言。对于程序设计语言中的嵌套结构3型文法无能为力,所以采用2型文法(自然包含3型)即上下文无关文法 。显然,对于更加复杂的结构采用1型文法更好。但1型文法有复杂的二义性问题,使语言处理器复杂且不可靠 。目前0、1型文法尚停留在语言理论研究领域。对于程序设计语言中出现个别上下文相关特征,用上下文约束予以说明。

图 2-1 Chomsky 文法的关系

2.4.1.2 BNF和EBNF

1960年J.Backus在Algol-60语言中采用巴库斯范式BNF描述语法。BNF就是上下文无关文法的表示法。 其元语符号是:

::= '定义为',即产生式中的“→”符号。

< > 表示所括符号串是非终结符号串。

| '或者'表示左右两边符号串序列是可替换的。终结符、关键字、标点符号直接写在产生式中。最初这三个符号就够了。

例2-3 BNF示例

::=

|

::= +

|-

|

::=

| < digit>

|

以后,又增加了以下符号使之更精炼:

[ ] 表示括号内的内容是可选的。

{ } 表示括号内的内容可重复0至多次。

C+ 念'Kleene加'表示语法类C可重复一到多次。

C* 念'Kleene星'表示语法类C可重复0至多次。

例2-4 例2-3进一步化简的表达

::= [ +|-]

::= { | }

::= +

::= { | < letter>}*

1974年Niklaus Wirth在作Pascal语法定义时将BNF与正则表达式结合起来,使表达更精炼。这就是扩充的巴库斯范式EBNF,也是当今使用最普遍的表示法。

· 其元语符号变动是: 增加[ ]、{ } 、( )(表示成组)、.(表示产生式终结)。[ ] 、{ } 意义同前,旨在消除或减少递归表达。

· 取消非终结符的尖括号,至少是产生式左端,为此符号串中空白用'_'连接。

· 为区别元符号和程序符号(程序中也有[ ]、 、()、.),程序中的终结符加引号,如'(', ')', '.'。

例2-5 按ISO标准部分Pascal语言的EBNF产生式:

program ::= ';' '.'.

program_heading ::= 'program' [ '(' ')'].

program_parameters ::= .

identifier_list ::= {',' } .

program_block ::= .

block ::=

.

variable_declaration_part ::= ['var' ';'

{ ';' }].

variable_declaration ::= ';' .

statement_part ::= compound_statement.

compound_statement ::= 'begin' 'end'.

statement_sequence ::= {';' }.

statement::=[

simple_statement ::= | |

| < goto_statement>.

structured_statement ::= |

| | .

当今在各种书刊中,EBNF中全用、全不用< >都有,终结符号用黑体以取消引号,用*代替{ }也有。关键问题在于用正则表达式表示,且表达能力EBNF和BNF等价,只是书写简化一些。

2.4.1.3 语法图

80年代许多程序设计语言手册不仅给出EBNF,还给出语法图,语法图和EBNF完全等价, 只是更直观一些。

例2-6 与例2-5 Pascal EBNF‘程序’和 '语句'产生式对应的语法图,如图2-2,图2-3

图2-3 Pascal “复合语句”的语法图

其中方框为非终结符,圆和椭圆形为终结符。箭头指向构造流向。每个非终结符又可开始一个语法图(一条产生式规则) 。与EBNF完全对应,[ ]以'短路'绕道表示,{ }以迥环表示,小圆弧是有意义的,表示流向。有的语法图在环线上注上数字表示最多转几次。

2.4.1.4 语法分析

语法规格说明定义了该语言程序合法的特征和语句。语言处理器则通过语法分析接受合法的程序,这就叫做程序释义( Parsing a Program ),释义过程是产生式生成句子的逆过程。编译器通过释义过程,将读入的源代码逐一分析,看它是否和文法相配。释义过程的输出是文法结构的树型表示,也叫释义树或语法分析树。

语法分析有许多方法,这在编译课程中有详细的论述,不是本书主要内容。总的说来,语法分析的算法可归为两类 :“自顶向下”和“由底向上”。“自顶向下” 释义则从文法的起始符开始,按可能产生的表达式寻找语句相同的结构匹配。每一步都产生下一个可能的源符号串,找到再往下走。“由底向上”释义则相反,它先查找源代码的各个符号串,看它能否匹配归结为产生式左边的非终结符 ,如果有含混则向前多读入k个符号串,为此归约下去,一个短语一个短语,最后到达起始符号串,归约的过程就形成了释义树 。图2-4是由底向上语法分析的例子。

只要语法是正确的程序,语法分析总是能成功的,如果程序有错误,编译程序就会按它自己的理解给出错误提示。经验表明错误提示可以发现很多近处错误,如果错误源头较远,则给出信息是不太确切的

begin x := 17 ; writeIn ( x ) end

identifier unsigned- procedure- identifier

integer identifier

variable unsigned- variable-

identifier number identifier

entire- unsigned- entire-

variable constant variable

variable- factor variable-

access access

term factor

simple- term

expression

expression simple-

expression

assignment- statement expression

simple- statement writeln-

parameter-list

statement writeln-

parameter-

list

procedure-statement

simple-statement

statement

statement-sequence

compound-statement

图2-4 由底向上释义过程图解

2.4.2 语义规格说明

程序的语义是它在运行时显现出来的行为。我们怎样说明这种行为呢? 这里有好几种方法,每种方法都构成了一类语义规格说明。程序通常要在计算机上执行,因此按照程序的运行步骤

或操作来说明程序设计语言是很自然的,这就是所谓的操作语义学。大多数程序设计语言的非

形式化语义都是用这种方式说明的。例如 Pascal中while命令的操作语义可说明如下: 执行命令while E do C,其步骤为:

(1) 对表达式E求值,产生一个真假值。

(2) 如果值为true,则执行命令C,然后从(1)开始重复。

(3) 如果值为false,终止。

操作语义的特点是,强调程序的每一执行步骤。这样能清楚地洞察到程序实现的路径, 但在实际中,过分注重细节则难于识别程序执行的净效应。

另一种观点是把程序看成是一个数学函数的实现。命令式语言的程序都可以看作是函数实现,它将程序的输入数据映射为输出数据。函数式语言程序更明显地实现函数 。我们就把这

个函数理解为程序的意义。这种思想是指称语义学的基础。例如,在Pascal语言里的while命令,其指称语义可以说明如下:

execute 〖while E do C〗 =

let execute-while env sto =

let truth-value tr=evaluate〖E〗 env sto in

if tr

then execute-while env (execute 〖C〗 env sto)

else sto

in

execute-while

这个语义表示可读作:

执行while E do C的语义函数是execute-while函数,该函数定义为映射到环境(env)和存

储(sto)上以得到存储的新值。为求出execute-while的净效应,先设真值函数tr,它等于在环

境env存储sto上对E求值。如果tr为真值,则递归执行execute-while的函数,即在env, sto

下执行C从而改变sto的值。每次执行时env没变sto改变了。当tr为假时,结果就是sto的值。

指称语义学是由牛津大学的Dana Scott和Christopher Strachey(1971)开发的。这种描述

方法可在Stoy(1977)和Schmidt(1986)的论述中找到。其基本思想是 :为每个程序短语指派一

数学实体(指称)为其意义。典型情况是将其输入映射为输出的函数。例如,一个表达式的指称

是将环境和存储映射为值的函数。一个命令的指称是将环境、初始存储映射为最终存储的函数。一个复合命令的指称是它的子命令的复合指称等等。更一般地,任何复合短语的指称都是各子

短语指称的组合。

指称语义学也称数学语义学,它不像操作语义学那样涉及操作的细节。实际上是每个语法

结构的数学模型,尽管它比较抽象,目前仍然是准'标准'的语义学。本书我们还要重点讨论它。

除此而外,公理语义和代数语义是近代软件工程和面向对象技术研究经常用到的。

Robert Floyd于1967年提出了可以在程序流程图的弧上加上断言来推测程序的正确性 。

每一个断言都是与程序变量的当前值有关的逻辑公式,例如:断言x<0,y=x+1是说x的当前值非负,y的当前值比x的值大1 。这种方法的目的是在程序的末端产生一个将程序的输入与输出联

系起来的断言,Tony Hoare(1969)将这种思想用于高级语言的控制结构,并指出语言本身的语

义可以用这种方式说明。这就是所谓的公理语义学。Hoare 和 Wirth(1973)对Pascal的一个大

子集进行了公理语义化。Hoare和Lauer(1974)研究了概念操作语义和公理语义的互补(仍保持

一致性)。

公理语义学把语言的公理描述看作是该语言的一个理论,该理论由三部分组成:

· 公理集 元语言描述的不加证明的公理集如:|- 0

一个定理(由|-表示)也是一条公理。

· 语法规划集 以它来确定什么是合式公式。

· 推理规则集 从已确立的定理演绎新定理。

推理规则表示为:

f1, f2, ……, fn 前提

_________________ __________

f0 推论

意即,若f1,f2,…,fn是定理,那么f0也是定理。其中f1是形如 PSQ 的公式,证明后即定理。P,Q为S操作的前后置断言。示例如:

x=a and y=b 前置断言P,证明的前题

t:=x; x:=x+y; y:=t 操作集S

x=a+b and y=a 后置断言Q,结论

公理语义不像指称语义那样能为每个语法结构给出一个数学指称,并能得出指称域上的值。它只定义证明规则(公理及推理规则),以此证明程序的某些性质。这些证明规则在某种意义上就是抽象的语义。

公理语义主要用于程序验证,语言理解,语言规范/标准化等方面,对编译 、解释器的 没有直接的作用。

同一客观事物,如果从功能角度抽取模型进而可编制基于功能的软件,即注重程序的行为。这样的软件最害怕修改。因为修改功能往往是最直接的要求。如果从模型客观世界对象的性状抽取模型,则可编制基于对象的软件,即注重数据类型对客观世界的映射。愈是抽象程序则愈经得起修改。因此,基于抽象数据类型编制的软件有良好的稳定性、重用性、可修改性。抽象数据类型也是对象式程序设计的理论基础。

从数学的观点,数据类型刻划了某些数据集以及在这些数据集上的操作集,就是经典的多类代数,抽象数据类型即泛代数,它是抽象数据类型的数学模型。从泛代数和范畴论的角度,一个抽象数据类型对应为项代数的初始代数,代数规格说明示例如下:

specification LISTS

sorts

List

NATURALS

formal sort Component

Operations

empty_list : List

cons(_,_) : Component,List→List

headof_ : List → Component

tailof_ : List → List

lengthof_ : List → NATURALSs

variables c: Component

l: List

equations

headof cons (c,l)=c

tailof cons (c,l)=l

tailof empty_list = empty_list

lengthof empty_list = 0

lengthof cons (c,l)=succ (length of l)

end specification

这是抽象表数据类型的代数规格说明,sorts是说明表用到的数据类别,包括一形式类别Component。operations部分列出五个函数, 即LISTS的行为(操作)。下横线是占位符表示要用到的参数. 后面是参数类别到结果类别的映射。equations部分是约束行为的等式,即公理部分。为了表达的普遍性,设变量c,l。行为加上约束就是 LISTS的代数语义。

2.4.3 上下文规格说明

至此,我们对程序设计语言的语法和语义的形式方法勾画出了大体轮廓,可从中看出明显的差别。但在实际中,它们的界限是模糊的,例如,静态类型程序设计语言(如Pascal)的表达式 x/2。若孤立地看,该表达式是合乎格式的,但是,如果x的类型是character又会怎样呢? 这显然是个错误。但它是语法错误还是语义错误呢? 有两种不同的观点:

·这是一个语义错误。 因为有一个'/'的操作数不是数字,导致对表达式的求值失败。

·这是一个语法错误。 因为不能孤立地看这个表达式而应将它作为程序的一部分。因为x 的使用与其声明时的不一致,整个程序就不能认为是合格的。因此x/2的语义就无关紧要了,我们仅关心合格程序的意义。

在术语解释方面也有争议,持第一种观点的人把类型规则看成是静态语义,程序中的语义行为在编译时就能预断;持第二种观点的人将类型规则看成是上下文敏感的语法,一个合格的短语的语法要受它出现的上下文环境的影响。

在本书中,我们采取的是折衷观点,使用的术语是上下文约束(contextual constraints),它与语法和语义都有区别。

上下文约束可定义为限定程序短语为良构的规则,例如:

· 标识符只能在声明它的块中使用。

· 赋值语句左右两侧必须有相同类型。

· 在while do 中exp必须是布尔表达式。

这样,就简化了语法和语义的形式化。如前所述,大多数程序设计语言并非上下文无关文法能全部描述的。对个别上下文敏感部分(如类型规则)则在上下文规格说明中予以说明。

2.5 小结

· 本章首先介绍程序语言中非常重要的概念:表示与抽象,即同一事物可在不同的抽象层表示它 。程序语言的实现实质是不同抽象层次的等价变换。继而讨论抽象的内涵与外延问题。

· 从抽象层次的角度可以把计算机解题分为四个世界。用户看到的程序设计语言是程序世界使用程序对象,实现者要涉及机器世界,要处理存储对象。

· 即使只限定程序世界,对象表示有显式也有隐式的。

· 本章讨论了语言设计目标。它们是模型能力、语义清晰、实用性、方便性、简单性、可读性、可移植、效率高、适当的灵活性等九个方面,只能定性举例比较难于量化。

· 为了实现以上九个目标应遵循的设计准则: 频度、结构一致、局部性、词法内聚.语法一致、安全性、正交性/正则性、数据隐藏、抽象/修饰表达、移植性等。

· 本章从表示的角度介绍了程序设计语言的规格说明。它们的术语、基本概念。

· 语法规格说明一节介绍上下文无关文法的基本概念与表示。介绍了形式语言理论中按文法的产生式划分的Chomsky四种文法和四种语言。指出程序语言规格说明中一般采用上下文无关文法(包含正则文法)。

· 上下文无关文法的元语表示是BNF或EBNF范式,EBNF由于纳入正则表达式表示法比BNF 简炼但表达能力一样 。EBNF和语法图完全一致对应,只是语法图更直观,语法定义中一般两者都给出。

· 本章介绍了当前广泛研究、使用的形式语义。虽然定义程序设计语言文本时并不是必须的。形式语义描述程序执行中的行为 。本节给出了每种语义学如何描述程序行为的初步概念。

· 操作语义将每个操作抽象并形式表达它的操作后果。注重细节、表达复杂,非行家一时难看出程序净效应。但在重要的涉及硬件、控制的应用中还有用到它。

· 指称语义把程序看作是一个数学函数的实现。用语义函数在语义域上如何取值表征语法特征的行为,是较为抽象的表示,这样只关心程序净效果 。是当前语义学研究中的'标准'语义。

· 公理语义并不给语法特征以确切的数学映射值,它只定义公理及推理规则以此证明程序的某些性质。这些证明规则就是抽象语义。

· 代数规格说明用以表达抽象数据类型,它以代数方法处理满足给定逻辑系统的各种模型,即可模型程序的各种代数结构。刻划了语义范畴。

· 上下文说明是使形式语法和语义不致过于复杂的折衷。以自然语言给出相应约束。以便语言处理器的实现者遵照。

习题

2.1 举出日常生活中的三个例子,说明高层抽象内涵减小,外延增大。

2.2 计算机解题涉及四个世界的对象及其相互运动(作用)。程序设计语言要涉及几个世界对象? 为什么?

2.3 举例说明什么时候分散表示好,什么时候抽象(集中)表示好。

2.4 指出以下说法的正误

(a)程序设计语言越简短越好。

(b)复杂的语言可读性都差。

(c)已有程序设计语言(Pascal,C,Ada,Lisp,Prolog等)早已实用不存在二义性。

(d)高级语言由于硬件速度提高快不用追求效率。

(e)当今语言没有一个在语言的层次上就能保证可移植。

(f)有副作用的函数百害无一利。

2.5 将以下BNF表示的Algol60部分产生式画成语法图

::=

|

::= +

| -

|

::= .

::= 10 //10为下标。

::=

|

|

::=

|

|

::= +

| -

|

2.6 将下面的EBNF转换为BNF:

S -> A { bA }

A -> a [ b ] A

2.7 考虑下列文法:

< S > -> < A > a < B > b

< A > -> < A > b | b

< B > -> a < B > | a

下面的哪些句子属于这些文法所产生的语言?

(a)baab

(b)bbbab

(c)bbaaaaa

(d)bbaab

2.8 为一种由字符串构成的语言编写文法,这个字符串包括字母a的n次复制,后面接着字母b 的相同次数的复制,n>0。例如,字符串ab、aaaabbbb和aaaaaaaabbbbbbbb是属于这种语言,但是字符串a、abb、ba和aaabb则不在这种语言之中。

2.9 下面的Pascal程序有错误,识别每一个错误并将它们按语法错、语义错、上下文约束错归类:

pragram p;

a: array 10 of char;

b: Integer;

begin

a [0]:=b;

c:='*'

end.

2.10 当前的程序设计语言说明得都很严格,其编译程序也同样严格。程序不能有任何语法错误,而我们人类在讲话时对语法错误不在意,我们可以猜测讲话人的真正意思 。设想一个容错编译程序,一旦发现语法错误它能猜测程序员原来想写的是什么内容 ,这种编译程序能实现吗?(提示:研究PL/1的历史)

2.11 设想一个自身就能适应新程序结构的智能化编译程序。该编译程序并不简单地拒绝使用新的程序结构,而是请求程序员进行解释,以便进行学习。这种编译程序能实现吗?

2.12 在下面几种情况下,你能举出例子说明哪些二义性是人们希望的,哪些是可容许的?哪些是不希望的?

(a)人们谈话中的二义性。

(b)某本书或文章中的二义性。

(c)交互式查询语言中的二义性。

(d)程序设计语言中的二义性。

2.13 假设下面的文法是为一简单的函数语言设计的,试证明它有二义性:

Expr ::= pExpr | Expr pExpr | fn Id.Expr

pExpr ::= Id | Lit | (Expr)

2.14 证明下面的文法有二义性:

< S > -> < A >

< A > -> < A > + < A > | <标识符>

<标识符> -> a | b | c

高级语言程序设计课程设计报告

高级语言程序设计课程 设计报告 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

2013-2014学年第二学期 《高级语言程序设计》 课程设计报告 题目:班级档案管理系统 专业:网络工程 班级:二 姓名:朱和芳 指导教 师:孙妍姑 成绩: 计算机与信息工程系 2014年5月11日 班级档案管理系统 设计总说明 一、设计目的 运用计算机语言设计班级档案管理,通过此次课程设计,加深对此课程基本知识的理解,提高综合运用知识的能力;掌握本课程的主要内容、课程设计或撰

写小论文的步骤和方法;以提高独立分析问题、解决问题的能力,逐步增强实际工程训练。 二、设计内容 对一个有N个学生的班级,通过该系统实现对该班级学生基本信息进行录入、显示、修改、删除、保存等操作的管理。 三、设计方法 结合C语言的有关知识,查阅资料,对班级档案管理系统的内容进行构思和设计,在MicrosoftVisualC++平台上完成设计,并进行调试。

目录 第一章绪论 (5) 第二章需求分析 问题描述 (6) 功能要求 (6) 算法提示 (6) 项目开发的目的 (7) 第三章概要设计 程序模块的组成 (8) 班级档案管理系统 (8) 各个程序的功能介绍 (9) 系统结构图 (9) 第四章模块设计分析 程序的模块组成 (10) 各个函数的主要功能 (10) 系统的功能模块的划分 (10) 总流程图 (12) 功能流程图 (13) 第五章测试 存在的问题 (14) 测试方案 (14) 第六章使用说明书 (15)

第七章总结 (17) 附录 A参考文献 (18) B源程代码 (20)

全国高等教育自学考试高级语言程序设计

全国高等教育自学考试高级语言程序设计 Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】

2001年10月全国高等教育自学考试高级语言程序设计(一) 试卷 第一部分选择题 一、单项选择题 (本大题共20小题,每小题1分,共20分) 在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。 1. C语言程序编译时,程序中的注释部分【】 A. 参加编译,并会出现在目标程序中 B. 参加编译,但不会出现在目标程序中 C. 不参加编译,但会出现在目标程序中 D. 不参加编译,也不会出现在目标程序中 2. 下列表达式的值为0的是【】 A. 3﹪5 B. 3/ C. 3/5 D. 3<5 3. 正确的C语言用户自定义标识符是【】 A. print B. float C. when?

D. random﹪2 4. 设int a = 3;则表达式a<1&& - - a>1的运算结果和a的值分别是【】 A. 0和2 B. 0和3 C. 1和2 D. 1和3 5. 下列叙述中,正确的是【】 A. 引用带参的宏时,实际参数的类型应与宏定义时的形式参数类型相一致 B. 宏名必须用大写字母表示 C. 宏替换不占用运行时间,只占编译时间 D. 在程序的一行上可以出现多个有效的宏定义 6. 下列保留字中用于构成循环结构的是【】 A. if B. while C. switch D. default 7. 与语句if(a>b)if(c>d)x = 1;else x = 2;等价的是【】 A. if(a>b){if(c>d) x = 1;else x = 2;} B. if(a>b){if(c>d) x = 1;} else x = 2;

《统计学》第02章在线测试

《统计学》第02章在线测试 《统计学》第02章在线测试剩余时间:56:00 答题须知:1、本卷满分20分。 2、答完题后,请一定要单击下面的“交卷”按钮交卷,否则无法记录本试卷的成绩。 3、在交卷之前,不要刷新本网页,否则你的答题结果将会被清空。 第一题、单项选择题(每题1分,5道题共5分) 1、我国目前收集统计资料的主要形式是 A、全面调查 B、普查 C、抽样调查 D、统计报表 2、统计表的横行标题表示各组的名称,一般应写在统计表的 A、上方 B、左方 C、右方 D、都可以 3、在填写统计表时,当发生某项不应有数字时,用()符号表示 A、O B、X C、— D、... 4、统计调查表的形式 A、简单表和分组表 B、简单表和复合表 C、简单表和一览表 D、单一表和一览表 5、对一部分农民家庭收支状况通过提问,算账方式进行调查,这是采用统计调查中的 A、直接观察法 B、采访法 C、报告法 D、通讯法 第二题、多项选择题(每题2分,5道题共10分) 1、从表式上看,统计表由哪些部分构成 A、总标题 B、主词 C、纵栏标题 D、横行标题

E、指标数值 2、普查属于 A、专门调查 B、全面调查 C、非全面调查 D、一次性调查 E、经常性调查 3、常用的收集资料的方式有 A、报告法 B、采访法 C、大量观察法 D、直接观察法 E、问答法 4、专门调查包括 A、普查 B、抽样调查 C、定期报表 D、全面报表 E、典型调查 5、下列社会经济资料的收集,可采用经常性调查方式的有 A、商品库存量 B、职工人数 C、工业总产值 D、企业固定资产价值

E、企业工伤事故情况 第三题、判断题(每题1分,5道题共5分) 1、以绝对数形式表示的指标都是数量指标,以相对数或平均数表示的指标都是质量指标。 正确错误 2、综合指数和平均指数都是总指数。 正确错误 3、所选择单位的标志值占总体标志总量的绝大比例,这些单位就是重点单位 正确错误 4、抽样调查中,样本容量的大小取决于很多因素,在其他条件不变时,样本容量与边际误差成正比。 正确错误 5、重点调查可以是定期的也可以是不定期的 正确错误

00342高级语言程序设计(一)考试说明

00342高级语言程序设计(一) 一、本课程使用教材、大纲 高级语言程序设计(一)课程使用的教材为《高级语言程序设计》 迟成文编著、经济科学出版社、2007年第一版。 二、本课程的试卷题型结构及试题难易度 1、试卷题型结构表 四个认知层次在试卷中所占比例大致分别为:识记占20%、领会 占30%、简单应用占30%、综合应用占20%。 3、试卷难易度大致可分为“容易、中等偏易、中等偏难、难”。根据 课程的特点,每份试卷中,不同难易度试题所占的分数比例大致 依次为易占30分、中等偏易占30分、中等偏难占20分、难占 20分。 三、各章内容分数的大致分布

五、各题型范例及解题要求 1.单项选择题 要求:在下列每小题的四个备选答案中选出一个正确的答案,并将其字母标号填入题干的括号内。 例:组成C语言程序的是(B ) A.过程B.函数C.子程序D.主程序和子程序 2.填空题 函数中的形参和调用时的实参都是变量时,传递方式为________。答案:值传递方式 3.程序填空题 例:输入10个整数存入一维数组,再按逆序重新存放后再输出。 main( ) { int i, j, a[10], t, *p; for(i=0; i<10; i++) scanf("%d", __________ ); for(i=0, j=9; i

常见说明方法及作用(学案)

常见说明方法及作用(学案) 一、说明文阅读常见考点 说明顺序判断、说明方法判断、说明方法作用分析、说明文语言准确性分析 二、列举常见的几种说明方法 举例子、分类别、打比方、列数据、作比较、下定义、作诠释、画图表、引资料(引用)、摹状貌 三、说明方法准判断 指出下列文字表述用了什么说明方法? 1、永定河上的卢沟桥修建于公元1189年间。桥长265米,由11个半圆形的石拱组成,每个石拱长度不一,自16米到21.6米。() [出现具体数据] 2、“生物入侵者”在给人类造成难以估量的经济损失的同时,也对被入侵地的其他物种以及物种的多样性构成极大威胁。二战期间,棕树蛇随一艘军用货船落户关岛,这种栖息在树上的爬行动物专门捕食鸟类,偷袭鸟巢,偷食鸟蛋。() 3、“克隆绵羊”的问世也引起了许多人对“克隆人”的兴趣。例如,有人在考虑是否可用自己的细胞克隆成一个胚胎,在其形成前就冻结起来。()[出现“例如”、“比如”、“以……为例”、“如”等字眼;或出现具体事迹的时间、地点、事物的名称,如“棕树蛇”。] 4、按屏的建造材料及其装饰的华丽程度,分为:金屏、银屏、锦屏、画屏、石屏、竹屏、木屏等。() 5、人类有三种眼泪。第一种是在眨眼间产生的,即所谓“基础泪”;第二种眼泪,也具有纯生物作用,它是因为条件反射活动流出的泪水;第三种眼泪,即由于激动而流出的眼泪,也是只有人类才有的眼泪。() [明显地出现“按……分为”“第一、第二、第三”“首先、其次、再次、最后”等字眼] 6、都是生物靠自身的一分为二或自身的一小部分来繁衍后代,这就是无性繁殖。() [出现归纳概括性词语,如“这就是”“这就叫做”;或定义名词前面出现“所谓”的字眼。] 7、物候观测使用的是活生生的生物,它比气象仪器复杂得多,灵敏得多。( ) [出现“比””比起”“比较”“相对而言”等字眼。] 8、桥的设计完全合乎科学原理,施工技术更是巧妙绝伦。唐朝的张嘉贞说它“制

《高级语言程序设计》复习题及答案

一、选择题 1.以下叙述正确的是( ): A)在C程序中,main函数必须位于程序的最前面 B) C程序的每行只能写一条语句 C) C语言使用库函数实现输入输出操作 D)注释中的拼写错误会影响编译结果 2、以下说法中正确的是() A) C语言程序总是从第一个的函数开始执行 B) C语言程序总是从main()函数开始执行 C)在C语言程序中,要调用的函数必须在main()函数中定义 D)C语言程序中的main()函数必须放在程序的开始部分 3、下列选项种说法正确的是( ) A)函数由声明部分和执行部分两部分组成 B)语言中main函数一定在程序的开始部分 C)C语言程序总是从第一个定义的函数开始执行 D)C程序的每行中只能写一条语句 4、设有说明:int a;float b; char c; double d; 则表达式1.3*a+2*b*c+d*(int) 2.6 值的类型为( )。 A)doubleB) char C) floatD) int 5、C语言的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( ) A)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母、数字和下划线中任一种字符 6、以下不正确的C语言标识符是( )。 A) ABC B) abc C)a_bc D) void 7、下列运算符中优先级最高的是( ) A)< B)+ C)&& D)!= 8、以下选项中属于C语言中合法关键字的是( ) A)Float B)abc C)int D)CASE 9、若x、i、j和k都是int型变量,计算下面表达式后,x的值为( ) x=(i=4,j=16,k=32) A)4 B)16 C)32 D)52 10、在C语言中,要求数据必须是整型的运算符是( ) A)/ B)+ + C)!=D) % 11、若整型变量x的值为8,则下列表达式中值为1的表达式是 A)x+=x-=x B) x%=x-1 C) x%=x%=3 D) x/=x+x 12、若w=1,x=2,y=3,z=4,则条件表达式“w > x? w : y< z ? y : z”的值是( ) A)4 B)3 C)2 D)1 13、有以下程序,程序运行后的输出结果是。 main() {inti=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); }

华南理工大学高级语言程序设计作业

华南理工大学高级语言程序设 计作业(总3页) -CAL-FENGHAI.-(YICAI)-Company One1 -CAL-本页仅作为文档封面,使用请直接删除

《高级语言程序设计(https://www.doczj.com/doc/8b17117393.html,)》作业 2014.3 教学中心:专业层次: 学号:姓名: 一.判断题(如正确打√,否则,打×。) 1.存储数据不属于数据处理功能。N 2. Write_1 和学校$ 是正确的变量名。Y 3.若一个整型变量说明了之后没有给它赋值,则它的值为0。Y 4.判别ch是否为小写字母,若是,输出“yes”;否则,输出“No”的块结构条件语句为:Y If Asc(ch)>=97 And Asc(ch)<=122 Then WriteLine (“Yes”) Else WriteLine(“No”) End If 5.。输入结构变量的值就是输入该变量的各个元素的值Y 6.函数过程定义中必须有一个赋值语句把表达式的值赋给函数过程名。N 7. 事件是由https://www.doczj.com/doc/8b17117393.html,系统预先设置好或者在程序中由编程者自己设计的,它能够被对象识别的动作。Y 8. 从文件取出一组数据以流的方式存放到程序的变量或数组中称为向流写入数据。N 9. 文件流类FileStream用于打开和关闭文件,并提供对文件按字节的读/写操作。Y 10. 在VB中不可以把类型说明符放在变量名的末尾来说明变量的类型。N 二.单项选择题 1.下列变量名中错误的是( “年龄” )。 2.设X为整型变量,不能正确表达1< X < 5的逻辑表达式是(1< X <5 )。 3.设有数组说明语句:Dim c( 10) AS Integer,则下面表示数组c的元素选项中 (c(11) )是错误的。 4.在过程的形式参数前面加上关键字( ByVal ),则该参数说明为引用参数。 D. 5. 设已定义函数过程f,它有三个实型传值参数;设a,b和c为实型变量,则调用该函数的正确形式为( f a+b, b+c, c+a )。 6.若使命令按钮不可见,可以设置Visible属性的值为( False )。 7.要使单选按钮RadioButton处于选中或未选中状态,需由( Checked )属性来决定。 8.要删除列表框中的某一个项目,需要使用(ReMove )方法。 9.要设置计时器的时间间隔可以通过( InterVal )属性来实现。 10.下面( StreamWriter )类用来把数据写入文本文件中。 三.简答题 1. 在控制台应用程序中,如何输入输出一维数组的元素 1. 答:输入一维数组元素的值可以使用赋值语句,也可以使用Console类的输入方法Read和ReadLine从键盘输入数据。输出一维数组元素的值可以使用Console类的Write方法和WriteLine方法。 2.若有数组定义语句:Dim c%() = { 76, 80, 75},则数组c有多少个元素这些元素是什么它们的初值是多少 3.答:数组c共有3个元素c(0)、c(1)和c(2),它们的初值分别为1、2和3,即c(0)=76,c(1)=80和c(2)=75。 3. 文件操作可以分为哪些步骤

最新高级语言程序设计课程设计方案汇总

2011高级语言程序设计课程设计方案

《高级语言程序设计》课程设计方案 一、设计的目的 《高级语言序设计》课程设计是计算机科学与技术专业和网络工程专业集中实践性环节之一,是学习完《高级语言程序设计》课程后进行的一次全面的综合练习。本课程设计主要目的在于加深学生对高级语言程序设计的基本理论和基本语法知识的理解,全面掌握高级语言程序设计的基本方法和技术,熟悉相关编程环境和工具,能够熟练地运用C/C++编写较为简单的应用程序,并对之进行调试分析。按照专业人才培养方案规定,本课程设计合格学生记学分2分。 二、参与人员与组织方式 按照专业人才培养方案,本课程设计要求2010级计算科学与技术专业和网络工程专业的所有学生必须按时完成。为了保证设计的质量,本课程设计以组为单位,3人一组进行组织,配备一位指导老师进行指导。课程设计时间共两周,从2011年12月1日开始到2011年12月23日结束。 三、设计内容 以Windows xp或Windows 7等为开发平台,以Visual C++或GCC/G++(IDE推荐MinGW Developer Studio)作为开发工具和开发环境,用纯C或C++编码,完成一个小型实用程序的设计、算法分析和编码、调试,程序采用控制台字符界面,数据采用文本文件存储,要求程序功能清晰、完善,能正常运行,有明确的输入输出,结果正确,用户界面友好;代码要求符合标准,排版清晰,风格良好。设计过程应该提供完善的设计文档,代码说明文档。根据学生的具体情况,每位学生从以下题目中任选一个,独立完成分析、设计和程序实现。 参考设计题目: 一、编写一个公司财务管理程序 1、内容 编写一个程序,对某个公司的财务进行管理,包含简单的财务数据录入,查询,输出等功能。 2、设计要求 1) 程序采用字符界面 2) 显示功能菜单,用户指定键即可进入相应功能 3) 财务记录保存于文本文件 4) 支持手动查询和报表输出,数据输出格式美观

谈话分析与常人方法论的质性研究_范宏雅

2012年3月山西大学学报(哲学社会科学版)Mar.,2012第35卷第2期Journal of Shanxi University(Philosophy&Social Science)Vol.35No.2·政治学与社会学研究· 谈话分析与常人方法论的质性研究 范宏雅1,2,赵万里2 (1.山西大学外国语学院,山西太原030006;2.南开大学社会学系,天津300071) 摘要:谈话分析是常人方法论的亚纲领之一,致力于发现日常谈话与机构性谈话中社会成员处理日常问题的基本方法和实践特征。谈话分析创建了独特的语料收集方法和分析技术,用实例揭示了不同机构场景中的话语特征,其微观的质性研究方法代表了当代社会研究“质的革命”的典型路径。文章探讨了谈话分析及其常人方法论渊源、谈话分析的研究特点和程序,并指出了谈话分析作为一种质性研究方法的方法论意义。 关键词:谈话分析;常人方法论;质性研究 中图分类号:C91-03;H0-05文献标识码:A文章编号:1000-5935(2012)02-0060-05 长期以来,质性、量化两种研究方法的优劣长短一直是社会学方法论争论的重要焦点。由社会学创始人孔德(Au-guste Comte)倡导的实证主义哲学和“社会物理学”研究范式,经过涂尔干(Emile Durkheim)的大力倡导和示范性工作,一度成为社会学唯一推崇的科学研究方法,质性研究的科学地位受到置疑。但自20世纪70年代开始,定性研究在对定量研究的批评声中得到长足发展,并在20世纪80年代引发了一场围绕量化与质性两大研究范式的方法论论战[1]。 在社会学思维方式和研究方法论发生革命性转变的过程中,脱胎于现象学社会学的常人方法论(Ethnomethodolo-gy)起到了十分重要的作用。①这个兴起于1960年代的社会学理论流派致力于对日常生活中例行活动进行直接经验研究,用“常人方法论的无差异”(ethnomethodological indiffer-ence)思想和“破坏性试验”(breaching experiment)等独特研究方式对日常生活中“理所当然的”(taken-for-granted)、不言而喻和毋庸置疑的现象进行反思性说明,从而揭示行动者日常交际中未曾言说、无法提及的潜在社会现实。作为常人方法论王冠上的一颗明珠[2],谈话分析将常人方法论的理论真正深入到对日常语言的分析之中,力图揭示互动谈话(talk-in-interaction)的序列、方法和基本结构及其与社会规范、社会制度和社会结构之间的共建关系和过程。本文拟对谈话分析作为一种质性社会研究方法的特点和程序进行介绍和评述,从而揭示其解构传统社会学关于社会结构、社会规范看法的具体方法,及其经验一元论对于社会研究方法论修辞的变革意义。 一谈话分析作为常人方法论的经验纲领 常人方法论旨在研究普通人如何运用常识性知识和程序来解释互动情境、建构日常秩序的方法,通常以加芬克尔(Harold Garfinkel)在1967年出版的《常人方法论研究》为奠基之作。1970年代,常人方法论发展出了若干不同的经验研究纲领。其中最引人注目的,或许是由萨克斯(Harvey Sacks)、谢格洛夫(Emanuel A.Schegloff)和杰弗逊(Gail Jef-ferson)所创立的谈话分析(conversation analysis,CA)②。尽管谈话分析也受到戈夫曼(Erving Goffman)的符号互动论、维特根斯坦(Ludwing Wittgenstein)的日常语言哲学、乔姆斯 收稿日期:2011-12-10 基金项目:国家社科基金项目“科学社会研究中的社会学与人类学视角比较研究”(04BSH004) 作者简介:范宏雅(1974-),女,河北新乐人,山西大学外国语学院讲师,南开大学社会学系在读博士,主要从事社会语言学、当代社会学理论和话语分析研究; 赵万里(1964-),男,河南遂平人,南开大学社会学系教授、博士生导师,主要从事当代社会学理论、科学社会学研究。 ①刘少杰曾对常人方法论对社会学思维方式的变革做了阐释,参见:刘少杰.国外社会学理论[M].北京:高等教育出版社, 2006:247-267.另外,李猛对常人方法论也有系统评介,见:杨善华.当代西方社会学理论[M].北京:北京大学出版社,1999:47-97. ②谈话分析现在已逐渐发展成为语言学、社会学、人类学及心理学等诸学科交汇的研究领域。国内学者尤其是语言学者倾 向于把Conversation Analysis译为“会话分析”,其实谈话分析不仅关注日常会话,自1970年代以来更加注重对各种社会机构或工作环境中交谈的研究,也就是对“互动谈话”(talk-in-interaction)的研究。而“conversational analysis”的表达也是不正确的(Have Paul ten.Doing Conversation Analysis:a practical guide[M].London:Sage,1999:11)。因此以谢格洛夫为代表的学者更倾向于使用talk-in-interaction的表达。

《高级语言程序设计》答案

1. 输入两个整数,要求用两个函数求出其最大公约数和最小公倍数,最大公约数和最小公倍数都在主函数中输出。#include int main() { int i,j,t; int max(int,int); int min(int,int); scanf("%d%d",&i,&j); if(i int main() { int max4(int,int,int,int); //对max4的函数声明 int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); //输入4个数 printf("max=%d\n",max4(a,b,c,d));//调用4个数中的最大者 return 0; } int max4(int a,int b,int c,int d) //定义max4函数 { int max2(int,int); //对max2的函数声明 return max2(max2(max2(a,b),c),d); //调用max2把作为函数值带回main函数} int max2(int a,int b) { return(a>b?a:b); //返回条件表达式的值,即a和b中的大者 } 3. 用递归调用的方法求5!。 #include int main() { int fac(int); int n; scanf("%d",&n);

程序和程序设计语言(教学设计)

第3节程序和程序设计语言 一、教学目标 知识目标:1、掌握计算机程序的概念 2、掌握计算机程序的概念、计算机语言分类及其特征。 技能目标:通过阅读程序,学生主动探寻算法与程序的关系 情感态度与价值观:编程语言没有好坏之分,应选择适合自己的语言深入学习 二、教学重点和难点 重点:1、计算机语言的概念。 2、高级语言的特征 难点:程序的编译与解释 三、教学过程 以九歌机器人七秒成诗引入新课 (一)程序和程序设计 计算机能做很多的事情,包括各种控制活动,它们都是在程序的控制和指挥下进行的,可以这么说:离开了程序,计算机什么也干不了。 1、程序及其特征 (1)程序(Program):是一组操作的指令或语句的序列,是计算机执行算法的操作步骤。 (2)程序的特征: ●解决问题的每一个算法步骤对应着程序中的一个或多个语句实现一个或多个操作, 每一个操作都有执行对象。 ●在程序中被施行操作的对象称为数据。 ●除了有特殊的程序转向控制语句外,程序都是从第一条语句开始顺序执行。 2、程序的基本结构 (1)顺序结构 (2)选择结构 (3)循环结构 3、程序设计:从分析问题、建立模型、设计算法、编写修改程序,一直到程序正确运行的整个过程。

(二)程序设计语言 程序设计语言:是指人们编制程序所使用的计算机语言。 程序设计语言的分类: 机器语言 汇编语言 高级语言 1、机器语言 机器语言(machine language):把直接用二进制代码表示的计算机指令系统称为机器语言。 机器语言特点: ①用机器语言编写的程序可以被计算机直接执行,速度快,占用内存少。 ②编写程序相当繁琐。 ③程序不具有通用性。 2、汇编语言 汇编语言(assembly language):用符号和数字来代替二进制代码的计算机语言称为汇编语言。 汇编语言特点: ①不能被计算机直接执行。 ②编写程序比机器语言方便得多。 ③程序不具有通用性。 3、高级语言 高级语言(high-level language):由一系列按一定语法规则的语句组成(与计算机内部结构无关、通用、用其编写的程序需要“翻译”后才可执行)。 高级语言特点: ①不能被计算机直接执行。 ②易读、易改,编写程序方便。 ③程序通用性好。 补充:Basic语言的发展历程 BASIC(Beginner’s All-purpose Symbolic Instruction Code的缩写,即初学者通用符号指令代码)语言简单易学,适合初学者。

统计学第二章统计调查

(一)填空题 1、按调查对象包括的范围的不同来划分,统计调查可分为全面调查和非全面调查。 2、按调查登记的时间是否连续来划分,统计调查可分为经常性调查和一次性调查。 3、按组织形式的不同来划分,统计调查可分为统计报表调查和专门调查。 4、一般来说,统计调查方案的内容必须包括:调查的目的、调查对象和调查单位、调查项目和调查表、调查时间和调查期限。 5、调查单位是标志的承担者,而填报单位则是的单位。 6、普查的组织方式有和。 7、重点调查是一种,它所选择的重点单位的总量占总体全部单位的总量的绝大部分。 8、抽样调查特点可概括为和。 9、普查是一种专门组织的一次性的全面性调查,它主要用来调查一定时点上的社会经济现象总量。 10、统计报表是按照国家有关法规的规定,自上而下地统一布置,定期的自下而上地逐级提供统计资料的一种统计调查方式方法。 11、统计报表按报表内容和实施范围的不同,可分为国家统计报表、部门统计报表和地方统计报表。 12、统计报表按报送周期长短不同,可分为日报、周报、旬报、月报、季报、半年报和年报。 13、统计报表资料来源于基层单位的原始记录,从原始记录到统计报表,中间还要经过统计台帐和企业内部报表。 14、统计台帐是基层单位根据和本单位的需要而设置的一种系统的表册。 (二)单项选择题(在每小题备选答案中,选出一个正确答案) 1、在国有工业企业设备普查中,每一个国有工业企业是( C) A. 调查对象 B. 调查单位 C. 填报单位 D. 调查项目 2、通过调查大庆、胜利等几大主要油田来了解我国石油生产的基本情况,这种调查方式属于( C ) A、普查 B、典型调查 C、重点调查 D、抽样调查 3、区别重点调查和典型调查的标志是( C ) A. 调查单位数目不同 B. 收集资料方法不同 C. 确定调查单位标准不同 D. 确定调查单位目的不同 4、了解某企业的期末在制品数量,由调查人员亲自到现场观察计数,这种收集资料的方式属于( B )。 A、采访法 B、直接观察法 C、大量观察法 D、报告法 5、非全面调查中最完善、最有计量科学根据的方式是( C ) A. 重点调查 B. 典型调查 C. 抽样调查 D. 非全面统计报表 6、我国目前收集统计资料的主要形式是( D ) A、全面调查 B、普查 C、抽样调查 D、统计报表 7、统计调查时间是( B ) A. 调查工作的时限 B. 调查资料所属时间 C. 调查登记的时间 D. 调查期限 8、统计调查收集的资料主要是指( A ) A、原始资料 B、总体资料 C、数字资料 D、初次整理过的资料

《高级语言程序设计》课程设计

《高级语言程序设计》课程设计 一、课程的性质与任务 1.课程性质:《高级语言程序设计》课程设计是计算机工程学院为本科生各专业开设的专业实践课。计算机工学院本科生在完成《高级语言程序设计》课程学习后,通过本课程进入专业实践训练环节,其主要目的是使学生深入理解并实践在《高级语言程序设计》课程中所学的有关知识,受到实践动手能力的基本训练,培养学生的团队精神,增强发现、提出、分析和解决实际问题的能力,为学生毕业后的实际工作奠定一定的基础。 课程设计是培养学生综合运用所学知识锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。科学技术日新月异的发展使计算机应用在生活中可以说得是无处不在,因此作为计算机工程学院学生掌握程序设计和开发技术非常重要,而C语言又是最常见,功能强大的一种高级语言,因此做好C语言课程设计非常必要,能够对后续许多专业课程的学习和实践训练起到重要的保证作用。 2.课程任务:本课程要求学生编写相对教材中实例要较复杂一些的实用程序,通过理论知识与实际需求相结合的编写实用程序的实践活动,使学生了解应用程序设计解决实际问题的具体过程,了解利用算法和数据结构思想编写程序的实际实行方法,掌握应用C语言进行程序设计的基本规范和技巧,掌握阅读与编写程序的结构化程序设计思想,重点掌握C语言的一般语法规则、常用函数、程序编写调试过程和编程解题的常用方法。 二、高级语言课程设计基本要求 1.通过这次课程设计,要求加深对C语言的语法规则、数组、函数、指针等方面基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。 2.课程设计可采取每人一题,可任选一题进行设计, 至少包含五个功能模块。或者每组完成一个课题,每组成员(5到6人)分工合作完成一个课程设计,每个人的任务不同。

《高级语言程序设计》课程设计报告

2013-2014学年第二学期《高级语言程序设计》 课程设计报告 题目:进程调度模拟 专业:计算机科学与技术 班级:12级对口(3)班 姓名:刘以鹏 指导教师:代美丽 成绩: 计算机与信息工程系 2014年 5月 23日

目录 1 1 设计目的及要求 (3) 1.1 设计目的 (3) 1.2 课程设计的实验环境 (3) 1.3 课程设计的预备知识 (3) 1.4 课程设计要求 (3) 2 课程设计内容 (3) 2.1程序功能介绍 (3) 2.2程序整体设计说明 (4) 2.2.1设计思路 (4) 2.2.2数据结构设计及用法说明 (5) 2.2.3程序结构(流程图) (5) 2.2.4各模块的功能及程序说明 (6) 2.2.5程序运行结果 (7) 3 总结 (9) 参考资料 (11) 程序源代码 (12)

1 设计目的及要求 1.1 设计目的 本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 1.2 课程设计的实验环境 硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。 1.3 课程设计的预备知识 熟悉C语言及C语言开发工具。 1.4 课程设计要求 1. 分析课程设计题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告 2课程设计内容 2.1程序功能介绍 在多道程序环境下,进程数目往往多于处理机数目,致使他们争用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使

(完整word版)常用流行病学研究方法

常用流行病学研究方法 (一)概述 1.流行病学方法分类 流行病学研究方法总体分为观察法:包括描述流行病学和分析流行病学;实验法,也称实验流行病学;数理法,也称理论流行病学。 2.流行病学研究设计的基本内容 (1)查阅有关文献提出研究目的。 (2)根据研究Et的确定研究内容。 (3)结合具体条件选择研究方法。 (4)按照研究方法确定研究对象(要区别目标人群、源人群、研究对象之间的关系)。 (5)根据研究内容设计调查表格。 (6)控制研究过程,保证研究质量。 (7)理顺分析思路得出正确结论。 (二)描述流行病学 1.描述流行病学概念 描述流行病学(descriptive epidemiology)又称描述性研究。它是将专门调查或常规记录所获得的资料,按照不同地区、不同时间和不同人群特征分组,以展示该人群中疾病或健康状况分布特点的一种观察性研究。专门调查有:现况研究、生态学研究、个案调查以及暴发调查;常规记录有:死亡报告、出生登记、出生缺陷监测、药物不良反应监测和疾病监测等。描述流行病学可以;①为病因研究提供线索;②掌握疾病和病因的分布状况,为疾病防制工作提供依据;③用来评价防制策略和措施的效果。 2.现况研究 又称横断面研究或患病率研究,是描述性研究中应用最为广泛的一种方法。它是在某一人群中。应用普查或抽样调查的方法收集特定时间内、特定人群中疾病、健康状况及有关因素的资料,并对资料的分布状况、疾病与因素的关系加以描述。所获得的描述性资料室在某一时点或一个短暂时间内收集到的,客观地反映了某时点人群健康、疾病的分布及其相关因素,因此现况调查的数据是一个人群的现状,是时间断面的数据。现况调查的因素与结果是同时存在的,因此不能进行因果关系的推论。对于慢性病,尤其是病程长的疾病最适合做现况调查。根据研究目的,现况研究可以采用普查也可以采用抽样调查。 (1)普查(census):在特定时间对特定范围内人群中的每一成员进行的调查。普查分为以了解人群中某病的患病率、健康状况等为目的的普查和以早期发现患者为目的的筛检。 (2)抽样调查(sampling survey) 1)抽样调查概念:按一定的比例从总体中随机抽取有代表性的一部分人(样本)进行调查,以样本统计量估计总体参数,称为抽样调查。样本代表性是抽样调查能否成功的关键所在,而随机抽样和样本含量适当是保证样本代表性的两个基本原则。 2)抽样方法:有单纯随机抽样,系统抽样,分层抽样,整群抽样,多级抽样等。 3)样本含量的估计:抽样研究中,样本所包含的研究对象的数量称为样本含量。样本含量适当是抽样调查的基本原则。样本含量适当是指将样本的随机误差控制在允许范围之内时所需的最小样本含量。样本含量计算方法包括分类变量资料样本含量的估计方法和数值变量资料样本含量的估计方法(具体请参阅有关教材)。 (三)分析流行病学 1.分析流行病学概念与分类分析流行病学(analytical epidemiology)也称分析性研

《C语言程序设计》教案设计(清华谭浩强)

第一章C语言及程序设计概述 本章要求: 了解C语言的特点、C语言与其它高级语言相比有什么异同; 了解C程序在PC机上的建立、编译和运行过程; 了解C语言程序设计思想的基本篇; 重点:①C语言的主要特点; ②C语言在PC机上的运行过程及上机操作过程; ③常用算法的应用 难点:无 一、C语言概述 C语言是目前国际上在各种计算机运行较为广泛流行的一种高级语言。 主要表现为: C语言:适合于作为系统描述语言——可用来写系统软件。 具有高级语言的特点,又有低级语言(汇编语言)的特点。 C语言:是AT&T贝尔实验室的Dennis Ritchie在1972年发明的。 C语言:是在B语言的基础上发展起来的。(ALGOL 60) C语言:最早开始是用于UNIX操作系统。(C语言和UNIX是相辅相成的) DBASE 、Microsoft Exel 、 Microsoft Word、PC-DOS等,则是用C语言加上若干汇编子程序编写的。 1983年:——制定的新标准,称为(美国国家标准化协会)ANSI C 1987年:——Turbo C1.0 (Borland) 1988年:TC 1.5(图形和文本窗口) 1989年:——Turbo C2.0 (DOS操作系统、查错、Tiny模式生成com文件) 1991年:——Turbo C++(3.0) 支持windows 3.X 说明:Turbo C语言可以在程序的任何地方嵌入汇编代码,提高速度,可以直接使用存储器和寄存器。 二.C语言的特点 1.语言简洁、紧凑、使用方便、灵活 C语言:——共有32个关键字,9种控制语句; 程序书写自由,主要用小写字母表示; 2.运算符丰富

统计学各章习题及答案

统计学习题目录 第一章绪论 _________________________________________________ 2第二章数据的收集与整理 _____________________________________ 4第三章统计表与统计图 _______________________________________ 6第四章数据的描述性分析 _____________________________________ 8第五章参数估计 ____________________________________________ 12第六章假设检验 ____________________________________________ 16第七章方差分析 ____________________________________________ 20第八章非参数检验 __________________________________________ 23第九章相关与回归分析 ______________________________________ 26第十章多元统计分析 ________________________________________ 30第十一章时间序列分析 ______________________________________ 34第十二章指数 ______________________________________________ 37第十三章统计决策 __________________________________________ 41第十四章统计质量管理 ______________________________________ 44

高级语言程序设计课程设计指导书

信电工程学院 《高级语言程序设计综合训练》 指导书 电子信息科学与技术教研室编 2015年6月

目录 一、综合训练的目的 二、综合训练题目汇总 三、综合训练具体任务 四、综合训练说明 五、综合训练报告撰写要求

一、综合训练的目的 高级语言程序设计综合训练是电子信息科学与技术专业高级语言程序设计课程的综合实践课程。主要目的是通过对具体应用问题的分析和规范的程序设计过程,对学生进行综合设计训练,提高学生的程序设计水平和实际应用能力。通过本课程,学生将理论知识和实际应用问题结合起来,通过完整的分析、设计、实现过程,掌握用高级语言进行应用软件设计的基本思路和方法,掌握软件设计的基本流程和基本设计技能;训练和培养学生编写具有良好风格的代码的习惯,提高学生的分析解决实际问题的能力。该综合实践环节将使学生进一步理解和掌握高级语言程序设计的基础知识,提高学生理论水平和应用实践能力。 二、综合训练题目汇总 1. 学生信息管理系统 2. 学生选修课程系统 3. 银行存取款管理系统 4. 数据汇总系统 5. 学生成绩排序 6. 其他自选题

三、综合训练具体内容 (一)学生信息管理系统 1. 学生信息管理系统简介: 学生信息管理系统是一个小型学生信息管理程序,该软件能够实现学生信息表的建立,学生信息的添加,学生信息的显示,指定姓名或学号查询学生信息,学生信息的删除等简单管理功能。程序要求提供简单友好易于操作的界面。 2. 基本要求: 本课题要求设计实现“学生信息管理系统”程序。该程序实现学生信息管理的基本功能,包括信息表的建立、显示等功能。要求用动态链表实现该应用程序。用函数分别实现动态链表的建立、动态链表输出等功能。函数要求使用指针作形参。 3. 系统结构及模块要求: (1)学生节点数至少10个。学生信息包括学号,姓名,性别,年龄,籍贯,电话号码及email地址。 (2)程序主界面包括程序名称及编程者学号、姓名、班级;同时要求输入功能号码,选择进入功能模块程序。主界面格式及选择项(供参考)如下图1“系统主菜单”:(中文英文均可) (3)各模块功能: A. 创建学生信息表。动态创建学生信息表,同时输入学生信息。学生信息表用链表实现。链表节点个数不少于10个。

常用医学统计学方法汇总

选择合适的统计学方法 1连续性资料 1.1 两组独立样本比较 检 用成组的Wilcoxon检验。 1.4 多组随机区组样本比较 1.4.1资料符合正态分布,且各组方差齐性,直接采用随机区组的方差分析。如果检验结果为有统计学意义,则进一步作两两比较,两两比较的方法有LSD检验,Bonferroni法,tukey 法,Scheffe法,SNK法等。 1.4.2资料不符合正态分布,或各组方差不齐,则采用非参数检验的Fridman检验法。如果检验结果为有统计学意义,则进一步作两两比较,一般采用Bonferroni法校正P值,然后用

符号配对的Wilcoxon检验。 ****需要注意的问题: (1)一般来说,如果是大样本,比如各组例数大于50,可以不作正态性检验,直接采用t 检验或方差分析。因为统计学上有中心极限定理,假定大样本是服从正态分布的。 (2)当进行多组比较时,最容易犯的错误是仅比较其中的两组,而不顾其他组,这样作容易增大犯假阳性错误的概率。正确的做法应该是,先作总的各组间的比较,如果总的来说差别有统计学意义,然后才能作其中任意两组的比较,这些两两比较有特定的统计方法,如上 2.2.2列变量为效应指标,且为有序多分类变量,行变量为分组变量,用普通的Pearson 检验只说明组间构成比不同,如要说明疗效,则可用行平均分差检验或成组的Wilcoxon秩和检验。 2.2.3 列变量为效应指标,且为二分类变量,行变量为有序多分类变量,则可采用普通的Pearson 检验比较各组之间有无差别,如果总的来说有差别,还可进一步作两两比较,以说明是否任意两组之间的差别都有统计学意义。

相关主题
文本预览
相关文档 最新文档