[计算机类试卷]程序语言基础知识练习试卷1及答案与解析.doc

上传人:eventdump275 文档编号:504744 上传时间:2018-11-29 格式:DOC 页数:17 大小:78KB
下载 相关 举报
[计算机类试卷]程序语言基础知识练习试卷1及答案与解析.doc_第1页
第1页 / 共17页
[计算机类试卷]程序语言基础知识练习试卷1及答案与解析.doc_第2页
第2页 / 共17页
[计算机类试卷]程序语言基础知识练习试卷1及答案与解析.doc_第3页
第3页 / 共17页
[计算机类试卷]程序语言基础知识练习试卷1及答案与解析.doc_第4页
第4页 / 共17页
[计算机类试卷]程序语言基础知识练习试卷1及答案与解析.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、程序语言基础知识练习试卷 1及答案与解析 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* 2 C+语言兼容 C语言,因此, _。 ( A) C+的关

2、键字与 C语言的关键字完全相同 ( B) C+的数据类型与 C语言的数据类型完全相同 ( C) CA+编译器能编译 c语言程序 ( D) C+编译器能把 C语言程序翻译成 C+程序 3 关于编译程序进行词法分析的说法中,不正确的是 _。 ( A)词法分析主要是扫描源程序并识别记号,指出出错行号 ( B)词法分析阶段过滤掉了源程序中的注 释 ( C)词法分析阶段单词间的空白被过滤掉了 ( D)词法分析阶段对制表或回车换行字符不作处理 4 下面的 C程序代码段在运行中会出现 _错误。 int i=0; while(i 10); i=i+1; ( A)语法 ( B)类型不匹配 ( C)变量定义 (

3、D)动态语义 5 在 C语言中, main()函数可以带两个形参 argc和 argv,其中 argv可以定义为_。 ( A) int argv; ( B) char*argy; ( C) char argv; ( D) char*argv; 6 C程序代码 “while(c=getchar()!=a)putchar(c); ”中存在 _错误。 ( A)调用 ( B)语法 ( C)逻辑 ( D)运行 7 根据乔姆斯基于 20世纪 50年代建立的形式语言的理论体系,文法被分为 4种类型,即 0型 (短语文法 )、 1型 (上下文有关文法 )、 2型 (上下文无关文法 )和 3型 (正规文法 )。

4、其中, 2型文法与 (1)等价,所以有足够的能力描述多数现今程序设计的语言的语法结构。一个非确定的有穷自动机必存在一个与之等价的 (2)。从文法描述语言的能力来说, (3)最强, (4)最弱,由 4类文法的定义可知 (5)必是 2型文法。 ( A)确定的有穷自动机 ( B)图灵机 ( C)非确定的下推自动机 ( D)非确定的有穷自动机 ( E)有穷自动机 ( A)确定的有穷自动机 ( B)图灵机 ( C)非确定的下推自动机 ( D)非确定的有穷自动机 ( E)有穷自动机 ( A) 0型文法 ( B) 1型文法 ( C) 2型文法 ( D) 3型文法 ( A) 0型文法 ( B) 1型文法 (

5、C) 2型文法 ( D) 3型文法 ( A) 0型文法 ( B) 1型文 法 ( C) 2型文法 ( D) 3型文法 12 与正规式 (a|b)*等价的正规式是 _。 ( A) a*b* ( B) b*a* ( C) (a*)|(b*) ( D) (a*b*)* 13 一种最早用于科学计算的程序设计语言是 (1);一种提供指针和指针操作且不存在布尔类型的、应用广泛的系统程序设计语言是 (2);一种适合在互联网上编写程序可在不同平台上运行的面向对象程序设计语言是 (3);一种在解决人工智能问题上使用最多、有较强表处理功能的函数程序设计语言是 (4);一种以谓词逻辑为基础的,核心是事实、规 则和推

