1、二级 C语言笔试-444 及答案解析(总分:105.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.下列关于栈叙述正确的是_。A) 栈顶元素最先能被删除 B) 栈顶元素最后才能被删除C) 栈底元素永远不能被删除 D) 以上三种说法都不对(分数:2.00)A.B.C.D.2.下列叙述中正确的是 A) 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化 B) 在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化 C) 在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D) 上述三种说法都不对(分数:2.00)A.B.C.D.3.已知二叉树后序遍历序列是 C
2、DABE,中序遍历序列是 CADEB,它的前序遍历序列是( )。 A) ABCDE B) ECABD C) EACDB D) CDEAB(分数:2.00)A.B.C.D.4.下列数据结构中,能够按照“先进后出”原则取数据的是A) 循环队列 B) 栈C) 队列 D) 二叉树(分数:2.00)A.B.C.D.5.下列描述中,不是线性表顺序存储结构特征的是( )。A) 不便于插入和删除B) 需要连续的存储空间C) 可随机访问D) 需另外开辟空间来保存元素之间的关系(分数:2.00)A.B.C.D.6.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是A) 编辑软件
3、B) 操作系统C) 教务管理系统 D) 浏览器(分数:2.00)A.B.C.D.7.算法的有穷性是指A) 算法程序的运行时间是有限的B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的D) 算法只能被有限的用户使用(分数:2.00)A.B.C.D.8.需求分析阶段的任务是( )。A) 软件开发方法 B) 软件开发工具 C) 软件开发费用 D) 软件系统功能(分数:2.00)A.B.C.D.9.有以下程序:main()char a,b,c,d;scanf(“%c,%c,%d,%d“,a,printf(“%c,%c,%c,%c/n“,a,b,c,d);若运行时从键盘上输入:6,5,65
4、,66回车,则输出结果是 _。A) 6,5,A,B B) 6,5,65,66 C) 6,5,6,5 D) 6,5,6,6(分数:2.00)A.B.C.D.以下有 4组用户标识符,其中合法的一组是( )。AFOr-subCaseB4dDOSizeCf2_G3IFabcDWORDvoiddefine(分数:3.00)A.B.C.D.A.B.C.D.10.下列叙述中错误的是_。(A) 在数据库系统中,数据的物理结构必须与逻辑结构一致(B) 数据库技术的根本目标是要解决数据的共享问题(C) 数据库设计是指在已有数据库管理系统的基础上建立数据库(D) 数据库系统需要操作系统的支持(分数:2.00)A.B
5、.C.D.11.以下叙述中正确的是_。A) C程序中注释部分可以出现在程序中任何合适的地方B) 花括号“”和“”只能作为函数体的定界符C) 构成 C程序的基本单位是函数,所有函数名都可以由用户命名D) 分号是 C语句之间的分隔符,不是语句的一部分(分数:2.00)A.B.C.D.12.以下选项中不属于字符常量的是_。(A) C(B) “C“(C) /xCC(D) /072(分数:1.00)A.B.C.D.13.可在 C程序中用作用户标识符的一组标识符是A) and2007B) Datey-m-dC) HiDr.TomD) caseBigl(分数:1.00)A.B.C.D.14.有以下程序:#i
6、ncludestdio.hmain()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1: b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%d/n“,a,b);程序的运行结果是_。A) a=1,b=0 B) a=2,b=2 C) a=1,b=1 D) a=2,b=1(分数:2.00)A.B.C.D.15.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转存到链表的各个结点中,请为下划线处选择正确的选项。#include
7、stdlib. h stuct nodechar data; struct node * next; ;( ) CreatList(char * s)struet node * h, * p, * q;h = (struet node * ) maloc(sizeof(struct node) );p=q=h;while( * s! =/0)p = ( struct node * ) maloc ( sizeof( struct node) );p- data= *s; q- next=p; q=p;s+;p- next =/0;return hmain( )char str = “link
8、list“;struet node * head;head = CreatList (str);A) char * B) struet node C) struct node * D) char(分数:1.00)A.B.C.D.16.下列程序的输出结果是_。#define A 100main()int i=0,sum=0;do if(i(i/2)*2)continue;sum+=i;while(+iA);print(“%d/n“,sum);A) 2500 B) 2050 C) 4 D) 0(分数:1.00)A.B.C.D.17.有以下程序:#includestdio.hmain( )char
9、a, b, c, d;scanf(“%c%c“, c=getchar(); d=getchar();printf(“%c%c%c%c/n“, a, b, c, d);当执行程序时,按下列方式输入数据(从第一列开始,CR代表回车,注意:回车也是一个字符):12CR34CR则输出结果是A) 1234B) 12C) 123D)1234(分数:1.00)A.B.C.D.若变量均已正确定义并赋值,以下合法的 C语言赋值语句是( )。Ax=y=5; Bx=n%2.5;Cx+n=i: Dx=5=4+1;(分数:2.00)A.B.C.D.A.B.C.D.18.请读程序:#include stdio.h#def
10、ine SUB(X,Y) (X)*Ymain()int a=3,b=4;printf(“%d/n“,SUB(a+,b+);上面程序的输出结果是( )。A) 12 B) 15 C) 16 D) 20(分数:1.00)A.B.C.D.19.假定所有变量均已正确说明,下列程序段运行后 x的值是( )。a=b=c=0;x=12;if(!A) x-;else x=5;if(C) x=3;else x=4;A) 11 B) 4 C) 12 D) 3(分数:2.00)A.B.C.D.20.有以下程序main()int a=666 , b=888 ;printf(“%d/n“,a,b);程序运行后的输出结果是
11、_。A) 错误信息 B) 666 C) 888 D) 666,888(分数:1.00)A.B.C.D.21.数字字符 0的 ASCII值为 48,若有以下程序main()char a=1,b=2;printf(“%c,“,b+);printf(“%d/n“,b-a);程序运行后的输出结果是_。(A) 3,2(B) 50,2(C) 2,2(D) 2,50(分数:2.00)A.B.C.D.22.下列条件语句中,功能与其他语句不同的是( )。A) if(a) printf(“%d /n“ ,x); else printf(“% d /n“ ,y);B) if(a =0) printf( “% d /
12、n“ ,y); else printf( “% d /n“ ,x);C) if (a! =0) printf(“%d /n“,x); else printf(“%d /n“,y); ,D) if(a=O) printf(“%d /n“,x); else printf(“%d /n“,y);(分数:1.00)A.B.C.D.23.判断 char型变量 c1是否为小写字母的正确表达式为( )。A) a=c1=zB) (c1=A) (c1=z)C) (a=c1(z=c1)D) (c1=a)c=a(b2) ;执行后,C 的值为( )。A) 6 B) 7 C) 8 D) 9(分数:2.00)A.B.C.
13、D.26.以下程序输出正确的是_。amovep(int *pint(*a) 3int n)int i,j;for(i=0;in;i+)for(j=0;jn;j+) *p=aij;p+;main()int *p,a33=1,3,5,2,4,6;p=(int*)malloc(100);amovep(p,a,3);printf(“%d%d/n“,p2p5;free(p);A) 56 B) 25 C) 34 D) 程序错误(分数:2.00)A.B.C.D.27.字符(char)型数据在微机内存中的存储形式是_。A) 反码 B) 补码 C) EBCDIC 码 D) ASC码(分数:2.00)A.B.C.
14、D.28.有以下函数:fun(char *a, char *b) while(*a!=/0)b+;return(*a-*b);该函数的功能是_。A) 计算 a和 b所指字符串的长度之差B) 将 b所指字符串连接到 a所指字符串中C) 将 b所指字符串连接到 a所指字符串后面D) 比较 a和 b所指字符串的大小(分数:2.00)A.B.C.D.29.设有定义:char p1,2,3,*qp;,以下不能计算出一个 char型数据所占字节数的表达式是_。A) sizeof(p) B) sizeof(char) C) sizeof(*q) D) sizeof(p0)(分数:2.00)A.B.C.D.3
15、0.字符串“/“ABCDEF/“/“的长度是( )。A) 15 B) 10 C) 7 D) 8(分数:1.00)A.B.C.D.31.下列能正确进行字符串赋值的是( )。A) char s5=“ABCDE“; B) char s5=A,B,C,D,E;C) char*s;s=“ABCDE“; D) char*s; printf(“%s“,s);(分数:2.00)A.B.C.D.32.下列程序的运行结果是( )。#includestdio.hvoid fun(int*s,int*p)static int t=3;*p=st;t-;void main()int a=2,3,4,5,k;int x;
16、for(k=0;k4;k+)fun(a, int num1; double num2; t1, t2;,若变量均已正确赋初值,则以下语句中错误的是_。A) t1=t2; B) t2.num1=t1.num1;C) t2.mark=t1.mark; D) t2.num2=t1.num2;(分数:1.00)A.B.C.D.34.设有如下的程序段:char str=“Hello“;char *ptr;ptr=str;执行完上面的程序段后,*(ptr+5)的值为( )。A) o B) /0 C) 不确定的值 D) o的地址(分数:1.00)A.B.C.D.35.假定 int类型变量占用两个字节,若有定
17、义:int x100,2,4;,则数组 x在内存中所占字节数是_。A) 3 B) 6 C) 10 D) 20(分数:2.00)A.B.C.D.36.以下程序运行后的输出结果是#includestdio.hmain()int a=5, b=1, t;t=(a2)|b); printf(“%d/n“, t);A) 21 B) 11 C) 6 D) 1(分数:2.00)A.B.C.D.37.设有说明语句如下:static char str=“Beijing“;若执行下列输出语句:printf(“%d/n“,strlen(strcpy(str,“China“);则输出结果为( )。A) 5 B) 7
18、C) 12 D) 14(分数:1.00)A.B.C.D.38.若要用函数 fopen打开一个新的二进制文件,该文件要既能读也能写,则应以哪种方式打开文件( )。A) “wb“ B) “wb+“ C) “rb+“ D) “rb/(分数:2.00)A.B.C.D.二、填空题(总题数:15,分数:36.00)39.栈中允许进行插入和删除的一端叫做 1。(分数:2.00)填空项 1:_40.在两种基本测试方法中, 1 测试的原则之一是保证所测模块中每一个独立路径至少执行一次。(分数:2.00)填空项 1:_41.数据库系统的三级模式分别为U /U模式、内部级模式与外部级模式。(分数:2.00)填空项
19、1:_42.与结构化需求分析方法相对应的是U /U方法。(分数:2.00)填空项 1:_43.软件是程序、数据和 1 的集合。(分数:2.00)填空项 1:_44.若有定义语句:int a=5;,则表达式 a+的值是 1。(分数:2.00)填空项 1:_45.用以下语句调用库函数 malloc,使字符指针 st指向具有 11字节的动态存储空间,请填空。st=(char*)_。(分数:4.00)填空项 1:_46.有以下程序:#includestdio.hmain()int a=1,b=2,c=3,d=0;if(a=1)if(b1=2)if(c=3) d=1;else d=2;else if(c
20、!=3) d=3;else d=4;else d=5;printf(“%d/n“,d);程序运行后的输出结果是_。(分数:4.00)填空项 1:_47.下列程序的输出结果是_。main()int a=1,b=2,c=3,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);(分数:2.00)填空项 1:_48.下列程序的运行结果是_。#includestdio.hmain()int a, b,c,n;a=2;b=0;c=1;n=1;while(n=3)c=c*a;b=b+ c;+n;printf(“b=%d“,
21、 B) ;(分数:2.00)填空项 1:_49.下列程序的输出结果是U /Uint t(intx,inty,int cp,int dp)cp=x*x+y*y;dp=x*x-y*y;main()int, a=4,b=3,c=5,d=6;t(a,b,c,d);printf(“%d %d/n“,c,d);(分数:2.00)填空项 1:_50.有以下程序:#includestdio.hmain()int f,f1,f2,i;f1=0;f2=1printf(“%d%d“,f1,f2);for(i=3;i=5;i+)f=f1+f2;printf(“%d“,f);f1=f9;f2=f;printf(“/n“
22、);程序运行后的输出结果是_。(分数:4.00)填空项 1:_51.设有定义:struct personint ID;char name12;p;请将 scanf(“%d“,_);语句补充完整,使其能够为结构体变量 p的成员 ID正确读入数据。(分数:2.00)填空项 1:_52.下列程序的输出结果是_。#includeStdio.hint fun(int x)int p;if(x=0x=1)return 3;elsep=x-fun(x-2);return p;void main()printf(“/n%d“,fun(11);(分数:2.00)填空项 1:_53.若给 fun函数的形参 s传送
23、字符串“6354abc“(其中表示空格字符),则函数的返回值是U /U。long fun(char s)long n; int sign;for(;isspace(*s);s+);sign=(*s=-)? -1:1;if(*s=+|*s=-) s+;for(n=0;isdigit(*s);s+)n=10*n+( *s-0);return sign*n;(分数:2.00)填空项 1:_二级 C语言笔试-444 答案解析(总分:105.00,做题时间:90 分钟)一、选择题(总题数:40,分数:69.00)1.下列关于栈叙述正确的是_。A) 栈顶元素最先能被删除 B) 栈顶元素最后才能被删除C)
24、栈底元素永远不能被删除 D) 以上三种说法都不对(分数:2.00)A. B.C.D.解析:解析 本题考查的知识点是栈的特点。栈是限定只在一端进行插入与删除的线性表,按照“先进后出”或“后进先出”的原则组织数据的。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即本题的答案为 A。2.下列叙述中正确的是 A) 在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化 B) 在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化 C) 在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 D) 上述三种说法都不对(分数:2.0
25、0)A.B.C. D.解析:解析 本题考查栈的工作原理。栈是一种特殊的线性表,遵循先进后出的原则。在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化。选项 C正确。3.已知二叉树后序遍历序列是 CDABE,中序遍历序列是 CADEB,它的前序遍历序列是( )。 A) ABCDE B) ECABD C) EACDB D) CDEAB(分数:2.00)A.B.C. D.解析:解析由于后序遍历的最后一个元素为 E,所以 E为根结点,所以它的前序遍历的首个元素为 E,故排除 A)和 D)选项。由于中序遍历中,元素 B在元索根结点 E的后面,所以 B为二叉树的右子树,并且该二叉树右子树只有一个元素
26、,所以前序遍历的最后一个元素应为 B,故选项 C)为正确选项,即该二叉树的前序遍历序列是 EACDB。4.下列数据结构中,能够按照“先进后出”原则取数据的是A) 循环队列 B) 栈C) 队列 D) 二叉树(分数:2.00)A.B. C.D.解析:解析 栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插人的元素,也是最后才能被删除的元素。栈是按照“先进后出”或“后进先出”的原则组织数据的。5.下列描述中,不是线性表顺序存储结构特征的是( )。A) 不便于插入和删除B) 需要连续的存储空间C)
27、 可随机访问D) 需另外开辟空间来保存元素之间的关系(分数:2.00)A.B.C.D. 解析:解析 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此,不需要另外开辟空间来保存元素之间的关系。6.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是A) 编辑软件 B) 操作系统C) 教务管理系统 D) 浏览器(分数:2.00)A.B. C.D.解析:解析 编辑软件、教务管理软件属于应用软件,操作系统属于系统软件,浏览器属于支撑软件,故本题答案选 B。7.
28、算法的有穷性是指A) 算法程序的运行时间是有限的B) 算法程序所处理的数据量是有限的C) 算法程序的长度是有限的D) 算法只能被有限的用户使用(分数:2.00)A. B.C.D.解析:解析 算法具有:有穷性。一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的。确定性。算法中每一条指令必须有确切的含义,读者理解时不会产生歧义。可行性。一个算法是可行的,即算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。输入。一个算法有 0个或多个输入,这些输入取自于某个特定的对象的集合。输出。一个算法有一个或多个输出。8.需求分析阶段的任务是
29、( )。A) 软件开发方法 B) 软件开发工具 C) 软件开发费用 D) 软件系统功能(分数:2.00)A.B.C.D. 解析:解析 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。9.有以下程序:main()char a,b,c,d;scanf(“%c,%c,%d,%d“,a,printf(“%c,%c,%c,%c/n“,a,b,c,d);若运行时从键盘上输入:6,5,65,66回车,则输出结果是 _。A) 6,5,A,B B) 6,5,65,66 C) 6,5,6,5 D)
30、6,5,6,6(分数:2.00)A. B.C.D.解析:解析 char 型数据类型以%d 的形式输入时,输入的是 ASCII值。65 是字符 A的 ASCII码值,66是字符 B的 ASCII值。以下有 4组用户标识符,其中合法的一组是( )。AFOr-subCaseB4dDOSizeCf2_G3IFabcDWORDvoiddefine(分数:3.00)A.B.C. D.解析:解析 在 C语言中,标识符由字母、数字和下画线组成,其中开头必须是字母或下画线,排除选项 A和 B。C 语言中还规定标识符不能为 C语言的关键字,而选项 D中的 void为关键字。A.B.C. D.解析:解析 本题考查的
31、是二维数组的定义和初始化方法。C 语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度。故选项 C) 错误。10.下列叙述中错误的是_。(A) 在数据库系统中,数据的物理结构必须与逻辑结构一致(B) 数据库技术的根本目标是要解决数据的共享问题(C) 数据库设计是指在已有数据库管理系统的基础上建立数据库(D) 数据库系统需要操作系统的支持(分数:2.00)A. B.C.D.解析:11.以下叙述中正确的是_。A) C程序中注释部分可以出现在程序中任何合适的地方B) 花括号“”和“”只能作为函数体的定界符C) 构成 C程序的基本单位是函数,所有函数名都可以由用户命名D
32、) 分号是 C语句之间的分隔符,不是语句的一部分(分数:2.00)A. B.C.D.解析:解析 花括号“”和“”不仅可以作为函数体的定界符,而且可以作为复合语句的定界符,选项 B错误;main()函数不可以由用户命名,选项 C错误;分号是 C语句的结束符,是构成 C语句的必要组成部分,选项 D错误。12.以下选项中不属于字符常量的是_。(A) C(B) “C“(C) /xCC(D) /072(分数:1.00)A.B. C.D.解析:13.可在 C程序中用作用户标识符的一组标识符是A) and2007B) Datey-m-dC) HiDr.TomD) caseBigl(分数:1.00)A. B.
33、C.D.解析:解析 在 C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下画线 3种字符组成,且第一个字符必须为字母或下画线。C 语言的标识符可以分为关键字、预定义标识符和用户标识符。选项B) 和 C) 中的横线以及点都不合法,选项 D) 中的 case为 C语言关键字。14.有以下程序:#includestdio.hmain()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1: b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“a=%d,b=%d/n
34、“,a,b);程序的运行结果是_。A) a=1,b=0 B) a=2,b=2 C) a=1,b=1 D) a=2,b=1(分数:2.00)A.B.C.D. 解析:解析 本题考查 switch语句。x=1,因此第一个 switch语句是执行 case 1:后面的语句,进入嵌入的 switch语句;y=0,执行 case 0:后面的语句,得 a=1,遇到 break语句退出嵌入的 switch语句。由于第一个 switch语句的 case 1:后面没有 break语句,因此继续执行 case 2:后面的语句,得a=2,b=1,遇到 break语句退出第一个 switch语句。结果为 a=2,b=1
35、。15.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转存到链表的各个结点中,请为下划线处选择正确的选项。#include stdlib. h stuct nodechar data; struct node * next; ;( ) CreatList(char * s)struet node * h, * p, * q;h = (struet node * ) maloc(sizeof(struct node) );p=q=h;while( * s! =/0)p = ( struct node * ) maloc ( sizeof( struct node) )
36、;p- data= *s; q- next=p; q=p;s+;p- next =/0;return hmain( )char str = “link list“;struet node * head;head = CreatList (str);A) char * B) struet node C) struct node * D) char(分数:1.00)A.B.C. D.解析:解析 本题要求建立一个 struct node类型的数据链表,从 main函数可知,h 是“头指针”变量,它指向所建立的表的第一个数据,函数的类型应该与 h的类型一致,所以应该填 street node *。16
37、.下列程序的输出结果是_。#define A 100main()int i=0,sum=0;do if(i(i/2)*2)continue;sum+=i;while(+iA);print(“%d/n“,sum);A) 2500 B) 2050 C) 4 D) 0(分数:1.00)A. B.C.D.解析:评析 本题程序的功能是求 1到 99之间(包括 1和 99)所有奇数之和。程序中的 while循环的终止条件为+i=100,在 while 循环体内,如果 i是偶数,则执行 continue,跳过这一次循环,执行下次循环,否则求和。最后输出的值是 1到 99 之间(包括 1和 99)所育奇数之和
38、(1+99)*50/2=2500。17.有以下程序:#includestdio.hmain( )char a, b, c, d;scanf(“%c%c“, c=getchar(); d=getchar();printf(“%c%c%c%c/n“, a, b, c, d);当执行程序时,按下列方式输入数据(从第一列开始,CR代表回车,注意:回车也是一个字符):12CR34CR则输出结果是A) 1234B) 12C) 123D)1234(分数:1.00)A.B.C. D.解析:解析 采用%c 格式描述输入数据时,输入“12CR”中的 12,被视为“1”和“2”字符,分别送入变量 a、b 中;“回车
39、键”作为字符由 getchar()函数读取送到变量 c中;输入“34CR”中的 34也被视为“3”和“4”字符,由 getchar()函数读取一个字符“3”送到变量 d中。若变量均已正确定义并赋值,以下合法的 C语言赋值语句是( )。Ax=y=5; Bx=n%2.5;Cx+n=i: Dx=5=4+1;(分数:2.00)A.B.C. D.解析:解析 用树形结构表示实体之间联系的模型是层次模型。A. B.C.D.解析:解析 求余运算符“%”两侧的运算对象都应当是整型数据,所以选项 B错误。因为赋值运算符左侧的操作数必须是一个变量,所以选项 C和 D是错误的。18.请读程序:#include std
40、io.h#define SUB(X,Y) (X)*Ymain()int a=3,b=4;printf(“%d/n“,SUB(a+,b+);上面程序的输出结果是( )。A) 12 B) 15 C) 16 D) 20(分数:1.00)A. B.C.D.解析:解析 本题的考查点是宏定义。a+的形式应当先使用 a值,然后 a才进行自加 1运算,所以程序在进行 SUB()乘法运算的时候,仍取 a,b 的原值,最后输出的结果是 12。19.假定所有变量均已正确说明,下列程序段运行后 x的值是( )。a=b=c=0;x=12;if(!A) x-;else x=5;if(C) x=3;else x=4;A)
41、11 B) 4 C) 12 D) 3(分数:2.00)A.B. C.D.解析:解析 本题考查 if else语句。第一个 if语句,先判断条件,发现 a=0,则!a 成立,执行下列的语句,x-,得 x=11;第二个 if语句,判断条件,发现 c=0,则条件不成立,执行下列的 else语句,得x=4。20.有以下程序main()int a=666 , b=888 ;printf(“%d/n“,a,b);程序运行后的输出结果是_。A) 错误信息 B) 666 C) 888 D) 666,888(分数:1.00)A.B. C.D.解析:解析 本题考查了 printf的用法,在 printf后面的控制
42、字符只有一个输出,因此,程序在编译的时候直接忽略了 b,最终的输出结果是 a的值。21.数字字符 0的 ASCII值为 48,若有以下程序main()char a=1,b=2;printf(“%c,“,b+);printf(“%d/n“,b-a);程序运行后的输出结果是_。(A) 3,2(B) 50,2(C) 2,2(D) 2,50(分数:2.00)A.B.C. D.解析:22.下列条件语句中,功能与其他语句不同的是( )。A) if(a) printf(“%d /n“ ,x); else printf(“% d /n“ ,y);B) if(a =0) printf( “% d /n“ ,y)
43、; else printf( “% d /n“ ,x);C) if (a! =0) printf(“%d /n“,x); else printf(“%d /n“,y); ,D) if(a=O) printf(“%d /n“,x); else printf(“%d /n“,y);(分数:1.00)A.B.C.D. 解析:解析 选项 A)的语句表示若 a非 0,则输出 x的值,否则输出 y的值;选项 B)的语句表示如果 a等于 o,则输出 y的值,否则输出 x的值,与选项 A)等价;选项 C)的语句表示如果 a不等于 0,则输出x,否则输出 y,与选项 A)、B)相同;选项 D)的语句表示如果 a
44、为 0,则输出 x,否则输出 y,与前三个选项都不同。23.判断 char型变量 c1是否为小写字母的正确表达式为( )。A) a=c1=zB) (c1=A) (c1=z)C) (a=c1(z=c1)D) (c1=a)c=a(b2) ;执行后,C 的值为( )。A) 6 B) 7 C) 8 D) 9(分数:2.00)A.B.C.D. 解析:解析 变量 b的初值等于 2,所以表达式 b2 表示 b的值二进制左移两位,即扩大 4倍,所以变量 b的等于 8。然后与 a的值 1进行异或运算,得 9。26.以下程序输出正确的是_。amovep(int *pint(*a) 3int n)int i,j;f
45、or(i=0;in;i+)for(j=0;jn;j+) *p=aij;p+;main()int *p,a33=1,3,5,2,4,6;p=(int*)malloc(100);amovep(p,a,3);printf(“%d%d/n“,p2p5;free(p);A) 56 B) 25 C) 34 D) 程序错误(分数:2.00)A. B.C.D.解析:评析 本题 main函数中定义了指针 p和二维数组 a,通过函数 amovep将数组的值存入指针 p所指向的存储单元中,a 的各元素分别为:a00=1,a01=3,a02=5,a20,a21=0,a22=0。通过 mallo()函数绐指针分配内存空
46、间,free()函数用于释放指针变量所用内存空间。在主函数中通过 amovep(p,a,3)调用函数 amovep,使得实参 p与形参 p,实参数组 a与形参中指向数组的指针变量共用同存储空间。最后输出 p2,p5为 56。27.字符(char)型数据在微机内存中的存储形式是_。A) 反码 B) 补码 C) EBCDIC 码 D) ASC码(分数:2.00)A.B.C.D. 解析:评析 将个字符常量放到个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的 ASCII码值放到存储单元中。28.有以下函数:fun(char *a, char *b) while(*a!=/0)b+;return(*a-*b);该函数的功能是_。A) 计算 a和 b所指字符串的长度之差B) 将 b所指字符串连接到 a所指字符串中C) 将 b所指字符串连接到 a所指字符串后面D) 比较 a和 b所指字符串的大小(分数:2.00)A.B.C.D. 解析:解析 它的功能是比较 a,b 所指字符串的大小。ab 返回正数,ab 返回负数,a=b 返同 0。29.设有定义:char p1,2,3,*qp;,以下不能计算出一个 char型数据所占字节数的表达式是_。A) sizeof(p) B) sizeof(char) C)