1、二级 C语言笔试-47 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.有以下程序main()iht m=3,n=r,x;x=-m+;X=x+8/+n;printf(“%d/n“,x);程序运行后的输出结果是(分数:1.00)A.3B.5C.-1D.-22.有以下程序main()int x=1,3,5,7,2,4,6,0,i,j,k;for(i=0;i3;i+)for(j=2;ji;j-)if(xj+1xj) k=xj;xj=xj+1;xj+1=k;for(i=0;i3;i+)for(j=4;j7-i;j+)if(xjxj+1) k=xj;
2、xj;xj+1;xj+1=k;for(i=0;i8;i+)printf(“%d“,xi);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.75310246B.01234567C.76310462D.135702463.有以下程序main()char str10=“China“,“Beijing“,*p=str;printf(“%s/n“,p+10);程序运行后的输出结果是(分数:1.00)A.ChinaB.BeijingC.ngD.ing4.已有定义:int i,a10,*p;,则合法的赋值语句是(分数:1.00)A.p=100;B.p=a5;C.p=a2+2;D.p=a
3、+2;5.在数据库的两级映射中,从概念模式到内模式的映射一般由()实现。(分数:1.00)A.数据库系统B.数据库管理系统C.数据库管理员D.数据库操作系统6.设有以下定义和语句int a32=1,2,3,4,5,6,*p3;p0=a1;则*(p0+1)所代表的数组元素是(分数:1.00)A.a01B.a10C.a11D.a127.有以下程序main()char a,b,c,d;seanf(“%c,%c,%d,%d“,printf(“%c,%c,%c,%c/n“,a,b,c,d) ;若运行时从键盘上输入:6,5,65,66回车。则输出结果是(分数:1.00)A.6,5,A,BB.6,5,65,
4、66C.6,5,6,5D.6,5,6,68.以下能正确定义二维数组的是(分数:1.00)A.int a3;B.int a3=2*3;C.int a3=;D.int a23=1,2,3,4;9.在函数调用过程中,如果函数 funA调用了函数 funB,函数 funB又调用了函数 funA,则(分数:1.00)A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C语言中不允许这样的递归调用10.下列关于栈的叙述中,正确的是(分数:1.00)A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表11.有以下定义语句double a,b;
5、 int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是(分数:1.00)A.a=a+b=b+B.w%(int)a+b)C.(c+w)%(int)aD.w=a=b;12.设有下列二叉树:(分数:1.00)A.B.C.D.13.有以下程序main()unsigned int a;int b=-1;a=b;printf(“%u“,(分数:1.00)A.;i3;i+)switch(i)case0:printf(“%d“,i);case2:printf(“%d“,i);default:printf(“%d“,i);程序运行后的输出结果是(分数:1.00)A.022111B.0210
6、21C.000122D.01223.若 x和 y代表整型数,以下表达式中不能正确表示数学关系|x-y|10 的是(分数:1.00)A.abs(x-y)10B.x-y-10;以下选项中引用结构体变量成员的表达式错误的是(分数:1.00)A.(p+)-numB.p-numC.(*p)numD.stu3age26.有以下程序main()int a=3,b=4,c=5,d=2;if(ab) if(bc) printf(“%d“,d+1);elseprintf(“%d“,+d+1);printf(“%d/n“,d) ;程序运行后的输出结果是(分数:1.00)A.2B.3C.43D.4427.没有定义语句
7、int x6=2,4,6,8,5,7,*p=x,i;要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是(分数:1.00)A.for(i=0;i6;i+) printf(“%2d“,*(p+);B.for(i=0;i6;i+) printf(“%2d“,*(p+i);C.for(i=0;i6;i+) printf(“%2d“,*p+);D.for(i=0;i6;i+) printf(“%2d“,(*p)+);28.(48)(50)题以下程序的功能是:建立一个带布头结点的单向链表,并将存储在数组中的字符依次存储到链表的各个结点中,请从与下划线处号码对应的一组选项中选择出正确的选项#inc
8、lude stdlibhstruct nodechar data; struct node *next;(48) CreatList(char*s),struct node *h,*p,*q;h=(struct node*)malloc(sizeof(struct node);p=q=h;while(*s!=“/0“)p=(struct node*)malloc(sizeof(struct node);p-data= (49) ;q-next=p;q= (50) ;s+;p-next=“/0“;return h;main()char str=“link list“;struct node*he
9、ad;head=CreatList(str);(分数:1.00)A.char*B.struct nodeC.struct node*D.char29.在关系数据模型中,通常可以把()称为属性,其值称为属性值。(分数:1.00)A.记录B.基本表C.模式D.字段30.有以下程序main()char s=“Yse/n/No“,*ps=s;puts(ps+4);*(ps+4)=0;puts(s);程序运行后的输出结果是(选项 D中的第一行是空行)(分数:1.00)A.n/No Yes /NoB./NoYesC.n/Noyes /NoD./NoYes31.有以下程序void fun(int*a,int
10、 i,int j)int t;if(ij)t=ai;ai=aj;aj=t;i+; j-;fun(a,i,j);main()int x=2,6,1,8,i;fun(x,0,3);for(i=0;i4;i+) printf(“%2d“,xi);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.1 2 6 8B.8 6 2 1C.8 1 6 2D.8 6 1 232.支持数据库各种操作的软件系统叫做(分数:1.00)A.数据库管理系统B.文件系统C.数据库系统D.操作系统33.有以下程序int f(int(分数:1.00)A.Printf(“%d/n“,a,b) ;程序运行后的输
11、出结果是(分数:1.00)A.错误信息B.666C.888D.666,88838.以下叙述中正确的是(分数:1.00)A.局部变量说明为 static存储类,其生存期将得到延长B.全局变量说明为 static存储类,其作用域将被扩大C.任何存储类的变量在未赋初值时,其值都是不确定的D.形参可以使用的存储类说明符与局部变量完全相同39.函数重载是指(分数:1.00)A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同C.两个以上的函数名字不同,但形参的个数或类型相同D.两个以上的函数取相同的函数名,并且函数的返回类
12、型相同40.下列条件语句中,功能与其他语句不同的是(分数:1.00)A.if(A) printf(“%d/n“,x); else printf(“%d/n/B.if(a=0) 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);41.用 C语言编写的代码程序(分数:2.00)A.可立即执行B.是一个源程序C.经过编译即可执行D.经过编译解释才能执行42.有以下程序 #
13、includestdiohmain()int a=1,2,3,4,5,6,7,8,9,10,11,12,*p=a+5,*q=NULL;*q= *(p+5);printf(“%d %d/n“,*p,*q);程序运行后的输出结果是(分数:2.00)A.运行后报错B.6 6C.6 11D.5 1043.(分数:2.00)A.*sB.sC.*s+D.(*s)+44.以下定义语句中正确的是(分数:2.00)A.char a=Ab=B;B.float a=b=10.0;C.int a=10,*b=fprintf(fp1,“abc“);fclose(fp1);若文本文件 f1txt 中原有内容为:good,
14、则运行以上程序后文件 f1txt 中的内容为(分数:2.00)A.goodabcB.abcdC.abcD.abcgood46.若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是(分数:2.00)A.for(i=1,p=1;i5;i+) p*=i;B.for(i=1;i5;i+) p=1; p*=i;C.i=1;p=1;while(i5)p*=i; i+;D.i=1;p=1;dop*=i; i+; while(i5);47.下列选项中,不能用作标识符的是(分数:2.00)A._1234_B._1_2C.int_2_D.2_int_48.下面不属于软件设计原则的是(分数:2.
15、00)A.抽象B.模块化C.自底向上D.信息隐蔽49.有以下程序main()int i=0,s=0;for(;)if(i=3i=5) continue;if(i=6) break;i+;s+=i;printf(“%d/n“,s);程序运行后的输出结果是(分数:2.00)A.10B.13C.24D.程序进入死循环50.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是(分数:2.00)A.c1c2B.c1 int k;p1=a; p2=b;for(k=0;k7;k+)if(*(p1+k)=*(p2+k)printf(“%c“,*(p1+k);(分数:2.00)填空项 1:
16、_62.以下程序运行后的输出结果是 【12】 。main()char a=“123456789“,*p; int i=0;p=a;while(*p)if(i%2=0) *p=*;p+;i+;puts(A) ;(分数: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.以下程序通过函数 SunFun求 (分数:4.00)填空项 1:_65.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算
17、它们之和。请填空。main()int i,a20,sum,count;sum=count=0;for(i=0;i20;i+) scanf(“%d“, 【16】 );for(i=0;i20;i+)if(ai0) count+;sum+= 【17】 ;printf(“sum=%d,count=%d/n“,sum,count);(分数:4.00)填空项 1:_66.以下程序中,函数 SumColumMin的功能是:求出 M行 N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。#define M 2#define N 4void SumColumMin(int aM
18、N,int *sum)int i,j,k,s=0;for(i=0;iN;i+)k=0;for(j=1;jM;j+)if(akiaji)k=j;s+= 【18】 ;【19】 =s;main()int xMN=3,2,5,1,4,1,8,3,s;SumColumMin( 【20】 );printf(“%d/n“,s);(分数:6.00)填空项 1:_二级 C语言笔试-47 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.有以下程序main()iht m=3,n=r,x;x=-m+;X=x+8/+n;printf(“%d/n“,x);程序运行后的输
19、出结果是(分数:1.00)A.3B.5C.-1D.-2 解析:解析主函数中首先定义了整型变量 m、n 和 x,并给 m和 n赋初值为 3和 4,接着执行两条赋值语句,第一条 x=-m+等价于 x=-(m+),其值即为-3,第二条 x=x+ 8/+n等价于 x=x+8/(+n),即为 x=-3+8/5=-2,因此最后输出 x的值为-2。2.有以下程序main()int x=1,3,5,7,2,4,6,0,i,j,k;for(i=0;i3;i+)for(j=2;ji;j-)if(xj+1xj) k=xj;xj=xj+1;xj+1=k;for(i=0;i3;i+)for(j=4;j7-i;j+)if
20、(xjxj+1) k=xj;xj;xj+1;xj+1=k;for(i=0;i8;i+)printf(“%d“,xi);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.75310246 B.01234567C.76310462D.13570246解析:解析主函数中定义了一个整型数组 x,并初始化。接着执行了一个二重 for 循环,在该二重循环的作用是将数组的前 4个元素按从大到小排序,接着用了一个二重循环(也是冒泡算法)将数组的后 4个元素按从小到大的顺序排序,故最后依次输出数组各元素的值为 75310246。3.有以下程序main()char str10=“China“,
21、“Beijing“,*p=str;printf(“%s/n“,p+10);程序运行后的输出结果是(分数:1.00)A.ChinaB.Beijing C.ngD.ing解析:解析本题中首先定义了一个字符串数组并初始化,初始化后使得 str0 =“China”,str1=“Beijing”,然后定义一个指针变量 p并让其指向 str,而在该二维数组中定义每个字符串的长度为10,所以 p+10将指向 str1,因此最后输出*(p+10)的值为 Beijing。4.已有定义:int i,a10,*p;,则合法的赋值语句是(分数:1.00)A.p=100;B.p=a5;C.p=a2+2;D.p=a+2;
22、 解析:解析本题中定义了一个整型数组 a和一个整型指针变量 p。选项 A中将一个整型数赋值给一个指针变量,C 语言规定,只能将地址赋给指针指针变量;选项 B中 a 5为一数组元素,同样不是一个地址;选项 C中 a2为一数组元素,同样是一个整型数据,不是个地址;选项 D中数组名 a代表数组首地址加2,代表第三个元素的地址。5.在数据库的两级映射中,从概念模式到内模式的映射一般由()实现。(分数:1.00)A.数据库系统B.数据库管理系统 C.数据库管理员D.数据库操作系统解析:解析从概念模式到内模式的映射一般由数据库管理系统(DBMS)实现。6.设有以下定义和语句int a32=1,2,3,4,
23、5,6,*p3;p0=a1;则*(p0+1)所代表的数组元素是(分数:1.00)A.a01B.a10C.a11 D.a12解析:解析本题中首先定义了一个 3行 2列的数组 a,一个长度为 3的指针数组 p,接着把地址 a1赋给 p0此时 p0为 a10的地址,p0+1 为 a11的地址,故*(P0+1)代表的元素为 a11。7.有以下程序main()char a,b,c,d;seanf(“%c,%c,%d,%d“,printf(“%c,%c,%c,%c/n“,a,b,c,d) ;若运行时从键盘上输入:6,5,65,66回车。则输出结果是(分数:1.00)A.6,5,A,B B.6,5,65,6
24、6C.6,5,6,5D.6,5,6,6解析:解析主函数中首先定义了 4个字符变量 a、b、c、d,然后通过 scanf()函数输入 a、b、c、d。输入中 a和 b是按字符格式 c输入的,c 和 d是按整型符号 d输入的。在看下面的 printf()函数中,要求a、b、c、d 都按字符输出,故 a和 b原样输出为 6、5,c 和 d将把与其 ASCII码对应的字符输出,65 和66的 ASCII码对应字符 A和 B,故最后的输出为 6,5,A,B。8.以下能正确定义二维数组的是(分数:1.00)A.int a3;B.int a3=2*3; C.int a3=;D.int a23=1,2,3,4
25、;解析:解析选项 A中省略了第一维的长度,在 C语言中是不允许的;选项 C也是省略第一维的长度;选项 D中定义了一个 2行 3列的数组,而在赋值的时候却赋了一个 3 行的值给它,显然不正确。9.在函数调用过程中,如果函数 funA调用了函数 funB,函数 funB又调用了函数 funA,则(分数:1.00)A.称为函数的直接递归调用B.称为函数的间接递归调用 C.称为函数的循环调用D.C语言中不允许这样的递归调用解析:解析在 C语言中,所谓函数的递归是在指在调用一个函数的过程中,又出现了直接或间接地调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。显然
26、题目中所说得函数调用为函数的间接递归调用。10.下列关于栈的叙述中,正确的是(分数:1.00)A.在栈中只能插入数据B.在栈中只能删除数据C.栈是先进先出的线性表D.栈是先进后出的线性表 解析:解析对栈可进行插入和删除数据的操作,但必须牢记插入和删除数据都只能在栈顶,是一种特殊的线性表。所以栈是先进后出的线性表。11.有以下定义语句double a,b; int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是(分数:1.00)A.a=a+b=b+B.w%(int)a+b)C.(c+w)%(int)a D.w=a=b;解析:解析选项 A中不是合法的赋值语句,将最右边的第一个赋
27、值表达式加括号即为 a=b+(b=b+)才正确;选项 B中运算符“%”的对象必须是整型,而在选项 B中(int)a+b 为 double型;选项 a,b 都为double“=”应该改为“=”。12.设有下列二叉树:(分数:1.00)A.B.C. D.解析:解析二叉树的遍历分为先序、中序、后序三种不同方式。本题要求中序遍历,遍历顺序应该为:中序遍历左子树-访问根结点-中序遍历右子树。按照定义,中序遍历序列是 BDAECF。13.有以下程序main()unsigned int a;int b=-1;a=b;printf(“%u“,(分数:1.00)A.;i3;i+)switch(i)case0:p
28、rintf(“%d“,i);case2:printf(“%d“,i);default:printf(“%d“,i);程序运行后的输出结果是(分数:1.00)A.022111B.021021C.000122 D.012解析:解析程序中 for循环了三次,第一次 i=0,执行 switch语句中 case0:分支,直到遇到 default语句,退出 switch,这里共执行了三个输出语句分别输出 0,0,0,第二次循环 i=1,switch 语句中没有匹配的分支,故只执行 default语句输出 1,退出 switch语句;第三次循环 i=2,从 switch语句中的case2:开始执行,共执行了
29、两个输出语句输出 2、2。最后输出的结果为 000122。23.若 x和 y代表整型数,以下表达式中不能正确表示数学关系|x-y|10 的是(分数:1.00)A.abs(x-y)10B.x-y-10;以下选项中引用结构体变量成员的表达式错误的是(分数:1.00)A.(p+)-numB.p-numC.(*p)numD.stu3age 解析:解析结构体变量也有地址,因此可以把它的地址赋值给一个指针变量,然后通过该指针变量来引用结构体的成员,选项 A和选项 B就是通过指针变量来引用结构体的成员,也可以通过结构体数组元素的成员引用,而在选项 D中 stu3age 不正确,因为结构体数组 stu共有三个
30、元素,其下标应该为0,1,2。26.有以下程序main()int a=3,b=4,c=5,d=2;if(ab) if(bc) printf(“%d“,d+1);elseprintf(“%d“,+d+1);printf(“%d/n“,d) ;程序运行后的输出结果是(分数:1.00)A.2 B.3C.43D.44解析:解析我们首先看程序中 if-else的匹配,由于 C语言中规定 elso总是与最近的 if搭配,因此程序中 else与第二个 if搭配,即该 if-else语句为第一个 if语句的执行部分,接着判断第一个 if后面括号里的表达式的值“ab”为假(“34”为假),因此不执行后面 if-
31、else语句,程序将执行下面的输出语句输出 d,而 d一直未被改变故为原来的值 2。27.没有定义语句int x6=2,4,6,8,5,7,*p=x,i;要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是(分数:1.00)A.for(i=0;i6;i+) printf(“%2d“,*(p+);B.for(i=0;i6;i+) printf(“%2d“,*(p+i);C.for(i=0;i6;i+) printf(“%2d“,*p+);D.for(i=0;i6;i+) printf(“%2d“,(*p)+); 解析:解析本题首先定义了一个一维数组并初始化,接着定义了一个指针变量 p 指
32、向数组 x。因此可以通过指针 p的下移,即每次加 1引用数组 x中的元素,来指向数组中的每个元素,这样循环 6次即可引用数组的每个元素。选项 A、B 和选项 C满足要求,而在选项 D中表达式为(*p)+,该表达式是先取*p 的值然后将其值加 1,而没有将指针下移一位。28.(48)(50)题以下程序的功能是:建立一个带布头结点的单向链表,并将存储在数组中的字符依次存储到链表的各个结点中,请从与下划线处号码对应的一组选项中选择出正确的选项#include stdlibhstruct nodechar data; struct node *next;(48) CreatList(char*s),s
33、truct node *h,*p,*q;h=(struct node*)malloc(sizeof(struct node);p=q=h;while(*s!=“/0“)p=(struct node*)malloc(sizeof(struct node);p-data= (49) ;q-next=p;q= (50) ;s+;p-next=“/0“;return h;main()char str=“link list“;struct node*head;head=CreatList(str);(分数:1.00)A.char*B.struct nodeC.struct node* D.char解析:
34、29.在关系数据模型中,通常可以把()称为属性,其值称为属性值。(分数:1.00)A.记录B.基本表C.模式D.字段 解析:解析数据库表中字段转化为属性,把记录的类型转化为关系模式。30.有以下程序main()char s=“Yse/n/No“,*ps=s;puts(ps+4);*(ps+4)=0;puts(s);程序运行后的输出结果是(选项 D中的第一行是空行)(分数:1.00)A.n/No Yes /NoB./NoYes C.n/Noyes /NoD./NoYes解析:解析主函数中定义了一个字符数组,并赋初值,一个字符串指针变量 ps并让它指向 s。程序中p+4的地址为数组第 5个元素的地
35、址,而调用 put(str_adr)函数时,将从 sb_adr这一地址开始,依次输出存储单元中的字符,遇到第一个“/0”时结束输出,并自动输出一个换行符。所以 put(p+4)将输出n/No,put(s)将从 a第一个元素开始输出到第 3个元素结束(因为执行*(p+4)=0 语句后 s中的第 5个元素的值为 0,而 s中的第 4个元素为“/”,puts 将遇到“/0”,结束输出),即输出 yes。31.有以下程序void fun(int*a,int i,int j)int t;if(ij)t=ai;ai=aj;aj=t;i+; j-;fun(a,i,j);main()int x=2,6,1,8
36、,i;fun(x,0,3);for(i=0;i4;i+) printf(“%2d“,xi);printf(“/n“);程序运行后的输出结果是(分数:1.00)A.1 2 6 8B.8 6 2 1C.8 1 6 2 D.8 6 1 2解析:解析函数 fun()中用了一个 if语句,当数组下标 i小于数组下标 j时,交换数组元素 ai和aj的值,并使 i值加 1,j 值减 1。其功能就是把数组 a中从下标 i到 j的元素首尾互换。主函数中定义一个数组,在定义该数组的时候缺省了定义长度,定义的同时将其初始化赋值,所以该数组的长度为初始化该数组时的元素的个数即 4,接着调用 fun(a,0,3),其中
37、将 a数组的第一个元素的下标 0和最后一个元素的下标 3传给了函数 fun(),故执行完该函数后,数组 a中的元素首尾互换,因此最后依次输出的数组 a中值为 8,1,6 和 2。32.支持数据库各种操作的软件系统叫做(分数:1.00)A.数据库管理系统 B.文件系统C.数据库系统D.操作系统解析:解析数据库管理系统是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等操作。33.有以下程序int f(int(分数:1.00)A.Printf(“%d/n“,a,b) ;程序运行后的输出结果是(分数:1.00)A.错误信息B.666 C.888D.666,888解析:解
38、析程序中的 printf()函数的输出格式部分只说明了一个%d,而输出成员列表却有两个成员 a和 b,在这里将只输出第一个成员 a值为 666。38.以下叙述中正确的是(分数:1.00)A.局部变量说明为 static存储类,其生存期将得到延长 B.全局变量说明为 static存储类,其作用域将被扩大C.任何存储类的变量在未赋初值时,其值都是不确定的D.形参可以使用的存储类说明符与局部变量完全相同解析:解析静态局部变量在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元。由此可知静态局部变量的生存期将一直延长到程序运行结束。而全局变量的只有一种静态存储类别,故全局变量说明
39、为 static存储类,和没有说明为 static存储类其生存期都是一直延长到程序运行结束;未赋初值的 auto型变量的初值是随机的,未赋初值的 static型变量的初值是 0。39.函数重载是指(分数:1.00)A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同C.两个以上的函数名字不同,但形参的个数或类型相同D.两个以上的函数取相同的函数名,并且函数的返回类型相同解析:解析函数重载指的是两个或两个以上的函数具有相同的函数名,但形参的个数或类型不同。程序十通过判断主调函数传过来的参数的个数和类型,来决定选择
40、调用哪个具体的函数。40.下列条件语句中,功能与其他语句不同的是(分数:1.00)A.if(A) printf(“%d/n“,x); else printf(“%d/n/B.if(a=0) 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); 解析:解析选项 A、选项 B和选项 C都是在 s的值为 0的时候输出 y,a 不为 0的时候输出 x,而选项 D是在 a为 0
41、的时候输出 x,a 不为 0的时候输出 y。41.用 C语言编写的代码程序(分数:2.00)A.可立即执行B.是一个源程序 C.经过编译即可执行D.经过编译解释才能执行解析:解析C 语言是一种高级语言,C 语言源程序经过 C语言编译程序编译之后,生成一个后缀为OBJ的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此OBJ 文件与 c语言提供的各种库函数连接在一起,生成一个后缀 EXE 的可执行文件。显然 C语言不能立即执行。42.有以下程序 #includestdiohmain()int a=1,2,3,4,5,6,7,8,9,10,11,12,*p=a+5,*q
42、=NULL;*q= *(p+5);printf(“%d %d/n“,*p,*q);程序运行后的输出结果是(分数:2.00)A.运行后报错 B.6 6C.6 11D.5 10解析:解析本题中首先定义了一个一维数组。并初始化,由于定义该数组的时候省略了长度,因此该数组的长度为初始化时候赋初值的个数即为 12。数组名 a代表数组的首地址,所以*p=a+5 语句使得 p指向数组的第 6个元素,而在程序中定义了一个指针 q并让它指向空,实际上程序并没有在内存中为指针 q开辟存储空间,这样给 q赋值不允许的,故该程序运行后报错。43.(分数:2.00)A.*s B.sC.*s+D.(*s)+解析:44.以
43、下定义语句中正确的是(分数:2.00)A.char a=Ab=B;B.float a=b=10.0;C.int a=10,*b=fprintf(fp1,“abc“);fclose(fp1);若文本文件 f1txt 中原有内容为:good,则运行以上程序后文件 f1txt 中的内容为(分数:2.00)A.goodabcB.abcdC.abc D.abcgood解析:解析主函数中定义了一个文件指针 fp1,然后通过 fopen()函数,以写的方式打开文件“fltxt”,并让指针 fp1指向它,接着调用 fpfintf()函数将“abc”写到文件 fp1所指的文件里,由于开始 fp1指向文件的“fl
44、txt”的开始位置,因此“abc”将把文件“fl txt”里原来的内容“good”覆盖掉,故文件“fltxt”里最后的内容为“abc”。46.若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是(分数:2.00)A.for(i=1,p=1;i5;i+) p*=i;B.for(i=1;i5;i+) p=1; p*=i; C.i=1;p=1;while(i5)p*=i; i+;D.i=1;p=1;dop*=i; i+; while(i5);解析:解析选项 B中 for循环了 5次,而每次循环的时候,都将 p的值重新赋值为 1后,再乘以当前数字 i,最后的结果为 5,显然不是 5
45、!的值,同样的分析可知选项 A、选项 C和选项 D计算的都是 5!。47.下列选项中,不能用作标识符的是(分数:2.00)A._1234_B._1_2C.int_2_D.2_int_ 解析:解析在 C语言中,合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或者下划线,如:acd、d_ad、_adf124、_124 等都是合法的标识符号。而 2asdf,_sd/=都不是合法的标识符。在 C语言中大写字母和小写字母被认为是两个不同的字符,如:ACD 和 acd是两个不同的标识符号。48.下面不属于软件设计原则的是(分数:2.00)A.抽象B.模块化C.自底向上 D.信息隐蔽解析:解析
46、软件设计的原则包括:抽象、模块化、信息隐蔽和模块独立性。自底向上不是软件设计原则。49.有以下程序main()int i=0,s=0;for(;)if(i=3i=5) continue;if(i=6) break;i+;s+=i;printf(“%d/n“,s);程序运行后的输出结果是(分数:2.00)A.10B.13C.24D.程序进入死循环 解析:解析程序中 for循环中省略了判断退出循环的表达式,for 循环将由里面的 break语句控制是否结束循环,第一次循环,第一条 if语句后面括号里的表达式的值为假,所以该 if语句不被执行,执行下面的第二条语句,此时该 if语句表达式的值为假,所
47、以该 if语句也不执行,执行下面的语句,i+、s+=i,执行完毕后 i的值为 1,s 的值为 1,如此循环,直到第三次之后 i,s 的值都为 3,继续第四次循环,显然这时满足第一条 if语句的,执行后面的 continue该次循环结束从头开始下次循环,而 i的值为 3一直没有改变,所以第一条语句始终要执行,因此 for循环将一直循环下去。50.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是(分数:2.00)A.c1c2 B.c1&c2C.c1c2D.c1|c2解析:解析选项 A为异或运算符,如果参加运算的两个位相同,结果为 0,否则为 1。显然选项 A中参加运算 c1和 c2相同,故其值位 0;选项 B为位与运算,如果参加运算的两位都为 1,则结果为 1,否则结果为 0,选项 B中参加运算的 c1和 c2都为真,所以结果为 1;选项 C为取反运算,用来对一个二进制取反,显然 c2取反后不为 0,选项 D为异或运算,参加运算的两位只要有一个为 1,那么运算结果为 1,显然参加运算的 c1和 c2都不为 0,故运算结果不为 0。二、填