6、理机制的实用逻辑程序设计语言是 (5)。 ( A) Alogo 68 ( B) Java ( C) Lisp ( D) Prolog ( E) Fortran ( A) C ( B) Alogo 68 ( C) Java ( D) Lisp ( E) Prolog ( A) Alogo 68 ( B) Java ( C) Lisp ( D) Prolog ( E) Fortran ( A) Alogo 68 ( B) Java ( C) Lisp ( D) Prolog ( E) Fortran ( A) Alogo 68 ( B) Java ( C) Lisp ( D) Prolog ( E

7、) Fortran 18 高级程序设计语言中用于描述程序中的运算步骤、控制结构及数据传输的是_。 ( A)语句 ( B)语义 ( C)语用 ( D)语法 19 若有 C语言语句 “char r1=“abcd“, r2=a,b,c,d”,则下列说法正确的是_。 ( A)数组 r1和数组 r2存放相同的字符串 ( B)数组 r1和数组 r2的长度相同 ( C)数组 r1的长度小于数组 r2的长度 ( D)数组 r1的长度大于数组 r2的 长度 20 考查下列文法: G(VT, VN, E, P) 其中: VsubT=+,*,(,),i); VN=E, T, F;E是开始符号; P为: EE+T|T

8、 TT*F|F F(E)|i F*F+T 是该文法的一个句型,其中 (1)是句柄, (2)是素短语, (3)是该句型的直接推导, (4)是该句型的最左推导,(5)是该文法的一个句子。 ( A) F ( B) F*F ( C) F+T ( D) F*F+T ( A) F ( B) F*F ( C) F+T ( D) F*F+T ( A) F*F+i ( B) F*F+T*F ( C) F*F+F*F ( D) i*i+T ( A) F*F+T*F ( B) F*F+T ( C) F*(E)+T ( D) (E)*F+T ( A) T+(i+i) ( B) i+(i+F) ( C) i ( D)

9、(E) 25 某 C语言程序中, x是一个浮点型变量, m是一个值为正整数的整型常量,表达式 x%m(x被 m除取余数 )在 (1)时会报错,这是一种 (2)错误。 ( A)编译 ( B)预处理 ( C)编辑 ( D)运行 ( A)词法 ( B)语法 ( C)语义 ( D)运行 27 函数 f()、 g()的定义如下所示,调 用函数 f时传递给形参 x的值为 5,若采用传值 (call by value)方式调用 g(a),则函数 f的返回值为 (1);若采用传引用 (call by reference)方式调用 g(a),则函数 f的返回值为 (2)。( A) 14 ( B) 16 ( C)

10、 17 ( D) 22 ( A) 15 ( B) 18 ( C) 22 ( D) 24 29 图 7-17是一有穷自动机的状态转换图,该自动机所识别语言的特点是 (1),等价的正规式为 (2)。 ( A)由符号 a、 b构成且包含偶数个 a的串 ( B)由符号 a、 b构成且开头和结尾 符号都为 a的串 ( C)由符号 a、 b构成的任意串 ( D)由符号 a、 b构成且 b的前后必须为 a的串 ( A) (a|b)*(aa)* ( B) a(a|b)*a ( C) (a|b)* ( D) a(ba)*a 31 在高级程序设计语言中, (1)可以出现在赋值符号的左边。结构化程序的基本控制结构有

11、 (2)。 ( A)变量 ( B)常量 ( C)函数名 ( D)过程名 ( A)赋值、子程序调用、输入输出 ( B)条件语句、循环语句、过程语句 ( C)顺序语句、选择语句、循环语句 ( D)复合、分支、重复、递归 程 序语言基础知识练习试卷 1答案与解析 1 【正确答案】 A 【试题解析】 其实题中的定义相当于下述两个定义: typedef struct node int data; struct node*link; NODE; typedef struct node int data; struct node*link; )*LinkList; 前者给 struct node取了个新名字

12、 NODE,即 struct node和 NODE是等价的;后者把 struct node*命名为 LinkList。 2 【正确答案】 C 【试题解析】 C+由 C语言发展而来, C+在 C语言的基础上扩展了面向对象部分。 C+的关键字与 C语言的关键字不完全相同, C+扩展了新的关键字,如关键字 new、 const, C语言中就没有 new、 const; C+的数据类型与 C语言的数据类型也不完全相同,如 C+中有逻辑布尔型 bool、类类型 class,而 C中没有。显然, C+编译器能编译 C语言程序,但反之则不一定行。 3 【正确答案】 D 【试题解析】 在词法分析阶段,其任务是

