1、二级 C语言笔试-203 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.下列选项中均属于 C语言合法的标识符是( )。(分数:1.00)A.Int #sub breakB._3abFORLongC.3aprintfa_bD.WORDautoinclude2.表达式“1|2|3|4”的值是( )。(分数:1.00)A.1B.2C.3D.43.下列叙述中正确的是( )。(分数:1.00)A.程序设计过程中的主要工作是编制程序B.程序设计的主要目标是编制出运行结果正确的程序C.不良的程序设计风格会增加程序的复杂性D.上述三种说法都不对4.若有如
2、下定义:int x=6,y=3,z=2;则表达式“x=y|yzi=3;a=+WW(i+1);printf(“%d/n“,(分数:1.00)A.;10.有以下程序:main()int a10=1,2,3,4,5,6,7,8,9,10,*p=printf(“%d/n“,*p+*q);(分数:1.00)A.16B.10C.8D.611.下列程序执行后的输出结果是:main()char arr24;strcpy(arr“you“);strcpy(arr1,“me“);arr03=printf(“%s/n“,arr);程序的输出结果是( )。(分数:1.00)A.youfor(m=0;m3;m+)for
3、(n=0;n4;n+)*t=amn;t+; main()int*t,s34)=1,2,3),4,5,6),7,8,9;t=(int*)malloc(50);sub(t,s);printf(“%d,%d/n“,t4,t7);则程序运行后的输出结果是( )。(分数:1.00)A.4,7B.4,0C.5,8D.程序错误13.以下各选项均为说明一种新的类型名,其中正确的是( )。(分数:1.00)A.typedef v1 int;B.typedef v1=int;C.typedef int v1;D.typedef v1=int;14.有以下程序:main()int i=0,s=0;for(;)if(
4、i=3|i=5) continue;if(i=6) break;i+;s+=i;printf (“%d/n“s);程序运行后的输出结果是( )。(分数:1.00)A.10B.13C.21D.程序进入死循环15.以下合法的赋值语句是( )。(分数:1.00)A.x=y=100B.d-;C.x+y;D.c=int(a+b);16.以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串的首地址:#include stdio.h#include string.hchar *scmp (char *S1,char *s2)if(strcmp(s1,s2)0)return(s1)
5、;else return(s2);main()int i; char string20,str3 20;for(i=0;i3;i+) gets(stri);strcpy(string,scmp(str0,str1);/*库函数 strcpy对字符串进行复制*/strcpy(string,scmp(string,str2);printf(“%s/n“,string);若运行时依次输入 abed、abba 和 abc三个字符串,则输出结果为( )。(分数:1.00)A.abedB.abbaC.abcD.abca17.在深度为 5的满二叉树中,叶子结点的个数为( )。(分数:1.00)A.31B.3
6、2C.16D.1518.下列属于不合法的 C语言整型常量的选项是( )。(分数:1.00)A.-32679B.0XabcC.069D.3e219.若有函数内部说明:int a34;则数组 a中各元素( )。(分数:1.00)A.可在程序的运行阶段得到初值 0B.可在程序的编译阶段得到初值 0C.不能得到确定的初值D.可在程序的编译或运行阶段得到初值 020.下列叙述中正确的是( )。(分数:1.00)A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述三种说法都不对21.下列叙述中正确的
7、是( )。(分数:1.00)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构22.在 C语言系统中,假设 int类型数据占两个字节,则 double、long、unsigned int、char 类型数据所占字节数分别为( )。(分数:1.00)A.8,2,4,1B.2,8,4,1C.4,2,8,1D.8,4,2,123.下面程序段的执行结果可能为( )。main()int b=1,2,3),i;for(i=1;i=4;+i)printf(“%u/t“,bi);(分数:1.00)A.1 2 3 65516B.0 1 2 3C.2 3 65516 285D
8、.程序不能通过编译24.以下程序的输出结果是( )。main()char c1=6,c1=0printf(“%d,%d,%d/n“,c1,c2,c1-c2);(分数:1.00)A.因输出格式不合法,输出出错信息B.54,48,6C.6,0,7D.6,0,625.若说明 int*p,n;则通过语句 scanf能够正确读入数据的程序段是( )。(分数:1.00)A.p=unsigned char c;u1;u1.c=A;printf(“%c/n“,u1.n);执行后输出结果是( )。(分数:1.00)A.产生语法错误B.随机值C.AD.6527.若有如下程序段:int n=1O;while(1)n
9、-;printf(“%d“;n);则 while循环执行的次数是( )。(分数:1.00)A.0B.1C.10D.无数28.下列数据结构中,按先进后出原则组织数据的是( )。(分数:1.00)A.循环队列B.栈C.顺序表D.循环链表29.设有以下语句:char a=3,b=6,C;c=a|b2;printf(“%d/n“,C);则 c的二进制值是( )。(分数:1.00)A.00011011B.00010100C.00011100D.0001100030.若有如下程序:main()int k,x=0,y=0;for(k=0;k=2;k+)switch(k)case 0: X+;case 1:
10、y+;case 2: X+;y+;printf(“%d,“d/n“,x,y);则程序运行后的输出结果是( )。(分数:1.00)A.3,3B.2,2C.4,5D.2,331.结构化程序设计主要强调的是( )。(分数:1.00)A.程序的规模B.程序的易读性C.程序的执行效率D.程序的可移植性32.将 E-R图转换到关系模式时,实体与联系都可以表示成( )。(分数:1.00)A.属性B.关系C.键D.域33.以下正确的数组定义语句是( )。(分数:1.00)A.int y14=1,2,3,4,5, ;B.float x3=l,2,3;C.long s23=1,1,21,2,3,;D.double
11、 t3=034.若已定义 x和 y为 double类型,则表达式“x=1,y=x+3/2”的值是( )。(分数:1.00)A.1B.2C.2.0D.2.535.下列程序执行后的输出结果是( )。void funcl(int i);void func2(int i);char st=“hello,friend!“;void funcl(int i)printf(“%C“,sti);if(i3)i+=2;func2(i); )void func2(int i)printf(“%c“,sti);if(i3)i+=2;func1(i); main()int i=0;funcl(i);printf(“/
12、n“); )(分数:1.00)A.hlmB.hloC.helloD.he136.以下有 4组用户标识符,其中合法的一组是( )。(分数:1.00)A.for -sub caseB.4dDOSizeC.f2_G3IFabcD.WORDvoiddefine37.下列程序执行后的输出结果是( )#define MA(x) x*(x-1)main()int a=1,b=2;printf(“%d/n“,MA(1+a+b);(分数:1.00)A.5B.6C.7D.838.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#define N 10void artin( int xN)int i=0
13、;while(iN)scanf(“%d“, );在下划线处应填入的是( )。(分数:1.00)A.x+iB.i0;-i)+k;do +j;if (i!=j) break;+k;while(j5);printf(“i=%d j=%d k=%d/n“,i,j,k);(分数:1.00)A.i=0 j=4 k=12B.i=0 j=5 k=5C.i=0 j=4 k=4D.i=0 j=3 k=341.在面向对象的程序设计中,下列叙述错误的是( )。(分数:2.00)A.任何一个对象构成一个独立的模块B.一个对象不是独立存在的实体,各个对象之间有关联,相互依赖C.下一层次的对象可以继承上一层次对象的某些属性
14、D.上述三种说法都正确42.以下程序的输出结果是( )。main()int a=2,k;for(k=0;k3;k+) printf(“%4d“,f1((分数:2.00)A.);else printf(“%d/n“,y);B.if(a=O) printf(“%d/n“,y); else printf(“%d/n“,x);C.if(a!=0) printf(“%d/n“,x); else printf(“%d/n“,y);D.if(a=0) printf(“%d/n“,x); else printf(“%d/n“,y);44.已知 a、b、c 为整型变量,若从键盘输入 5空格6空格7回车,使 a的
15、值为 5,b 的值为6,c 的值为 7,则下列选项中正确的输入语句是( )。(分数:2.00)A.scanf (“%3d%3d%3d“,a,b,C);B.scanf (“%d%d%d“,a,b,C.;C) scanf (“%d%d%d“,D.scanf (“%d%d%d“,45.以下叙述中正确的是( )。(分数:2.00)A.局部变量说明为 static存储类,其生存期将得到延长B.全局变量说明为 static存储类,其作用域将被扩大C.任何存储类的变量在未赋初值时,其值都是不确定的D.形参可以使用的存储类说明符与局部变量完全相同46.根据下面的定义,能打印出字母 M的语句是( )。struc
16、t personchar name9;int age;struct person class10=“John“,17,“Paul“,19,“Mary“,18,“Adam“,16;(分数:2.00)A.printf(“%c/n“,class3.name;B.printf(“%c/n“,class2.name0);C.printf(“%c/n“,class3.name1);D.printf(“%c/n“,class2.name1);47.若有如下程序:void sub()int a,b;a=lO;b=20;printf(“%d,%d/n“,b,(分数:2.00)A.;main()int a=1O,
17、b=20;sub();printf(“%d,%d/n“aB.;则程序运行后的输出结果是( )。A) 10,20B) 20,1020,10C) 20,10D) 1048.在下述程序中,判断 ij 共执行的次数是( )。main()int i=O,j=10,k=2,s=0;for( ; )i+=k;if(ij)ptintf(“%d“,s);break;s+=i;(分数:2.00)A.4B.7C.5D.649.若要用 fopen函数打开一个文本文件,该文件要既能读也能写,则文件使用方式的字符串为( )。(分数:2.00)A.“r+“B.“a+“C.“rb+“D.wb+“50.对于建立良好的程序设计风
18、格,下面描述正确的是( )。(分数:2.00)A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法即可C.充分考虑程序的执行效率D.程序的注释可有可无二、填空题(总题数:17,分数:40.00)51.设一棵完全二叉树共有 700个结点,则在该二叉树中有 【1】 个叶子结点。(分数:2.00)填空项 1:_52.在面向对象方法中,类之间共享属性和操作的机制称为 【2】 。(分数:2.00)填空项 1:_53.源程序文档化要求程序应加注释。注释一般分为序言性注释和 【3】 。(分数:2.00)填空项 1:_54.一般来说,数据库的设计过程要经历 3个大的阶段,即可行性分析与研究阶段、系统设计
19、阶段、设计实施与系统运行阶段。概念设计、逻辑结构设计、物理结构设计属于数据库设计的 【4】 阶段。(分数:2.00)填空项 1:_55.数据流图有两种典型的结构形式,它们分别是变换型和 【5】 。(分数:2.00)填空项 1:_56.以下程序运行后的输出结果是 【6】 。main()int p=30;printf(“%dkn“,(p/30?p/10:p%3);(分数:2.00)填空项 1:_57.以下程序运行后的输出结果是 【7】 。main()char m;m=B+32; printf(“%c/n“,m);(分数:2.00)填空项 1:_58.若有如下定义,则该数组的第一维大小为 【8】 。
20、int b4=1,2,3,4,5,6,7,8,9);(分数:2.00)填空项 1:_59.以下程序运行后的输出结果是 【9】 。main()int i,m=0,n=0,k=0;for(i=9;i=11;i+)switch (i/10)case 0:m+;n+;break;case 1:n+;break;default:k+;n+;printf(“%d %d %d/n“,m,n,k);(分数:2.00)填空项 1:_60.以下程序运行后的输出结果是 【10】 。void fun(int X,int y)x=x+y;y=x-y;x=x-y;printf(“%d,%d,“,x,y);main()in
21、t x=2,y=3;fun(x,y);printf(“%d,%d/n“,x,y);(分数:2.00)填空项 1:_61.以下程序运行后的输出结果是 【11】 。main()char a=“Language“,b=“Programe“;char *p1, *p2; int k;p1=a; p2=b;for(k=0;k=7;k+)if(*(p1+k)=*(p2+k) printf(%c“,*(p1+k);(分数:2.00)填空项 1:_62.以下程序的输出结果是 【12】 。#include stdio.hmain()int a=1234;float b=123.456;double c=1234
22、5.54321;printf(“/n%2d,%2.1f,%2.11f“,a,b,C);(分数:2.00)填空项 1:_63.以下程序的输出结果为 【13】 。#define JFT(x)x*xmain()int a, k=3;a =+ JFT(k+1);printf(“%d“,a);(分数:2.00)填空项 1:_64.如果调用 fopen函数不成功,则函数返回 【14】 ;如果调用 fclose函数不成功,则函数返回 【15】 。(分数:4.00)填空项 1:_65.下面程序的功能是用来统计文件中字符个数。请填空。#include“stdio.h“main()long count=OL;FI
23、LE*fp= 【16】 (“text.dat“,“r“);if(fp=0)printf(“Open error/n“);exit(0);while( 【17】 )fgetc(fp);count+;fclise(fp);printf(“%1d/n“,count);(分数:4.00)填空项 1:_66.以下程序的功能是求下列算式中 A、B、C 的值,请填空。(分数:4.00)填空项 1:_67.用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。st=(char*) 【20】 ;(分数:2.00)填空项 1:_二级 C语言笔试-203 答案解析(总分:1
24、00.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.下列选项中均属于 C语言合法的标识符是( )。(分数:1.00)A.Int #sub breakB._3abFORLong C.3aprintfa_bD.WORDautoinclude解析:解析 选项 A中#sub 含有非法字符#、break 属于 C语言关键字都不是合法标识符;选项 C中 3a以数字开头不是合法标识符;选项 D中的 auto是 C语言关键字不属于合法标识符;故应该选择 B。2.表达式“1|2|3|4”的值是( )。(分数:1.00)A.1 B.2C.3D.4解析:解析 C 语言中任何非 0值都表
25、示真,所以表达式 1|2|3|4就是“真|真|真|真”,结果为真。又因为 C语言中的真值转换为整型就是 1,故选项 A正确。3.下列叙述中正确的是( )。(分数:1.00)A.程序设计过程中的主要工作是编制程序B.程序设计的主要目标是编制出运行结果正确的程序C.不良的程序设计风格会增加程序的复杂性 D.上述三种说法都不对解析:解析 程序设计过程中包括很多步骤,编制程序只是其中的一步。所以,选项 A错误。程序设计的最终产品是程序,但仅设计和编制出一个运行结果正确的程序是不够的,还应养成良好的程序设计风格。所以,选项 B错误。程序设计的根本日标是要降低程序的复杂性和提高程序的可读性。而程序的复杂性
26、主要来自以下两个方面:问题固有的复杂性:不良的设计风格人为增加了程序的复杂性。所以,良好的设计风格对于降低程序的复杂性是很重要的,并且,好的设计风格是好的程序风格的基本保证。选项 C正确。4.若有如下定义:int x=6,y=3,z=2;则表达式“x=y|yzi=3;a=+WW(i+1);printf(“%d/n“,(分数:1.00)A.;解析:解析 表达式“a+WW(i+1);”,宏展开之后为 a=+i+1*i+1,先计算+i,结果为 4,i 的值也变为 4,所以 a=4+1*4+1=9。所以正确答案是选项 C。10.有以下程序:main()int a10=1,2,3,4,5,6,7,8,9
27、,10,*p=printf(“%d/n“,*p+*q);(分数:1.00)A.16B.10 C.8D.6解析:解析 本题定义了一维数组 a和两个指针变量。指针变量 p的初值为第 4个数组元素的地址,指针变量 q的初值为,第 6个数组元素的地址。*p+*q=4+6=10。11.下列程序执行后的输出结果是:main()char arr24;strcpy(arr“you“);strcpy(arr1,“me“);arr03=printf(“%s/n“,arr);程序的输出结果是( )。(分数:1.00)A.youfor(m=0;m3;m+)for(n=0;n4;n+)*t=amn;t+; main()
28、int*t,s34)=1,2,3),4,5,6),7,8,9;t=(int*)malloc(50);sub(t,s);printf(“%d,%d/n“,t4,t7);则程序运行后的输出结果是( )。(分数:1.00)A.4,7B.4,0 C.5,8D.程序错误解析:解析 本题定义了一个 sub()函数,其作用为将一个二维数组按行复制到 t所指的连续内存空间内。主程序中首先使用 malloc()函数为 t申请了 50个字节的内存空间,然后调用 sub()函数,将二维数组 s的内容复制到 t申请的内存空间内,最后输出 t的第 5个元素(t4)和第 8个元素(t7),即为 3行 4列二维数组中的 s
29、10和 s13。s10是初始化列表中第二个大括号中的第一个值 4,而 s13应该是初始化列表中第二个大括号中的第 4个值,但没有这么多初始值,C 语言在这种情况下会自动将该元素设置为 0,即 s34=1,2,3,4,5,6, 7,8,9等价于 s34=1,2,3,0, 4,5,6,0),7,8,9,0。所以最后输出结果是 4,0,应该选择 B。13.以下各选项均为说明一种新的类型名,其中正确的是( )。(分数:1.00)A.typedef v1 int;B.typedef v1=int;C.typedef int v1; D.typedef v1=int;解析:解析 使用 typedef定义新
30、类型名的一般格式是:typedef旧类型名新类型名。选项A,int 是 C语言中已经有的类型名,不能再被定义成其他类型名,故不正确:选项 B的格式不正确;选项 C是将 v1定义成 int型,正确;选项 D格式不正确。所以,应该选择 C。14.有以下程序:main()int i=0,s=0;for(;)if(i=3|i=5) continue;if(i=6) break;i+;s+=i;printf (“%d/n“s);程序运行后的输出结果是( )。(分数:1.00)A.10B.13C.21D.程序进入死循环 解析:解析 本题程序中的 for循环省略了 for语句的 3个表达式,如果循环体中没有
31、 break语句的话则为死循环。循环中每次 i被增 1,当 i到 6时才能执行到 break语句跳出循环,但是当 i自增到 3的时候会执行 continue语句重新循环,此时后面的“i+;”语句执行不到,i 的值为 3一直没有改变,所以continue语句始终要执行,因此 for循环将一直循环下去,所以,4 个选项中选项 D符合题意。15.以下合法的赋值语句是( )。(分数:1.00)A.x=y=100B.d-; C.x+y;D.c=int(a+b);解析:解析 选项 A的结尾没用;,所以不是一条语句:选项 C中的表达式不会改变任何变量的内容,也不是合法的赋值语句;选项 D有语法错误,int
32、应该加上括号。所以,4 个选项中只有选项 B符合题意,运行后 d的内容被减一。16.以下程序中函数 scmp的功能是返回形参指针 s1和 s2所指字符串中较小字符串的首地址:#include stdio.h#include string.hchar *scmp (char *S1,char *s2)if(strcmp(s1,s2)0)return(s1);else return(s2);main()int i; char string20,str3 20;for(i=0;i3;i+) gets(stri);strcpy(string,scmp(str0,str1);/*库函数 strcpy对字
33、符串进行复制*/strcpy(string,scmp(string,str2);printf(“%s/n“,string);若运行时依次输入 abed、abba 和 abc三个字符串,则输出结果为( )。(分数:1.00)A.abedB.abba C.abcD.abca解析:解析 本题首先从键盘读入 3个字符串放到二维数组 str中,然后通过两次比较,每次把较小的字符串复制到字符数组 string中,所以执行完以后,string 中存放的是最小的字符串,输入的 3个字符串前两个字符都是“ab”,而第 3个字符e、b、c中b最小,所以最小字符串是“abba”,故应该选择 B。17.在深度为 5的
34、满二叉树中,叶子结点的个数为( )。(分数:1.00)A.31B.32C.16 D.15解析:解析 在二叉树的第 k层上,最多有 2k-1 (k1)个结点。对于满二叉树,每一层上的结点数都达到最大值,即在满二叉树的第 k层上有 2k-1个结点。所以,在深度为 5的满二叉树中,所有叶子结点在第5层上,即其结点数为 2k-1=25-1=16。18.下列属于不合法的 C语言整型常量的选项是( )。(分数:1.00)A.-32679B.0XabcC.069 D.3e2解析:解析 C 语言中,以 0开头的整型常量表示八进制数,而八进制数只能由O7八个字符组成,选项 C中出现了数字 9是错误的。故应该选择
35、 C。19.若有函数内部说明:int a34;则数组 a中各元素( )。(分数:1.00)A.可在程序的运行阶段得到初值 0B.可在程序的编译阶段得到初值 0C.不能得到确定的初值 D.可在程序的编译或运行阶段得到初值 0解析:解析 int a34定义了数组但未赋初值,系统为所定义的数组在内存中开辟了已连续的存储单元,但这些存储单元中没有确定的值。20.下列叙述中正确的是( )。(分数:1.00)A.黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征 B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述三种说法都不对解析:解析 黑盒测试完全
36、不考虑程序内部的逻辑结构和内部特性,只依据程序的需求和功能说明,检查程序的功能是否符合它的功能说明。所以 A为所选。21.下列叙述中正确的是( )。(分数:1.00)A.线性表是线性结构 B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构解析:解析 非空的数据结构满足下列两个条件则称为线性结构:有且只有一个根结点;每一个结点最多有一个前件,一个后件。栈与队列是特殊的线性表,因此,它们也是线性结构,选项 B错误;线性链表是线性表的链式存储结构,其对应的逻辑结构也是线性结构,而不是非线性结构,选项 C错误;二叉树是非线性结构,而不是线性结构,选项 D错误。22.在 C语言系统中,
37、假设 int类型数据占两个字节,则 double、long、unsigned int、char 类型数据所占字节数分别为( )。(分数:1.00)A.8,2,4,1B.2,8,4,1C.4,2,8,1D.8,4,2,1 解析:解析 在 C语言中,double 类型数据占 8个字节、long 型占 4个、unsigned int 和 int型一样占 2个、char 型占 1个。所以本题应该选择 D。23.下面程序段的执行结果可能为( )。main()int b=1,2,3),i;for(i=1;i=4;+i)printf(“%u/t“,bi);(分数:1.00)A.1 2 3 65516B.0
38、1 2 3C.2 3 65516 285 D.程序不能通过编译解析:解析 本题使用了一个 for循环输出 b1b4的值,由于数组 b定义时初始化列表只有 3个值,所以数组 b的长度为 3,下标范围是 02,故输出的前面两个数一定是 2和 3,后面的数就不能确定了,因为已经超出数组 b的范围。故正确答案为 C。24.以下程序的输出结果是( )。main()char c1=6,c1=0printf(“%d,%d,%d/n“,c1,c2,c1-c2);(分数:1.00)A.因输出格式不合法,输出出错信息 B.54,48,6C.6,0,7D.6,0,6解析:解析 因为 main()函数缺少左大括号,所
39、以编译无法通过。应该选择 A。25.若说明 int*p,n;则通过语句 scanf能够正确读入数据的程序段是( )。(分数:1.00)A.p=unsigned char c;u1;u1.c=A;printf(“%c/n“,u1.n);执行后输出结果是( )。(分数:1.00)A.产生语法错误B.随机值C.A D.65解析:解析 本题在定义共用体的同时,定义了一个共用体型变量 u1,共占两个字节,有两个成员 n和c,两个成员的首地址是相同的。因此给 u1.c赋一个 A,其实就是给无符号整型成员 u1.n的低字节赋一个 A,输出 u1.n的时候是以字符型的形式输出,只输出它的低地址的一个字节,因此
40、为 A。所以,C 选项为所选。27.若有如下程序段:int n=1O;while(1)n-;printf(“%d“;n);则 while循环执行的次数是( )。(分数:1.00)A.0B.1C.10D.无数 解析:解析 本题的 while循环条件为 1恒为真,所以是一个无限循环。应该选择答案 D。28.下列数据结构中,按先进后出原则组织数据的是( )。(分数:1.00)A.循环队列B.栈 C.顺序表D.循环链表解析:解析 循环队列是队列的一种顺序存储结构,队列是以先进先出为原则组织数据的一种特殊线性表,选项 A错误;栈足以先进后出为原则组织数据的一种特殊线性表,选项 B正确:顺序表是线性表的顺
41、序存储结构,选项 C错误;循环链表是一般线性表的一种链式存储结构,选项 D错误。29.设有以下语句:char a=3,b=6,C;c=a|b2;printf(“%d/n“,C);则 c的二进制值是( )。(分数:1.00)A.00011011 B.00010100C.00011100D.00011000解析:解析 因为左移运算符的优先级比位或运算符,要高,所以先计算 b2。而左移 n位在不溢出的前提下相当于乘以 2n,所以 b2=6*2 2=24。再计算 3|24=(00000011)2|(0001 1000)2=(0001 1011)2,故本题的正确答案是 A。30.若有如下程序:main(
42、)int k,x=0,y=0;for(k=0;k=2;k+)switch(k)case 0: X+;case 1: y+;case 2: X+;y+;printf(“%d,“d/n“,x,y);则程序运行后的输出结果是( )。(分数:1.00)A.3,3B.2,2C.4,5 D.2,3解析:解析 本题使用了一个 for循环,循环变量 k从 0递增到 2共循环 3次,循环体是一个 switch语句,第一次循环 k为 0,所以从 case 0:处开始执行,变量 x和 y都自增两次。然后分别从 case 1:和case 2:处执行,变量 x共自增两次,y 共自增 3次,所以最后输出的结果是 4,5。
43、故应该选择 C。31.结构化程序设计主要强调的是( )。(分数:1.00)A.程序的规模B.程序的易读性 C.程序的执行效率D.程序的可移植性解析:解析 结构化程序缩小了程序静态结构与动态执行之间的差异,使程序员能方便、正确地理解程序的功能。由此可见,结构化程序设计主要强调的是程序的易读性。32.将 E-R图转换到关系模式时,实体与联系都可以表示成( )。(分数:1.00)A.属性B.关系 C.键D.域解析:解析 把概念模型转换成关系数据模型就是把 E-R图转换成一组关系模式,每一个实体型转换为一个关系模式,每个联系分别转换为关系模式。33.以下正确的数组定义语句是( )。(分数:1.00)A
44、.int y14=1,2,3,4,5, ;B.float x3=l,2,3;C.long s23=1,1,21,2,3,;D.double t3=0 解析:解析 选项 A定义了一个 1行 4列的二维数组,只有 4个元素,而初始化列表有 5个初始值,所以不正确。定义二维数组时只能省略第二维的长度,选项 B省略的是第一维的长度,所以不正确。选项 C定义了一个 2行 3列的二维数组,但初始值列表中使用了 3个大括号,使行数超出定义范围,所以不正确。故正确答案是选项 D。34.若已定义 x和 y为 double类型,则表达式“x=1,y=x+3/2”的值是( )。(分数:1.00)A.1B.2C.2.
45、0 D.2.5解析:解析 在表达式中 3/2是一个整型表达式,它的运算结果应该为整型,值为 1。当变量 x与其相加时转换为双精度实型即 y=1.000000+1.000000=2.000000。所以,4 个选项中选项 C符合题意。35.下列程序执行后的输出结果是( )。void funcl(int i);void func2(int i);char st=“hello,friend!“;void funcl(int i)printf(“%C“,sti);if(i3)i+=2;func2(i); )void func2(int i)printf(“%c“,sti);if(i3)i+=2;func
46、1(i); main()int i=0;funcl(i);printf(“/n“); )(分数:1.00)A.hlmB.hlo C.helloD.he1解析:解析 本题定义了两个很相似的子函数互相调用,子函数首先输出 sti,然后判断 i是否小于3,是的话就让 i增 2后调用另一个子函数。在主函数中只调用了一次 funcl(0),funcl()输出 st0,然后调用 func2(2),func2()输出 st2,又调用 func1(4),此时 i不小于 3,所以 funcl()只输出 st4就返回了。故最终输结果为 h1o,正确答案为 B。36.以下有 4组用户标识符,其中合法的一组是( )。
47、(分数:1.00)A.for -sub caseB.4dDOSizeC.f2_G3IFabc D.WORDvoiddefine解析:解析 选项 A中 for和 case为 C语言中的保留字,不能作为用户标志符,故 A错误。选项 B中的4d其开头的第一个为数字,而在 C语言中规定,第一个字符必须为字母或者下划线,故 B错误;选项 D中 void为 C语言中的保留字,不能作为用户标志符,故 D错误。所以,4 个选项中选项 C符合题意。37.下列程序执行后的输出结果是( )#define MA(x) x*(x-1)main()int a=1,b=2;printf(“%d/n“,MA(1+a+b);(分数:1.00)A.5B.6C.7D.8 解析:解析 本题中的宏调用 MA(1+a+b)展开后的结果是 1+a+b*(1+a+b-1)=1+1+2*(1+1+2-1)=2+2*3=8。所以输出的结果是 8,选项 D正确。38.以下