1. 在C语言中,可以用typedef声明新的类型名来代替已有的类型名,比如有学生链表结点:
typedef struct node{
int data;
struct node * link;
}NODE, * LinkList;
下述说法正确的是______。
- A.NODE是结构体struct node的别名
- B.* LinkList也是结构体struct node的别名
- C.LinkList也是结构体struct node的别名
- D.LinkList等价于node*
A B C D
A
其实题中的定义相当于下述两个定义:
typedef struct node{
int data;
struct node*link;
}NODE;
typedef struct node{
int data;
struct node*link;
)*LinkList;
前者给struct node取了个新名字NODE,即struct node和NODE是等价的;后者把struct node*命名为LinkList。
某C语言程序中,x是一个浮点型变量,m是一个值为正整数的整型常量,表达式x%m(x被m除取余数)在 2 时会报错,这是一种 3 错误。 函数f()、g()的定义如下所示,调用函数f时传递给形参x的值为5,若采用传值(call by value)方式调用g(a),则函数f的返回值为 4 ;若采用传引用(call by reference)方式调用g(a),则函数f的返回值为 5 。
根据乔姆斯基于20世纪50年代建立的形式语言的理论体系,文法被分为4种类型,即0型(短语文法)、1型(上下文有关文法)、2型(上下文无关文法)和3型(正规文法)。其中,2型文法与 11 等价,所以有足够的能力描述多数现今程序设计的语言的语法结构。一个非确定的有穷自动机必存在一个与之等价的 12 。从文法描述语言的能力来说, 13 最强, 14 最弱,由4类文法的定义可知 15 必是2型文法。一种最早用于科学计算的程序设计语言是 17 ;一种提供指针和指针操作且不存在布尔类型的、应用广泛的系统程序设计语言是 18 ;一种适合在互联网上编写程序可在不同平台上运行的面向对象程序设计语言是 19 ;一种在解决人工智能问题上使用最多、有较强表处理功能的函数程序设计语言是 20 ;一种以谓词逻辑为基础的,核心是事实、规则和推理机制的实用逻辑程序设计语言是 21 。 图7-17是一有穷自动机的状态转换图,该自动机所识别语言的特点是 23 ,等价的正规式为 24 。
在高级程序设计语言中, 26 可以出现在赋值符号的左边。结构化程序的基本控制结构有 27 。 考查下列文法:
G(VT,VN,E,P)
其中:VT={+,*,(,),i);VN={E,T,F};E是开始符号;P为:
E→E+T|T
T→T*F|F
F→(E)|i
F*F+T是该文法的一个句型,其中 28 是句柄, 29 是素短语, 30 是该句型的直接推导, 31 是该句型的最左推导, 32 是该文法的一个句子。32.
- A.T+(i+i)
- B.i+(i+F)
- C.i
- D.(E)
A B C D
C
句型F*F+T的推导过程如下:
E

E+T

T+T

T*F+T

F*F+T,因为E

T*F+T,E

F*F+T,T→F,所以F是句型F*F+T相对于产生式T→F的直接短语,又因为它是该句型的最左直接短语,所以F是该句型的句柄。
同理,可分析出句型F*F+T的短语有F、F*F、F*F+T。由于素短语中至少应含有一个终结符,因此F不是素短语;由于F*F+T中包含了短语F*F,因此它也不是素短语。所以该句型的素短语是F*F。
因为句型F*F+T

F*F+T*F,所以F*F+T*F是该句型的直接推导。而F*F+I、F*F+F*F和i*i+T都不能由句型F*F+T直接推导出来。
由于最左推导是对句型右部的最左非终结符进行推导,因此在第(4)空的选择答案中只有(E)*F+T满足此条件。
因为句子是仅含终结符的句型,所以第(5)空的选择答案中只有i有可能是句子,而E

T

F

i,所以i是该文法的一个句子。