13、从左到右逐个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个单词 (也称单词符号或符号 )。这里所谓的单词,是指逻辑上紧密相连的一组字符,这些字符组合在一起才表示某一含义。比如标识符是由字母开头,后跟字母或数字组成的一种单词。保留字 (关键字或基 本字 )也是一种单词,此外还有算符等。在词法分析阶段,空白(由单词间的空格、制表或回车换行字符引起的空白 )和注释都被滤掉了。在识别保留字时,词法分析程序将每个标识符对照一张保留字表进行查询,若查着则为保留字,反之则认为是用户定义的标识符。可见,词法分析阶段是查不出拼错的保留字的。在词法分析阶段,如果不符合词法规则,比如标识符不

14、是以字母开头,就会进行错误处理,指出出错行号。从上述分析可知, D错误。 4 【正确答案】 D 【试题解析】 这道题实际上是考 while的循环体和空语句。若 while的循环体只有 一条语句,则可以不用花括号括起来,如果有多条就要用花括号括起来,表示这几条语句合起来是 while的循环体。空语句指的是只有一个分号的语句 “; ”,该语句什么事都不做。程序语言中的错误一般分为语法错误、逻辑错误。语法错误指的是语句违反了形式规定而造成的错误,在这种情况下,不能通过编译而运行,编译器一般会给出错误信息并指出错误所在的行;逻辑错误指的是程序含义上的错误,出现了逻辑混乱。逻辑错误经常在运行中才体现出来

15、,称为动态语义错误。从题中 “while(i 10); ”可看出, while用一条空语句做循环体,没有循环 终止条件,因此进入死循环,这是一种运行中出现的逻辑错误,为动态语义错误。题中将赋值语句 “i=i+1; ”用花括号括起来,引诱考生误将 “i=i+1; )”看成 while的循环体,这其实是 “烟幕弹 ”。 5 【正确答案】 B 【试题解析】 在 C语言中, main()函数可以带两个形参 argc和 argv,其中 argc存储参数个数, argv存储参数表。它们的定义格式是: main(int argc,char*argv)。 6 【正确答案】 B 【试题解析】 getchar()

16、用于接收键盘输入的字符, 其值为键入的字符, putchar(c)用于在屏幕显示字符, c可以是字符类型也可以是整型变量。 C语言中,不等号“!=”的优先级高于赋值符号 “=”,因此 c=getchar()!=a相当于 c=(getchar()!=a),而 “getchar()!=a”是个逻辑表达式,如果键入的是 a,则该表达式的值为 0,否则为 1。程序代码中的错误可分为语法错误和语义错误。程序语言的语法表述的是语言的形式,或者说是语言的样子和结构。程序语言还有更重要的一个方面,就是附着于语言结构上的语义。语义揭示了程序本身的含义、施加于语言结构上的限制或者要执行的动作。 程序语言的语义分为

17、静态语义和动态语义。编译时进行的是静态语义的分析,主要包括:检查语言结构的语义是否正确,即是否结构正确的句子所表示的意思也合法;执行规定的语义动作,如表达式的求值、符号表的填写、中间代码的生成等。题目中 while后面的括号显然没有匹配,少了一个右括号,这属于一种语法错误。运行错误是指程序能运行,在运行中出现错误。该代码不能通过编译,无法运行。 7 【正确答案】 C 8 【正确答案】 A 9 【正确答案】 A 10 【正确答案】 D 11 【正确答案】 D 【试题解 析】 乔姆斯基把文法分成四种类型,即 0型、 1型、 2型和 3型。 0型文法也称短语文法,其能力相当于图灵 (Turing)机

18、,或者说任何 0型语法都是递归可枚举的。 1型文法也称上下文有关方法,其能力相当于线性有界自动机。 2型文法也称上下文无关文法,其能力相当于非确定的下推自动机。 3型文法也称为线性文法,由于这种文法等价于正规式,因此也称为正规文法。 3型文法的能力相当于有穷自动机。自动机分为确定的自动机和非确定的自动机,一个非确定的自动机一定可以转化为一个与之等价的确定的自动机。 0、 1、 2、 3型文法是逐渐增加限制的,因 此, 0、 1、 2、 3型文法描述语言的能力依次递减。也正因为此,每一种 3型文法也一定是 2、 1、 0型文法,每一种 2型文法也一定是 1、 0型文法,每一种1型文法也一定是 0

