1、二级 C 语言笔试-465 及答案解析(总分:91.00,做题时间:90 分钟)一、选择题(总题数:40,分数:61.00)1.与十进制数 200 等值的十六进制数为_。A) A8 B) A4 C) C8 D) C4(分数:1.00)A.B.C.D.2.下列叙述中正确的是_。A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理效率(分数:2.00)A.B.C.D.3.对于长度为 n 的线性表,在最坏的情况下,下
2、列各排序法所对应的比较次数中正确的是_。A) 冒泡排序为 n/2 B) 冒泡排序为 nC) 快速排序为 n D) 快速排序为 n(n-1)/2(分数:2.00)A.B.C.D.4.冒泡排序在最坏情况下的比较次数是_。A) n(n+1)/2 B) nlog2n C) n(n-1)/2 D) n/2(分数:2.00)A.B.C.D.5.关于结构化程序设计原则和方法描述错误的是( )。A) 选用的结构只准许有一个入口和一个出口B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C) 不允许使用 GOTO 语句D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:2.00)A.B.C.
3、D.6.下列描述中正确的是_。A) 程序就是软件B) 软件开发不受计算机系统的限制C) 软件既是逻辑实体,又是物理实体D) 软件是程序、数据与相关文档的集合(分数:2.00)A.B.C.D.7.简单的交换排序方法是( )。A) 快速排序 B) 选择排序 C) 堆排序 D) 冒泡排序(分数:2.00)A.B.C.D.8.SQL 语言又称为( )。A) 结构化定义语言 B) 结构化控制语言 C) 结构化查询语言 D) 结构化操纵语言(分数:1.00)A.B.C.D.9.下列说法正确的是( )。A) 一个 C 程序可以有多个主函数B) 一个 C 语言的函数中只允许有一对花括号C) C 程序的书写格式
4、是自由的,一个语句可以写在一行上,也可以写在多行内D) 在对 C 程序进行编译时,可以发现注释行中的拼写错误(分数:2.00)A.B.C.D.10.设变量已正确定义并赋值,以下正确的表达式是_。(A) x=y*5=x+z(B) int(15.8%5)(C) x=y+z+5,+y(D) x=25%5.0(分数:1.00)A.B.C.D.11.以下选项中不属于字符常量的是_。(A) C(B) “C“(C) /xCC(D) /072(分数:1.00)A.B.C.D.12.阅读以下程序#include stdio.hmain()int case;float printF;printf(“请输入 2 个
5、数:“);scanf(“%d %f“, B) +b; C) a=a+=5; D) a=double(B);(分数:2.00)A.B.C.D.15.若有定义 int x, y;,并已正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。A) (x-y0)B) (x-y0)C) (x-y0|x-y0)D) (x-y=0)(分数:1.00)A.B.C.D.16.设有定义:float a=2,B=4,h=3;,以下 C 语言表达式中与代数式 (分数:1.00)A.B.C.D.17.两次运行下列的程序,如果从键盘上分别输入 3 和 1,则输出结果是( )。
6、main()int x;scanf(“%d“,printf (“ %d/n“,x);执行后的输出结果是 _。 A) 2 B) 1 C) 3 D) 6(分数:2.00)A.B.C.D.19.有下列程序:main()int t,a=1,b=5,c=-2;while(abc)t=a;a=b;b=t;c+;printf(“%d,%d,%d“,a,b,c);程序的输出结果是( )。A) 1,5,0 B) 1,5,-2C) 5,1,-1 D) 5,1,-2(分数:2.00)A.B.C.D.20.有以下程序#includestdiohmain()int a=1,b=2;for( ;a8;a+) b+=a;
7、a+=2;printf(“%d,%d/n“,a,b);程序运行后的输出结果是A) 9,18 B) 8,11 C) 7,11 D) 10,14A.B.C.D.21.已定义下列函数:int fun(int *p)return *p;)fun 函数返回值是( )。A) 不确定的值 B) 一个整数C) 形参 p 中存放的值 D) 形参 p 的地址值(分数:2.00)A.B.C.D.22.有如下程序:#include stdiohmain()int x=23;doPrintf(“%d“,x-);while(! x);该程序的执行结果是( )。A) 321 B) 23 C) 不输出任何内容 D) 陷入死循
8、环(分数:1.00)A.B.C.D.23.下列程序的输出结果是( )。int f1(int x,int y)return xy?x:y;int f2(int x,int y)return xy?y:x;main()int a=4,b=3,e=5,d=2,e,f,g;e=f2(f1(a,b),f1(e,d);f=f1(f2(a,b),f2(e,d);g=a+b+c+d-e-f;printf(“%d,%d,%d/n“,e,f,g);A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7(分数:2.00)A.B.C.D.24.下列语句组中,正确的是A) char*s;s=”Olymp
9、ic“; B) chars7;s=“Olympic“;C) char*s;s=“Olympic“; D) chars7;s=“Olympic“;A.B.C.D.25.下列程序的输出结果是( )。#includestdio.hint fun(int x)int a;if(x=0x=1)return 3;elsea=x-fun(x-2);return a;void main()printf(“%d“,fun(7);A) 2 B) 8 C) 9 D) 5(分数:2.00)A.B.C.D.26.下列循环体的执行次数是( )。#includestdiohmain()int i,j;for(i=0,j=1
10、;ij+1;i+=1,j-)printf(“%d/n“,j);A) 3 B) 2 C) 1 D) 0(分数:1.00)A.B.C.D.27.有下列程序:main()int k=5;while(-k) printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是( )。A) 1 B) 2C) 4 D) 死循环(分数:2.00)A.B.C.D.28.为了避免在嵌套的条件语句 if else 中产生二义性,C 语言规定,else 子句总是与( )配对。A缩排位置相同 if B其前面最近的 ifC其后面最近的 if D同一行上的 if(分数:1.00)A.B.C.D.29.若要求从
11、键盘读入含有空格字符的字符串,应使用函数A) getc() B) gets() C) getchar() D) scanf()(分数:2.00)A.B.C.D.30.有以下程序:void f(int*q)int i=0;for(; i5;i+)(*q)+;main()(int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“%d“,ai);程序运行后的输出结果是_。A) 2,2,3,4,5, B) 6,2,3,4,5,C) 1,2,3,4,5, D) 2,3,4,5,6,(分数:2.00)A.B.C.D.31.有以下程序:main()char *p=“369
12、7“,“2584“;int i,j;long num=0;for(i=0;i2;i+)j=0;while(pij!=/0)if(pij-0)%2)num=10*/num+pij-0;j+=2;printf(“%d/n“,hum);程序执行后的输出结果是_。A) 35 B) 37C) 39 D) 3975(分数:2.00)A.B.C.D.32.分析下列程序:#includestdiohmain()int *p1,*p2,*p;int a=6,b=9;p1=main()int a10=(1,2,3,4,5,6,7,8,9,10;sum(int y;int z;struct ord a;B) str
13、uct ordint x;int y;int z;ord a;C) struct ordint x;int y;int z;a;D) structint x;int y;int z;a;(分数:2.00)A.B.C.D.38.若 x=2,y=3,则 x main()char b4=a,b,c,d,*p=b;point(p); printf(“%c/n“,*p);程序运行后的输出结果是_。A) a B) b C) c D) d(分数:1.00)A.B.C.D.40.以下语句或语句组中能正确进行字符串赋值的是( )。 A) ehar 以*sp; * sp = “right!“; B) char s
14、10 ;s = “right!“;C) char s 10; * s = “right !“; D) char * sp = “right !“;(分数:1.00)A.B.C.D.二、填空题(总题数:15,分数:30.00)41.某二叉树中度为 2 的节点有 18 个,则该二叉树中有 1 个叶子节点。(分数:2.00)填空项 1:_42.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于 1。(分数:2.00)填空项 1:_43.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_44.在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,
15、那么“学生”和“可选课程”的联系为 1。(分数:2.00)填空项 1:_45.诊断和改正程序中错误的工作通常称为 1。(分数:2.00)填空项 1:_46.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。U /U(double, double);main()double x, y;scanf(“% lf % lf“, printf(“% 1f/n“, max(x, y);double max(double a, double b)return(ab? a:b); (分数:2.00)填空项 1:_47.设 int a=5,b=6,表达式(+a= =b-)? +a:-b 的值是U /U
16、。(分数:2.00)填空项 1:_48.以下程序在运行时若输入:1234567,则程序的运行结果是_。 #includestdio.h main() int x, y; scanf(“%2d%1d“, printf(“%d/n“, x+y); (分数:2.00)填空项 1:_49.下列表达式用于判断 y 是否为闰年。闰年的判断条件是:年号能被 4 整除但不能被 100 整除或年号能被 400 整除,请填空 1。(分数:2.00)填空项 1:_50.下列程序的运行结果是_。#includestdio.hmain()int a=10,b=3;printf(“%d,“,a%b);printf(“%d
17、,“,(a-b,a+b);printf(“%d/n“,a-b?a-b:a+b);(分数:2.00)填空项 1:_51.有以下程序,若运行时从键盘输入:18,11回车,则程序的输出结果是_。main()int a,b;printf(“Enter a,b:“);scanf(“%d,%d“,a,b);while(a!=b)while(ab)a-=b;while(ba)b-=a;printf(“%3d%3d“,a,b);(分数:2.00)填空项 1:_52.当执行以下程序时,输入 1234567890回车,则其中 while 循环体将执行_次。#includestdiohmain()char ch;w
18、hile(ch=getchar()=0)printf(“#“);(分数:2.00)填空项 1:_53.函数调用语句:“fgets(buf,n,fp);”从中指向的文件中读入 n 个字符放到 buf 字符数组中,函数返回值为 1。(分数:2.00)填空项 1:_54.以下程序运行后的输出结果是U /U。#include stdio.hint f( iht a ,int n)if(n=1) returnf(a,n-1) +an-1;else return 0;main( )int aa5 = 1,2,3,4,5 ,s;s = f(aa,5); prinff(“ % d /n“ ,s);(分数:2.
19、00)填空项 1:_55.下面程序的运行结果是_。#includestdio.hmain()int a=25;fun(fun(int *x)printf(“%d/n“,+*x);(分数:2.00)填空项 1:_二级 C 语言笔试-465 答案解析(总分:91.00,做题时间:90 分钟)一、选择题(总题数:40,分数:61.00)1.与十进制数 200 等值的十六进制数为_。A) A8 B) A4 C) C8 D) C4(分数:1.00)A.B.C. D.解析:解析 十进制数 200 转换成二进制数,其结果为 1100 1000,1100 1000 对应了十六进制数 C8。因此答案选 C。2.
20、下列叙述中正确的是_。A) 一个逻辑数据结构只能有一种存储结构B) 数据的逻辑结构属于线性结构,存储结构属于非线性结构C) 一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理效率D) 一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理效率(分数:2.00)A.B.C.D. 解析:解析 逻辑结构是反映了元素之间的逻辑关系的数据结构,存储结构是逻辑结构在计算机中的存放形式,它们都具有线性结构和非线性结构。逻辑结构有顺序、链接、索引等存储结构,采用不同的存储结构,数据处理的效率不同。3.对于长度为 n 的线性表,在最坏的情况下,下列各排序法所对应的比较次数中正确的是_。A)
21、 冒泡排序为 n/2 B) 冒泡排序为 nC) 快速排序为 n D) 快速排序为 n(n-1)/2(分数:2.00)A.B.C.D. 解析:解析 存最坏情况下,快速排序退化为冒泡排序,冒泡排序法的基本过程参见本题的理论链接。冒泡排序的每个元素都要与它前面的元素相比较,因此比较次数为(n-1)+(n-2)+1=n(n-1)/2。4.冒泡排序在最坏情况下的比较次数是_。A) n(n+1)/2 B) nlog2n C) n(n-1)/2 D) n/2(分数:2.00)A.B.C. D.解析:解析 在最坏情况下冒泡排序法需要比较的次数为 n(n-1)/2。5.关于结构化程序设计原则和方法描述错误的是(
22、 )。A) 选用的结构只准许有一个入口和一个出口B) 复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现C) 不允许使用 GOTO 语句D) 语言中所没有的控制结构,应该采用前后一致的方法来模拟(分数:2.00)A.B.C. D.解析:解析 限制使用 GOTO 语句是结构化程序设计的原则和方法之一,但不是绝对不允许使用 GOTO 语句。其他 3 项为结构化程序设计的原则。6.下列描述中正确的是_。A) 程序就是软件B) 软件开发不受计算机系统的限制C) 软件既是逻辑实体,又是物理实体D) 软件是程序、数据与相关文档的集合(分数:2.00)A.B.C.D. 解析:解析 计算机软件是包括程序、数据
23、及相关文档的完整集合,软件是一种逻辑实体,软件的开发、运行对计算机系统具有依赖性受计算机系统的限制。7.简单的交换排序方法是( )。A) 快速排序 B) 选择排序 C) 堆排序 D) 冒泡排序(分数:2.00)A.B.C.D. 解析:解析 所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。8.SQL 语言又称为( )。A) 结构化定义语言 B) 结构化控制语言 C) 结构化查询语言 D) 结构化操纵语言(分数:1.00)A.B.C. D.解析:解析 结构化查询语言(Str
24、uctured Query Language,简称 SQL)是集数据定义、数据操作和数据控制功能于一体的数据库语言。9.下列说法正确的是( )。A) 一个 C 程序可以有多个主函数B) 一个 C 语言的函数中只允许有一对花括号C) C 程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内D) 在对 C 程序进行编译时,可以发现注释行中的拼写错误(分数:2.00)A.B.C. D.解析:解析 本题涉及 C 语言基本的 3 个知识点:C 语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;C 语言的标识符是由字母、数字、下划线组成的,可以是大写字母,而且标识符区分字母的
25、大小写;C 程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释行中的错误。10.设变量已正确定义并赋值,以下正确的表达式是_。(A) x=y*5=x+z(B) int(15.8%5)(C) x=y+z+5,+y(D) x=25%5.0(分数:1.00)A.B.C. D.解析:11.以下选项中不属于字符常量的是_。(A) C(B) “C“(C) /xCC(D) /072(分数:1.00)A.B. C.D.解析:12.阅读以下程序#include stdio.hmain()int case;float printF;printf(“请输
26、入 2 个数:“);scanf(“%d %f“, B) +b; C) a=a+=5; D) a=double(B);(分数:2.00)A.B. C.D.解析:解析 要解答此题只要知道两个知识点:在 C 语言中规定进行强制类型转换的格式是:(double)变量名;在 C 语言中不允许给表达式赋值。15.若有定义 int x, y;,并已正确给变量赋值,则以下选项中与表达式(x-y)?(x+):(y+)中的条件表达式(x-y)等价的是_。A) (x-y0)B) (x-y0)C) (x-y0|x-y0)D) (x-y=0)(分数:1.00)A.B.C. D.解析:解析 条件运算表达式:“表达式 1?
27、表达式 2:表达式 3”,但表达式 1 的值为非 0 时,此时表达式 2 的值就是整个条件表达式的值,反之为表达式 3 的值。故其等价于选项 C 中的逻辑或表达式。16.设有定义:float a=2,B=4,h=3;,以下 C 语言表达式中与代数式 (分数:1.00)A.B. C.D.解析:解析 选项 B 错误,不符合题意。17.两次运行下列的程序,如果从键盘上分别输入 3 和 1,则输出结果是( )。main()int x;scanf(“%d“,printf (“ %d/n“,x);执行后的输出结果是 _。 A) 2 B) 1 C) 3 D) 6(分数:2.00)A.B. C.D.解析:解析
28、 因 n=0,故!n 为真,执行语句 x-=1 得 x=x-1=2-1=1;条件!m 和!x 不成立,所以 x1,正确答案为 1。19.有下列程序:main()int t,a=1,b=5,c=-2;while(abc)t=a;a=b;b=t;c+;printf(“%d,%d,%d“,a,b,c);程序的输出结果是( )。A) 1,5,0 B) 1,5,-2C) 5,1,-1 D) 5,1,-2(分数:2.00)A. B.C.D.解析:解析 本题考查 while 循环。先判断 while 循环的控制表达式是否成立,发现 abc 不成立,所以不执行循环。直接输出 a、b、c 的值。20.有以下程序
29、#includestdiohmain()int a=1,b=2;for( ;a8;a+) b+=a; a+=2;printf(“%d,%d/n“,a,b);程序运行后的输出结果是A) 9,18 B) 8,11 C) 7,11 D) 10,14A.B.C.D. 解析:解析初 始值 a=1,b=2,第一次循环:b=b+ a=2+1=3,a=a+2=1+2=3,a=a+1=3+1=4;第二次循环:b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;第三次循环:b=b+a=7+7=14,a=a+2=7+2=9,a=a+1 =9+1=10,故本题答案选 D。21.已定义下列函数:in
30、t fun(int *p)return *p;)fun 函数返回值是( )。A) 不确定的值 B) 一个整数C) 形参 p 中存放的值 D) 形参 p 的地址值(分数:2.00)A.B. C.D.解析:解析 由函数 int fun(int *p)return *p;的定义可知,返回值为整型指针变量 p 所指向的数据。22.有如下程序:#include stdiohmain()int x=23;doPrintf(“%d“,x-);while(! x);该程序的执行结果是( )。A) 321 B) 23 C) 不输出任何内容 D) 陷入死循环(分数:1.00)A.B. C.D.解析:解析 do-w
31、hile 语句的执行过程中要先执行一次循环体语句,本题中执行 x-后判断 while 中的表达式,表达式的值!x 为假,程序结束循环。23.下列程序的输出结果是( )。int f1(int x,int y)return xy?x:y;int f2(int x,int y)return xy?y:x;main()int a=4,b=3,e=5,d=2,e,f,g;e=f2(f1(a,b),f1(e,d);f=f1(f2(a,b),f2(e,d);g=a+b+c+d-e-f;printf(“%d,%d,%d/n“,e,f,g);A) 4,3,7 B) 3,4,7 C) 5,2,7 D) 2,5,7
32、(分数:2.00)A. B.C.D.解析:解析 根据函数 int f1(int x,int y)return xy?x:y;)和 int f2(int x,int y)return xy?y:x;的定义可知,如果 xy 成立,则函数 f1 返回 x 的值,函数 f2 返回 y 的值。所以 f1(a,b)=4,f1(c,d)=5,f2(a,b)=3,f2(c,d)=2 故 e=f2(4,5)=4,f=f1(3,2)=3,g=4+3+5+2-4-3=7。24.下列语句组中,正确的是A) char*s;s=”Olympic“; B) chars7;s=“Olympic“;C) char*s;s=“O
33、lympic“; D) chars7;s=“Olympic“;A. B.C.D.解析:解析 若 s 被定义为指针,选项 A,表示将指针 s 指向一个字符串,选项 C 表示为指针 s 赋一个字符串的值,显然选项 A 正确,选项 C 错误;若 s 被定义为数组,且要为该数组直接赋值,则必须在定义时进行,因此选项 B 和选项 D 都错误。25.下列程序的输出结果是( )。#includestdio.hint fun(int x)int a;if(x=0x=1)return 3;elsea=x-fun(x-2);return a;void main()printf(“%d“,fun(7);A) 2 B
34、) 8 C) 9 D) 5(分数:2.00)A. B.C.D.解析:解析 本题考查函数的递归调用。在函数递归调用时,fun(7):a=7-fon(5)fun(5):a=5-fon(3)fun3:a=3-fun(1)fun(1):a=3,反推回去 fun(3):a=3-3=0fun(5):a=5-0=5fun(7):a=7-5-2,最后的计算结果为 2。26.下列循环体的执行次数是( )。#includestdiohmain()int i,j;for(i=0,j=1;ij+1;i+=1,j-)printf(“%d/n“,j);A) 3 B) 2 C) 1 D) 0(分数:1.00)A.B.C.
35、D.解析:解析 本题考查 for 循环。第一次循环前先判断循环条件,此时 i=0,j=1,ij+1 成立,循环第一次;第二次循环前先判断循环条件,此时 i=1,j=0,(j-是先使用 j 的值再减 1),ij+1 不成立,结束循环。27.有下列程序:main()int k=5;while(-k) printf(“%d“,k-=3);printf(“/n“);执行后的输出结果是( )。A) 1 B) 2C) 4 D) 死循环(分数:2.00)A. B.C.D.解析:解析 在程序语句中,k 的初始值为 5,进行第 1 次 while 循环后,k 自减 1 为 4,非 0,执行循环体里的 print
36、f 语句,输出 1,此时 k 的值变为 1。程序执行第 2 次循环时,k 自减 1 变为 0,为假,退出 while 循环语句。所以程序的最后结果为 1。28.为了避免在嵌套的条件语句 if else 中产生二义性,C 语言规定,else 子句总是与( )配对。A缩排位置相同 if B其前面最近的 ifC其后面最近的 if D同一行上的 if(分数:1.00)A.B. C.D.解析:解析 C 语言规定,在 if else 语言中,else 总是与它前面的最近的 if 配对。29.若要求从键盘读入含有空格字符的字符串,应使用函数A) getc() B) gets() C) getchar() D
37、) scanf()(分数:2.00)A.B. C.D.解析:解析 scanf()语句用“空格”区别不同的字符串;getc()与 getchar()语句不能用于字符串的读入。30.有以下程序:void f(int*q)int i=0;for(; i5;i+)(*q)+;main()(int a5=1,2,3,4,5,i;f(a);for(i=0;i5;i+)printf(“%d“,ai);程序运行后的输出结果是_。A) 2,2,3,4,5, B) 6,2,3,4,5,C) 1,2,3,4,5, D) 2,3,4,5,6,(分数:2.00)A.B. C.D.解析:解析 题目中定义了一个指针变量作为
38、函数 f()的参数。主函数 main()中调用 f()函数,当 i=0时,执行语句“(*q)+;”,此处*q 就代表数组 a0的地址,也即将 q 进行加 1 操作;当 i=1 时,q 仍指向数组元素 a0的地址,因为在函数 f()中并未对指针变量 q 做任何变动,即*q 仍代表数组元素 a0的值,所以此次(*q)+即为 2+1,a0的值变为 3;直到 i=4 时,执行(*q)+后 a0的值变为 6,最后输出数组 a 的结果为 6、2、3、4、5。31.有以下程序:main()char *p=“3697“,“2584“;int i,j;long num=0;for(i=0;i2;i+)j=0;w
39、hile(pij!=/0)if(pij-0)%2)num=10*/num+pij-0;j+=2;printf(“%d/n“,hum);程序执行后的输出结果是_。A) 35 B) 37C) 39 D) 3975(分数:2.00)A.B.C. D.解析:解析 通过赋值表达式指针数组*p等价于数组 p24;表达式“pij-0”可用来表示该字符数组元素的数值,故表达式“(pij-0)%2”为判断该字符数组元素的数值的奇偶性,表达式“num=10*num+pij-0”中的数值运算表示直接加该字符数组元素的数值。32.分析下列程序:#includestdiohmain()int *p1,*p2,*p;in
40、t a=6,b=9;p1=main()int a10=(1,2,3,4,5,6,7,8,9,10;sum(int y;int z;struct ord a;B) struct ordint x;int y;int z;ord a;C) struct ordint x;int y;int z;a;D) structint x;int y;int z;a;(分数:2.00)A.B. C.D.解析:解析 在选项 B)中,即使在定义完结构体 ord 后,不能把 ord 看成是一种数据类型。38.若 x=2,y=3,则 x main()char b4=a,b,c,d,*p=b;point(p); pri
41、ntf(“%c/n“,*p);程序运行后的输出结果是_。A) a B) b C) c D) d(分数:1.00)A. B.C.D.解析:解析 本题考查的是函数传值调用。在 C 语言中,传值调用是将实参的值复制一份作为函数的形参。在函数中,改变形参不会影响到实参。而对于传址调用,函数改变的是形参指针变量所指内存中的值。实际上,还是将实参指针的值复制了一份给形参指针变量,它们是两个独立的变量,只不过指向同一个内存地址。本题的函数只是改变了形参指针变量 p 的值,对于实参没有任何影响,虽然函数参数是指针,但函数内部并未对指针所指内容进行操作,所以,实际上是传值调用。所以主函数中的 p 始终指向 b0
42、,最后输出的是“a”,选项 A 正确。40.以下语句或语句组中能正确进行字符串赋值的是( )。 A) ehar 以*sp; * sp = “right!“; B) char s10 ;s = “right!“;C) char s 10; * s = “right !“; D) char * sp = “right !“;(分数:1.00)A.B.C.D. 解析:解析 选项 A)应将*sp=“right!“;中的*叩改为 sP,即把字符串“right!”的首地址赋给指针变量sp;选项 B)中的 s 代表数组的首地址,不能给它赋字符串,只能在定义数组时,对其进行初始化;选项 C)中的。s 指的是数
43、组的第一个元素,不能给它赋字符串。二、填空题(总题数:15,分数:30.00)41.某二叉树中度为 2 的节点有 18 个,则该二叉树中有 1 个叶子节点。(分数:2.00)填空项 1:_ (正确答案:19)解析:解析 对任何一棵二叉树 T,如果其叶子结点数为 n0度为 2 的结点数为 n2,则 n0=n2+1,即叶子结点数总是比度为 2 的结点数多 1。42.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于 1。(分数:2.00)填空项 1:_ (正确答案:线性结构)解析:解析 数据的逻辑结构是指数据元素之间的逻辑关系,分为线性结构和非线性结构。常见的线性结构有线性表、栈和队列等,
44、常见的非线性结构有树、二叉树等。43.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_ (正确答案:存储结构)解析:44.在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么“学生”和“可选课程”的联系为 1。(分数:2.00)填空项 1:_ (正确答案:多对多)解析:解析 一名学生可以选择多门课程,一门课程也可以由多名学生选择,因此是多对多的联系。45.诊断和改正程序中错误的工作通常称为 1。(分数:2.00)填空项 1:_ (正确答案:调试)解析:解析 程序设计的任务是诊断和改正程序中的错误。程序调试活动由两部分组成,其一是根据错误的
45、迹象确定程序中错误的确切性、原因和位置;其二是对程序进行修改,排除这个错误。46.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。U /U(double, double);main()double x, y;scanf(“% lf % lf“, printf(“% 1f/n“, max(x, y);double max(double a, double b)return(ab? a:b); (分数:2.00)填空项 1:_ (正确答案:double max)解析:解析 本题考查函数的声明。C 语言中函数声明的一般形式为:(1)函数类型 函数名(参数类型 1,参数类型 2,)(2)函
46、数类型 函数名(参数类型 1 参数名 1,参数类型 2 参数名 2,)题目中函数类型是 double。函数名是 max。故答案是 double max。47.设 int a=5,b=6,表达式(+a= =b-)? +a:-b 的值是U /U。(分数:2.00)填空项 1:_ (正确答案:7)解析:解析 此表达式由三日运算符连接,进行+a=b-中的“=”运算时,+a 的值为 6,b-的值为6,则整个表达式的值为+a 的值,+a 的值为 7。这里要注意前缀+,-和后缀+,-的区别。48.以下程序在运行时若输入:1234567,则程序的运行结果是_。 #includestdio.h main() int x, y; scanf(“%2d%1d“, printf(“%d/n“, x+y); (分数:2.00)填空项 1:_ (正确答案:15)解析:解析 scanf 中“%2d“指定了变量 x 的位数为 2 位,“%1d“,指定了变量 y 的位数为 1 位,所以 x的值为 12,y 的值为 3,x+y=15。49.下列表达式用于判