1、二级 C 语言笔试-91 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.一个完整的 C 语言程序包含一个或多个函数,其中唯一不可缺少的函数是( )。(分数:1.00)A.库函数B.scanf 函数C.main 主函数D.printf 函数2.程序中头文件 type1.h 的内容是( )。#define N 5#define M1 N*3程序如下:#define “type1.h“#define M2 N*2main()int i;i=M1+M2; printf(“%d/n“,i);程序编译后运行的输出结果是( )。(分数:1.00)A.1
2、0B.20C.25D.303.下面程序的输出结果是( )。main()struct m1int a;int b;en2=1,3,2,7);printf(“%d/n“,en0.b/en0.a*en1.(分数:1.00)A.;A) 6B) 0C) 1D4.以下选项中合法的实型常数是( )。(分数:1.00)A.5E2.0B.E-3C2E0D.1.3E5.若有如下程序:main()static char*a3=“123“,“456“,“789“);char *b;b=a; +b;printf(“%s,%s/n“,*a,*a+1);printf(“%s,%s/n“,*b,b1);则程序运行后的输出结果
3、是( )。(分数:1.00)A.123,456, 456,789B.123,23456,56C.123,23 456,789D.123,456456,566.若有如下程序:int sub(int m)if(m=1|m=0) return 2;else return(sub(m-1)*sub(m-2);main()int n;scanf(“%d“,printf(“%d“,sub(n);如果从键盘输入 4回车,则程序运行后的输出结果是( )。(分数:1.00)A.8B.16C.24D.327.执行下面程序时,若输入 1、-5、6,则输出结果为( )。# include stdio.h# inclu
4、de math.h# define disc(a,b,c) b*b-4*a*cmain()float x1,x2; int a,b,c;scanf(“%d,%d,%d“,x1=(-b+sqrt(disc(a,b,c)/(2*(分数:1.00)A.;x2=(-b-sqr8.以下不正确的定义语句是( )。(分数:1.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5=O,1,3,5,7,9;C.char c1=1,2,3,4,5;D.char c2=/x10,/xa,/x8;9.定义如下变量:int n=10;则下列循环的输出结果是( )。while(n7)-
5、n;printf(“%d/n“,n);(分数:1.00)A.1098B.987C.10987D.987610.若执行下述程序时,从键盘输入的数据是 3 和 6,则程序的输出结果是( )。#include stdio.hvoid main()int x,y,z;scanf(“%d%d“,z = y + x;if (xy)z = y + x;printf(“%d“,z);(分数:1.00)A.9B.3C.0D.有语法错误11.有以下程序:main()int a=5,b=4,c=3,d=2;if(abc)printf(“%d/n“,d);else if(c-1=d)=1)printf(“%d/n“,
6、d+1);elseprintf(“%d/n“,d+2)执行后输出结果是( )。(分数:1.00)A.2B.3C.4D.编译时有错,无结果12.若有说明:int*p,m=5,n;,以下正确的程序段是( )。(分数:1.00)A.p= scanf(“%d“,scanf(“%d“,D.p=p=13.执行下列程序时输入:123空格456空格789回车,输出结果是( )。main()char s100;int c, i;scanf(“%c“,scanf(“%d“,scanf(“%s“,s);printf(“%c,%d,%s/n“,c,i,s);(分数:1.00)A.1,456,789B.1,23,456
7、C.1,23,456,789D.123,456,78914.下列描述正确的是( )。(分数:1.00)A.C 语句能嵌套定义函数,但不可以嵌套调用函数B.C 语句不能嵌套定义函数,也不可以嵌套调用函数C.C 语句能嵌套定义函数,也可以嵌套调用函数D.C 语句不能嵌套定义函数,但可以嵌套调用函数15.以下函数值的类型是( )。fun (float x)float y;y=3*x-4;return y;(分数:1.00)A.intB.不确定C.voidD.float16.下列叙述中错误的是( )。(分数:1.00)A.一种数据的逻辑结构可以有多种存储结构B.数据的存储结构与数据处理的效率无关C.数
8、据的存储结构与数据处理的效率密切相关D.数据的存储结构在计算机中所占的空间不一定是连续的17.下列属于不合法的 main 函数命令行参数表示形式的是( )。(分数:1.00)A.main(int argv,char*argc)B.main(int argv,char*argc)C.main(int argv,char*arc)D.main(int argc,char*argv)18.下列叙述中正确的是( )。(分数:1.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定低C.耦合程度弱的模块,其内聚程度一定高D.上述三种说法都不对19.下列程序段输出的字符串长度为(
9、 )。printf(“/aaa/ccc/bddd/“);(分数:1.00)A.11B.12C.13D.1720.x、y、z 被定义为 int 型变量,若从键盘给 x、y、z 输入数据,正确的输入语句是( )。(分数:1.00)A.INPUTx、y、z;B.scanf(“%d%d%d“,C.scanf(“%d%d%d“,x,y,z);D.read(“%d%d%d“,21.以下程序的输出结果是( )。main()int a=-1,b=4,k;k=(+a0)(分数:1.00)A.104B.103C.003D.00422.下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是(
10、)。(分数:1.00)A.选择B.连接C.投影D.并23.在 C 语言中,合法的长整型常数是( )。(分数:1.00)A.OLB.4962710C.324562float b;data;int *p;若要使 p 指向 data 中的 a 域,正确的赋值语句是( )。(分数:1.00)A.p=则计算表达式“a+=a-a*a”后的值是( )。(分数:1.00)A.0B.-12C.-24D.-827.在关系模型中,( )。(分数:1.00)A.为了建立一个关系,首先要构造数据的逻辑关系B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项C.一个关系的属性名表称为关系模式D.一个关系可以包括多
11、个二维表28.有如下程序段:int a=14,b=15,x;char c=A;x=(ap=b=*p+;”执行后的结果是( )。(分数:1.00)A.a=3 b=3B.a=2 b=2C.a=2 b=1D.a=2 b=330.在结构化设计方法中生成的结构图(SC)中,带有箭头的连线表示( )。(分数:1.00)A.模块之间的调用关系B.程序的组成成分C.控制程序的执行顺序D.数据的流向31.若有如下程序:int m=1;main()int t=0,s=0;int m=4;s+=m;)t+=m;printf(“%d,%d/n“,s,t);则程序运行后的输出结果是( )。(分数:1.00)_32.设有
12、定义:10ng x=-123456L,则以下能够正确输出变量 x 值的语句是( )。(分数:1.00)A.printf(“x=%d/n“,x);B.printf(“x=%1d/n“,x);C.peintf(“x=%8dL/n“,x);D.printf(x=%LD/n“,x);33.若有如下定义:struct stuchar name9;int age;float score;);struct stu class10=“Li“,17,67,“Song“,19,80,“guo“,18,79,“Zhao“,16,69;根据上面的定义,若执行“printf(“%s:%d%f“,class3.name,
13、class3.age,class3.score);“则输出的正确结果是( )。(分数:1.00)_34.以下数据结构中不属于线性数据结构的是( )。(分数:1.00)A.队列B.线性表C.二叉树D.栈35.有以下程序:main()int a=15,b=21,m=0;switch(a%3)case 0:m+;break;case 1:m+;switch(b%2)default:m+;case 0;m+;break;printf(“%d/n“,m);程序运行后的输出结果是( )。(分数:1.00)A.1B.2C.3D.436.下列关于 E-R 图的描述中正确的是( )。(分数:1.00)A.E-R
14、 图只能表示实体之间的联系B.E-R 图只能表示实体和属性之间的联系C.E-R 图只能表示实体和属性D.E-R 图能表示实体、属性和实体之间的联系37.下面描述中,符合结构化程序设计风格的是( )。(分数:1.00)A.使用顺序、选择和重复(循环)3 种基本控制结构表示程序的控制逻辑B.模块只有一个入口,可以有多个出口C.注重提高程序的执行效率D.不使用 goto 语句38.在一棵二叉树上第 5 层的结点数最多是( )。(分数:1.00)A.8B.16C.32D.1539.以下选项中合法的字符常量是( )。(分数:1.00)A.“B”B./O1OC.68D.D40.以下程序的输出结果是( )。
15、main()char a10=1,2,3,4,5,6,7,8,9,/0),*p;int i;i=8;p=a+i;printf(“%s/n“,p-3);(分数:1.00)A.6B.6789C.6D.78941.下面程序的输出结果是( )。char s()=“ABCD“,*p;main()for(p=s;ps+4;p+)printf(“%s/n“,p); )(分数:2.00)A.ABCD BCD CD DB.A B C DC.D C B AD.ABCD ABC AB A42.下面的程序运行后输出为( )。#include stdio.h# include math.hmain()int a,b;f
16、loat c;b = 5;c = 6;c = b+7;b = c+1;a = sqrt(double)b+c);printf(“%d,%f,%d“,a+6,C,b);(分数:2.00)A.11.000000,12.0000000,13.000000B.11.000000,12.000000,13C.11.0000000,12,13D.11,12.000000,1343.有以下程序:main(int arge,char*argv)int n,i=0;while(arv1i!=/0n=fun( );i+;printf(“%d/n“,n*argc)int fun()static int s=0;s+
17、=1;return s;假设程序经编译、连接后生成可执行文件 exam.exe,若输入以下命令行exam 123回车则运行结果为( )。(分数:2.00)A.6B.8C.3D.444.下面程序段的运行结果是( )。char a=“abcdefgh“;char *p=a;p+=3;printf(“%d/n“,strlen(strcpy(p,“ABCD“);(分数:2.00)A.8B.12C.4D.745.设有 int x=11:表达式(x+*1/3)的值是( )。(分数:2.00)A.3B.4C.11D.1246.若有定义:int a=8,b=4,C;执行语句“c=a/b+0.4;”后,c 的值
18、为( )。(分数:2.00)A.1.4B.1C.2.0D.247.若有如下程序:main()int x=14,32,65,69,78,59,*t;t= x +5;printf(“%d/n“,*-t);则程序执行后的输出结果是( )。(分数:2.00)A.78B.65C.32D.1448.若有以下定义:char a;int b;float c;double d;则表达式“a*b+d-c”值的类型为( )。(分数:2.00)A.floatB.intC.charD.double49.若有如下程序:main()int x=3,y=4,z;z=(x+(y-=X*X);printf(“%d,%d/n“,y
19、,z);则程序执行后的输出结果是( )。(分数:2.00)A.-4,2B.-5,-2C.-5,-1D.4,-250.设有如下定义:struct sschar name10;int age;char sex;std3,*p=std;下面各输入语句中错误的是( )。(分数:2.00)A.scanf(“%d“,C.scanf(“%c“,二、填空题(总题数:17,分数:40.00)51.在深度为 5 的完全二叉树中,度为 2 的结点数最多为 【1】 。(分数:2.00)填空项 1:_52.数据的逻辑结构在计算机存储空间中的存放形式称为数据的 【2】 。(分数:2.00)填空项 1:_53.若按功能划分
20、,软件测试的方法通常分为白盒测试方法和 【3】 测试方法。(分数:2.00)填空项 1:_54.在关系运算中, 【4】 运算是对两个具有公共属性的关系所进行的运算。(分数:2.00)填空项 1:_55.实体之间的联系可以归结为一对一的联系,一对多的联系与多对多的联系。如果一个学校有许多学生,而一个学生只属于一个学校,则实体集学校与实体集学生之间的联系属于 【5】 的联系。(分数:2.00)填空项 1:_56.已知字符 A 的 ACSII 码值为 65,以下语句的输出结果是 【6】 。char ch=B;printf(“%c %d/n“,ch,ch);(分数:2.00)填空项 1:_57.以下程
21、序段的输出结果是 【7】 。main()int a=2,b=2,c=4;a*=16+(b+)-(+C);printf(“%d“,a);(分数:2.00)填空项 1:_58.有以下程序main()int t=1,i=5;for( ; i=0; i-) t*=i;printf(“%d/n“,t);执行后输出结果是 【8】 。(分数:2.00)填空项 1:_59.若有以下程序:main()int a=4, b=3, c=5, t=0;if(ab) t=a; a=b; b=t;if(ac) t=a; a=c; c=t;printf(“%d%d%d/n“,a,b,C);执行后输出结果是 【9】 。(分数
22、:2.00)填空项 1:_60.有以下程序:#include stdio.hmain()char ch1,ch2; int n1,n2;ch1=getchar(); ch2=getchar();n1=ch1-0; n2=n1*10+(ch2-0);printf(“%d/n“,n2);程序运行时输入 12回车,执行后输出结果是 【10】 。(分数:2.00)填空项 1:_61.有以下程序:void f( int y,int *x)y=y+*x; *x=*x+y; main()int x=2,y=4;f(y,ptintf(“%d %d/n“,x,y);执行后输出结果是 【11】 。(分数:2.00
23、)填空项 1:_62.若 x、y 和 z 均是 int 型变量,则执行下面表达式后的 x 值为 【12】 。x=(y=4)+(z=3)(分数:2.00)填空项 1:_63.以下程序中,for 循环体执行的次数是 【13】 。#define N 2#define M N+1#define K M+1*M/2main()int i;for(i=1;iK;i+). (分数:2.00)填空项 1:_64. (分数:4.00)填空项 1:_65.若有如下程序:main()int x=5,y,*t;t=y=+(*t);printf(“%d,%d“,x,y);则程序执行后的 x 值为 【16】 ,y 的值为
24、 【17】 。(分数:4.00)填空项 1:_66.下面函数用来求两个单精度数之和,并通过形参将结果传回,请填空。void sub(float x,float y, 【18】 z)【19】 =x+y;(分数:4.00)填空项 1:_67.设有如下变量说明,则 a+(int)(int)b+c)(int)(b-c)的值为 【20】 。int a=5;float b=7.2,c=3.6;(分数:2.00)填空项 1:_二级 C 语言笔试-91 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.一个完整的 C 语言程序包含一个或多个函数,其中唯一不可缺
25、少的函数是( )。(分数:1.00)A.库函数B.scanf 函数C.main 主函数 D.printf 函数解析:解析 一个完整的 C 程序有且仅有一个主函数(main()函数),主函数可以调用其他各种函数,但其他函数不能调用主函数, C 程序从主函数开始执行,并在主函数中结束整个程序的运行。故选项 C 正确。2.程序中头文件 type1.h 的内容是( )。#define N 5#define M1 N*3程序如下:#define “type1.h“#define M2 N*2main()int i;i=M1+M2; printf(“%d/n“,i);程序编译后运行的输出结果是( )。(分
26、数:1.00)A.10B.20C.25 D.30解析:解析 i=M1+M2=N*3+N*2=5*3+5*2=25。3.下面程序的输出结果是( )。main()struct m1int a;int b;en2=1,3,2,7);printf(“%d/n“,en0.b/en0.a*en1.(分数:1.00)A.;A) 6B) 0C) 1D 解析:解析 en2是结构体类型的数组,en0.b/en0.a*en1.a=3/1*2=6。4.以下选项中合法的实型常数是( )。(分数:1.00)A.5E2.0B.E-3C2E0 D.1.3E解析:解析 在 C 语言中,实数有两种表示形式:小数形式与指数形式。小
27、数形式的实数由整数部分、小数点和小数部分组成(必须要有小数点)。指数形式字母 e(E)之前必须有数字,且 e 或 E 后的指数必须为整数。选项 A 中,5E2.0 中 E 后面的 2.0 不是整数;选项 B 中,E 前面没有数字;选项 D 中,E 后面没有数字,只有选项 C 正确。5.若有如下程序:main()static char*a3=“123“,“456“,“789“);char *b;b=a; +b;printf(“%s,%s/n“,*a,*a+1);printf(“%s,%s/n“,*b,b1);则程序运行后的输出结果是( )。(分数:1.00)A.123,456, 456,789B
28、.123,23456,56C.123,23 456,789 D.123,456456,56解析:解析 a 为指针数组,a0即数组 a 的数组名指向字符串“123“的首地址,输出*a 为“123“,*a+1将指针下移 1 个存储单元,输出字符串为”23”。a1指向字符串“456“的首地址,a2指向字符串“789“的首地址。b 为指针的指针,它的值为数组 a 的首地址。6.若有如下程序:int sub(int m)if(m=1|m=0) return 2;else return(sub(m-1)*sub(m-2);main()int n;scanf(“%d“,printf(“%d“,sub(n);
29、如果从键盘输入 4回车,则程序运行后的输出结果是( )。(分数:1.00)A.8B.16C.24D.32 解析:解析 本题的 sub()函数是一个递归函数,当参数 m 为 1 或 0 时返回 2,否则返回 sub(m-1)*sub(m-2)。所以 sub(4)递推下来就是 sub(4)=sub(3)*sub(2)=sub(2)*sub(1)*sub(1)*sub(0)=sub(1)*sub(0)*2*2*2=25(上标)=32。所以正确答案是 D。7.执行下面程序时,若输入 1、-5、6,则输出结果为( )。# include stdio.h# include math.h# define d
30、isc(a,b,c) b*b-4*a*cmain()float x1,x2; int a,b,c;scanf(“%d,%d,%d“,x1=(-b+sqrt(disc(a,b,c)/(2*(分数:1.00)A.;x2=(-b-sqr解析:解析 本题是使用带参数的宏来求解一元二次方程的两个根。表达式 x1(-b+sqrt(disc(a,b,c)/(2*a)宏展开后为: x1=(-b+sqrt(b*b-4*a*c)/(2*a)=(5+sqrt(25-24)/2=6/2=3。表达式 x2=(-b-sqrt(disc(a,b,c)/(2*a)宏展开后为: x2=(-b-sqrt(b*b-4*a*c)/(
31、2*a)=(5-sqrt(25-24)/2=4/2=2。所以程序输出结果为 3.0,2.0,应该选择 B。8.以下不正确的定义语句是( )。(分数:1.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5=O,1,3,5,7,9; C.char c1=1,2,3,4,5;D.char c2=/x10,/xa,/x8;解析:解析 选项 B 中初值列表中的初值个数超过了数组包含的元素的个数。9.定义如下变量:int n=10;则下列循环的输出结果是( )。while(n7)-n;printf(“%d/n“,n);(分数:1.00)A.1098B.987 C.10
32、987D.9876解析:解析 第 1 次循环,107,-n=9,输出 9。第 2 次循环,97,-n=8,输出 8。第 3 次循环,87,-n=7,输出 7。10.若执行下述程序时,从键盘输入的数据是 3 和 6,则程序的输出结果是( )。#include stdio.hvoid main()int x,y,z;scanf(“%d%d“,z = y + x;if (xy)z = y + x;printf(“%d“,z);(分数:1.00)A.9B.3 C.0D.有语法错误解析:解析 变量 x 得到数据 3,变量 y 得到数据 6。z=6+3=9。xy 即 36 关系表达式的值为 1,执行z=y
33、-x=6-3=3。最后输出 z 的值为 3。11.有以下程序:main()int a=5,b=4,c=3,d=2;if(abc)printf(“%d/n“,d);else if(c-1=d)=1)printf(“%d/n“,d+1);elseprintf(“%d/n“,d+2)执行后输出结果是( )。(分数:1.00)A.2B.3 C.4D.编译时有错,无结果解析:解析 C 语言规定 else 总是和离它最近的 if 语句配对。故第一个 else 和第一个 if 配对,第二个 else 和第二个 if 配对。首先计算第一个 if 后面的表达式 abc,表达式 ab 为 1,表达式 1c为 0,
34、所以执行 else 后面的语句。先执行 if 后面的表达式,c-1d 为真,值为 1。1=1 为真,执行primf 语句。所以,B 选项为所选。12.若有说明:int*p,m=5,n;,以下正确的程序段是( )。(分数:1.00)A.p= scanf(“%d“,scanf(“%d“,D.p=p= 解析:解析 p 为指针型变量,在输入函数的地址列表中不用int c, i;scanf(“%c“,scanf(“%d“,scanf(“%s“,s);printf(“%c,%d,%s/n“,c,i,s);(分数:1.00)A.1,456,789B.1,23,456 C.1,23,456,789D.123,
35、456,789解析:解析 第一个输入语句只接收一个字符1;第二个输入语句接收一个整数 23,遇到空格停止;第三个输入语句接收一个字符串“456“,遇到空格停止。14.下列描述正确的是( )。(分数:1.00)A.C 语句能嵌套定义函数,但不可以嵌套调用函数B.C 语句不能嵌套定义函数,也不可以嵌套调用函数C.C 语句能嵌套定义函数,也可以嵌套调用函数D.C 语句不能嵌套定义函数,但可以嵌套调用函数 解析:解析 C 语句不能嵌套定义函数,但可以嵌套调用函数。15.以下函数值的类型是( )。fun (float x)float y;y=3*x-4;return y;(分数:1.00)A.int B
36、.不确定C.voidD.float解析:解析 函数定义时如果数据类型默认,则默认为 int。函数中如果有“retum(表达式):”语句,表达式的类型可能与函数的类型不一致,但它并不能改变函数的类型,实际情况是把表达式转换为函数值的类型作为返回值,因此本题的函数值类型是 int。16.下列叙述中错误的是( )。(分数:1.00)A.一种数据的逻辑结构可以有多种存储结构B.数据的存储结构与数据处理的效率无关 C.数据的存储结构与数据处理的效率密切相关D.数据的存储结构在计算机中所占的空间不一定是连续的解析:解析 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等,
37、选项 A 和选项 D 正确。采用不同的存储结构,其数据处理的效率不同,因此,在处理数据时选择合适的存储结构很重要,选项 c 正确,选项 B 错误,应为本题正确答案。17.下列属于不合法的 main 函数命令行参数表示形式的是( )。(分数:1.00)A.main(int argv,char*argc)B.main(int argv,char*argc) C.main(int argv,char*arc)D.main(int argc,char*argv)解析:解析 main 函数通常可用两个参数,参数名可由用户自定,但类型是固定的,第一个参数必须是整型,第二个参数是一个指向字符型的指针数组的指
38、针,可以表示为*arc 或*argc。4 个选项中只有选项 B 不符合。18.下列叙述中正确的是( )。(分数:1.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定低C.耦合程度弱的模块,其内聚程度一定高 D.上述三种说法都不对解析:解析 模块之间的连接形式以及模块接口的复杂性,是影响模块耦合的主要因素。接口复杂的模块,其耦合程度要比接口简单的的模块强;耦合程度弱的模块,其内聚程度一定高。19.下列程序段输出的字符串长度为( )。printf(“/aaa/ccc/bddd/“);(分数:1.00)A.11B.12C.13 D.17解析:解析 转义字符有 1 个/、
39、2 个/、1 个/b,普通字符有 3 个 a、3 个 c、3 个 d,共 13 个字符。20.x、y、z 被定义为 int 型变量,若从键盘给 x、y、z 输入数据,正确的输入语句是( )。(分数:1.00)A.INPUTx、y、z;B.scanf(“%d%d%d“, C.scanf(“%d%d%d“,x,y,z);D.read(“%d%d%d“,解析:解析 scanf()函数要求将输入的数据存入变量所在的地址。选项 A 不是 C 语言中的输入语句,故选项 A 不正确;选项 C 中输入的是变量字符串而不是地址字符串,不满足 scanf()函数要求将输入的数据存入变量所在的地址,故选项 C 不正
40、确;选项 D 不是 C 语言中的输入语句,故选项 D 不正确:所以,4 个选项中选项 B 符合题意。21.以下程序的输出结果是( )。main()int a=-1,b=4,k;k=(+a0)(分数:1.00)A.104B.103C.003D.004 解析:解析 float b;data;int *p;若要使 p 指向 data 中的 a 域,正确的赋值语句是( )。(分数:1.00)A.p=则计算表达式“a+=a-a*a”后的值是( )。(分数:1.00)A.0B.-12C.-24D.-8 解析:解析 a+=a-a*a 等价于 a=a+a-a*a=4+4-4*4=-8。27.在关系模型中,(
41、)。(分数:1.00)A.为了建立一个关系,首先要构造数据的逻辑关系B.表示关系的二维表中各元组的每一个分量还可以分成若干数据项C.一个关系的属性名表称为关系模式 D.一个关系可以包括多个二维表解析:解析 在关系模型中,只要将数据按照一定的关系存入计算机,也就是建立关系,不需要事先构造数据的逻辑关系,选项 A 错误;表示关系的二维表最基本的要求是,表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表,选项 B 和选项 D 错误。28.有如下程序段:int a=14,b=15,x;char c=A;x=(ap=b=*p+;”执行后的结果是( )。(分数:1.00)A.a=3 b=3B.a
42、=2 b=2 C.a=2 b=1D.a=2 b=3解析:解析 执行 p=main()int t=0,s=0;int m=4;s+=m;)t+=m;printf(“%d,%d/n“,s,t);则程序运行后的输出结果是( )。(分数:1.00)_解析:解析 int m=4;s+=m;32.设有定义:10ng x=-123456L,则以下能够正确输出变量 x 值的语句是( )。(分数:1.00)A.printf(“x=%d/n“,x);B.printf(“x=%1d/n“,x); C.peintf(“x=%8dL/n“,x);D.printf(x=%LD/n“,x);解析:解析 x 为一个长整型的变
43、量,而且是一个十进制的数,它的输出控制符是%1d,所以排除选项 A和选项 C;由于 C 语言中是区分大小写的,1d 中的 d 不能为大写,故排除选项 D。4 个选项中 B 正确。33.若有如下定义:struct stuchar name9;int age;float score;);struct stu class10=“Li“,17,67,“Song“,19,80,“guo“,18,79,“Zhao“,16,69;根据上面的定义,若执行“printf(“%s:%d%f“,class3.name,class3.age,class3.score);“则输出的正确结果是( )。(分数:1.00)_
44、解析:解析 class10是结构体型的数组,class3为“Zhao“,16,6934.以下数据结构中不属于线性数据结构的是( )。(分数:1.00)A.队列B.线性表C.二叉树 D.栈解析:解析 线性结构是指满足如下条件的非空数据结构:有且只有一个根结点;每一个结点最多有一个前驱、一个后继。队列、线性表和栈同时满足这些条件,二叉树的结点可能存在两个后继,所以不是线性结构。35.有以下程序:main()int a=15,b=21,m=0;switch(a%3)case 0:m+;break;case 1:m+;switch(b%2)default:m+;case 0;m+;break;prin
45、tf(“%d/n“,m);程序运行后的输出结果是( )。(分数:1.00)A.1 B.2C.3D.4解析:解析 在 switch 语句中 break 语句的作用是退出分支语句,若没有 break 语句则一直向下执行。本题中首先计算 switch 后面括号里的表达式 a%3,即 15%3 为 0:执行 case0:后面的语句“m+;”,m自加 1,即 m 为 1;遇到 break 语句;然后跳出 switch 语句,所以最后输出的 m 值为 1。所以选项 A 正确。36.下列关于 E-R 图的描述中正确的是( )。(分数:1.00)A.E-R 图只能表示实体之间的联系B.E-R 图只能表示实体和
46、属性之间的联系C.E-R 图只能表示实体和属性D.E-R 图能表示实体、属性和实体之间的联系 解析:解析 E-R 图不仅可以描述实体及其相互之间的联系,还可以描述多个实体集之间的联系和一个实体集内部实体之间的联系。37.下面描述中,符合结构化程序设计风格的是( )。(分数:1.00)A.使用顺序、选择和重复(循环)3 种基本控制结构表示程序的控制逻辑 B.模块只有一个入口,可以有多个出口C.注重提高程序的执行效率D.不使用 goto 语句解析:解析 符合结构化程序设计风格中,应该选择只有一个入口和一个出口的模块,故选项 B 错误;首先要保证程序正确,然后才要求提高效率,故选项 C 错误;严格控制使用 goto 语句,必要时可以使用,故选项 D 错误。38.在一棵二叉树上第 5 层的结点数最多是( )。(分数:1.00)A.8B.16 C.32D.15解析:解析 在二叉树的第 K 层上,最多有 2k-1个结点。所以,第 5 层的结点数最多为 25-1即 16 个。39.以下选项中合法的