19、型文法。 12 【正确答案】 D 【试题解析】 如果两个正规式对应的正规集相同,那么它们是等价的。正规式(a|b)*对应的正规集为 , a, b, aa, ab, ,所有由 a和 b组成的字符串 ,a*b*、 b*a*、 (a*)|(b*)对应的正规集都是其真子集,因此不可能等价。根据正规式代数运算法则, (a|b)*=(a*b*)*,注意,括号外的 “*”是必需的 ! 13 【正确答案】 E 14 【正确答案】 A 15 【正确答案】 B 16 【正确答案】 C 17 【正确答案】 D 【试题解析】 Fortran是第一种被用于科学计算的高级语言,它出现于 20世纪50年代中期,主要用于科学

20、计算。 Alogo 68是另一种早期研制出来的高级语言,虽然没有被广泛使用,但其对后来的程序设计语言的发展有着重大影响。 C语言是目前应用最广泛的系统程序设计语言,它提供了指针与指针操作,且不存在布尔类型。 C语言还可提供很多底层系统调用,与硬件结合紧密, 适用于编写系统软件。 Java语言是适应 Internet发展的需要而产生的通用网络程序设计语言,它提供了更好的网络安全性和平台无关性,并且采用了面向对象的原理,便于扩展,适合在互联网上编写可在不同平台上运行的面向对象程序设计语言。 Prolog语言在人工智能领域应用较广泛,是一种以谓词逻辑为基础,借助于推理规则,从已有事实推出新的事实的实

21、用的逻辑程序设计语言。 Ada和 Smalltalk两种语言引入了一定的封装机制,实现了信息隐藏。 Ada的主要封装机制为程序包;Smalltalk是一种纯面向对象的程序设计语言,它 侧重于动态链接,不进行任何的类型检查,并且类和对象之间没有明显区别。 Snobol于 1962年由贝尔实验室开发,它主要的操作为字符串操作。该语言一般不作为通用语言使用,而是作为一种研究工具,用于对文艺作品、音乐等进行分析。 Lisp是一种在解决人工智能问题上使用最多、有较强表处理功能的函数程序设计语言。 18 【正确答案】 A 【试题解析】 高级程序设计语言中用于描述程序中的运算步骤、控制结构及数据传输的是语句

22、,例如 for语句、 switch语句。程序设计语言的语法指的是该语言中的语句、声明及其他语言结 构的书写规范或规则,例如 C语言中一个完整的语句后面不得遗漏分号。语义指的是语法结构的含义。一般地,在程序语言手册中,先给出各种语句结构的语法,然后给出该结构的语义以描述其内在含义。语用是程序语言与其使用之间的关系,通俗地说就是如何使用程序语言。 19 【正确答案】 D 【试题解析】 其实这道题所考查的知识点是大多数人在编写程序时常犯的一个错误。很多人觉得 r1和 r2只是赋值形式不同,其结果一致。这种想法是错误的, r1的初值是一个字符串,所以系统会自动为其加上一个字符串结束符 0,因此 r1的

23、长度为 5,而 r2的长度为 4。注意,这里比较的是数组 r1和 r2的大小 (长度 ),而不是存储在其中的字符串的有效长度。由于 r2没有结束字符 0,因此 strlen(r2)输出不定,不是预期的 4,一般输出的是 8,依具体机器而定。利用 sizeof运算符可以计算出 r1、 r2的长度, sizeof(r1)输出的是 5, sizeof(r2)则输出 4,表示 r1、r2分别占 5、 4个字节的内存空间。 20 【正确答案】 A 21 【正确答案】 B 22 【正确答案】 B 23 【正确答案】 D 24 【正确答案】 C 【试题解析】 句型 F*F+T的推导过程如下: E E+T T

24、+T T*F+T F*F+T,因为 E T*F+T, E F*F+T, TF ,所以 F是句型 F*F+T相对于产生式 TF的直接短语,又因为它是该句型的最左直接短语,所以 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直接推导出来。 由于最左推导是对句型右部的最左非

25、终结符进行推导,因此在第 (4)空的选择答案中只有 (E)*F+T满足此条件。 因为句子是仅含终结符的句型,所以第 (5)空的选择答案中只有 i有可能是句子,而 E T F i,所以 i是该文法的一个句子。 25 【正确答案】 A 26 【正确答案】 C 【试题解析】 动手编过 C语言程序的人都知道在 x%m中,要求 x、 m都为整数,若 x为浮点型,在 TC中编译时会报错 “Illegal use of floating point” ,所以根本不能运行。 ANSI C标准规定可以在 C语言源程序中加入一些 “预处理命令 ”,以改进程序设计环境,提高编程效率。这些预处理命令是由 ANSI C

26、统一规定的,但是它并非 C语言本身的组成部分,不能直接对它们进行编译 (因为编译程序不能识别它们 )。必须在对程序进行通常所说的编译 (包括词法语法分析、代码生成及优化等 )之前,先对程序中这些特殊的命令进行 “预处理 ”,即根据预处理命令对程序作相应的处理。 C语言提供的预处理功能主要有三种:宏定义 (# define) 、文件包含 (# include) 和条件编译 (# ifdef# else# endif) 。 在编译过程的词法分析阶段,编译程序从左到右一个字符一个字符地读入源文件,对构成源文件的字符流进行扫描和分解,识别出一个个具有具体含义的单词,即逻辑上紧密相连的字符串。在此阶段查

27、出的错误称为词法错误,比如,当读入 while保留字时,源文件中写成了 while,错把 i写成了 1。接下来是语法分析阶段,它是在词法分析的基础上将单词序列分解成各类语法短语,如分解出ifelse 语句、赋值语句等。在此阶段查出的错误属于语法错误。 程序代码中的错误可分为语法错误和语义错误。程序语言的语法表述的是语言的形式,或者说是语言的样子和结构。程序语言还有更重要的一个方面,就是附着于语言结构上的语义。语义揭示了程序本身的含义、施加于语言结构上的限制或者要执行的动作。程序语言的语义分为静态语义和动态语义。编译时进行的是静态语义的分析,主要包括:检查语言结构的语义是否正确,即是否结构正确的

28、句子所表示的意思也合法;执行规定的语义动作,如表达式的求值、符号表的填写、中间代码的生成等。 整除取余运算符 “%”的有效运算对象是两个整数。在形式上,只要 “%”的两个运算对象存在,其语法就是正确的;在语义上, “%”的运算对象中有浮点数则不符合整除取余运算的含义。因此,这是运算对象与运算符的类型不匹配错误,属于静态语义错误,在编译阶段可以发现该错误。 运行错误指程序在运行过程中出现的错误。例如: int a,b,c; scanf(“%d%d“, c=b/a; printf(“c=%dn“,c); 程序没有错,能运行,但是如果输入 a的值为 0,就会出现错误,在 TC中会在屏幕上报错: Di

29、vide error。 通过上面详细的分析,答案一目了然,分别选 A、 C。 27 【正确答案】 A 28 【正确答案】 C 【试题解析】 在传值调用方式中,被调用函数的形参得到实参值的一份拷贝,在被调用函数内修改形参不影响实参。而在传引用调用方式中,被调用函数得到的是实参本身 (地址和值 ),在被调用函数中修改其形参其实就是修改实参本身,因此会影响实参的值。调用函数 f时传递给形参 x的值为 5,若采用传值方式调用g(a),对实参 a不产生任何影响,在执行完 “int a=2*x-1”之后, a的值为 9,执行 “g(a); ”之后, a的值仍为 9,所以函数 f的返回值为 9+5=14。若

30、采用传引用方式调用 g(a),则 “int a=2*x-1”执行完之后, a的值为 9,然后控制转入到 g(int y)中,在 g(int y)中对 y的修改其实就是修改 a。在 g(int y)中传递过来的形参值为 9,执行 “x=y-1”之后, x的值为 8,接着执行 “y=x+y”之后, y的值就变为 17,反映到实参 a中就使得 f(int x)中的 a也为 17,因此,这种情况下,函数 f的返回值为17+5=22。 29 【正确答案】 B 30 【正确答 案】 B 【试题解析】 从图中可明显看出:从 0状态输入 a可以到达 1状态,从 1状态输入 a或 b,可以回到 1状态,同时输入 a也可以到 2状态。这样的过程可以用正规式 a (a|b)*a来表达。这样的正规式的含义为:以 a开头和结尾,中间部分由 a、 b组成的串。所以此题的答案为: B, B。 31 【正确答案】 A 32 【正确答案】 C 【试题解析】 在高级程序设计语言中,变量可以出现在赋值符号的左边,称为左值。结构化程序有三种基本控制结构:顺序结构、选择 (分支 )结构和循环结构。任何结构化程序都可由这三者 组成。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1