1、二级 C语言笔试 51及答案解析(总分:84.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)2.若有说明 char t;,下列表达式不正确的是_。(分数:1.00)A.t=97B.t=aC.t=“a“D.t=a+b3.下列程序段的输出结果是_。 int x=5,y=4,z; printf(“%d/n“,z+=1,z=x%y);(分数:1.00)A.0B.1C.2D.结果是不确定值4.设有如下程序: fun(float*p1,int n,float*p2,int m,float*s) int i; *s=0.0; for(i=0;in;i+)*s+=*p1+; f
2、or(i=0;im;i+)*s+=*p2+; main() float a=1.1,2.2,b=1.0,2.0,3.0),*s=a; fun(a,2,b,3,s); printf(“%f/n“,*s); 上面程序的输出结果是_。(分数:1.00)A.8.200000B.9.300000C.3.300000D.1.1000005.若有以下说明和语句,则值为 6的表达式是_。 struct stu int n; struct stu*next; ; struct stu a3,*p; a0).n=5;a0.next=gets(s3); for(i=0;i4;i+) puts(si); 输入数据如下
3、:(此处CR代表回车符) aa bbCR cc ddCR 则程序的输出结果是_。(分数:1.00)A.aa bb ccddB.aa bb cc ddC.aa bb cc ddD.aa bb cc dd7.下面程序的执行结果为_。 main() int a,b; for(a=1,b=1;a100;a+) if (b20)break; if(b%3=1) b+=3; continue; b-=5; printf(“%d“,A) ; (分数:1.00)A.7B.8C.9D.108.下面程序的输出结果是_。 main() int a34=1,3,5,7,9,11,13,15,17,19,21,23;
4、int(*p)4=a,i,j,k=0; for(i=0;i3;i+) for(j=0;j2;j+) k=pij; printf(“%d/n“,k); (分数:1.00)A.17B.18C.19D.239.下列叙述中,不属于结构化分析方法的是_。(分数:1.00)A.面向数据流的结构化分析方法B.面向数据结构的 Jackson方法C.面向数据结构的结构化数据系统开发方法D.面向对象的分析方法10.下列不属于静态测试方法的是_。(分数:1.00)A.代码检查B.白盒法C.静态结构分析D.代码质量度量11.以下程序的运行结果是_。 main() char n=0x20; printf(“%d/n“,
5、n=n1); (分数:1.00)A.100B.160C.128D.6412.若执行下面的程序时,从键盘上输入 5和 2,则输出结果是_。 main() int a,b,k; scanf(“%d,%d“,str2+; printf(“%d/n“,strcmp(str1,str2); (分数:1.00)A.正数B.负数C.零D.不确定的值14.下列程序的输出结果是_。 union un int a3; long b; char c6; un1,*p; main() p=sub(b,str1=str2=i1MAX;i+) ai-i+i; sub2() int aMAX,i,max; max=5; f
6、or(i=0;imax;i+) ai=i; sub3(int a) int i; for(i=0;iMAX;i+) printf(“%d“,ai); printf(“/n“); (分数:1.00)A.0 2 4 6 8 10 12 14 16 18 0 1 2 3 4B.0 1 2 3 4 0 2 4 6 8 10 12 14 16 18C.0 1 2 3 4 5 6 7 8 9 0 1 2 3 4D.0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12 14 16 1846.以下程序的输出结果是_。 fun(int *s,int *p) static int t=
7、3; *p=st; t-; main() int str=1,2,3,4,i,m=0; for(i=0;i4;i+) fun(str,k= (分数:2.00)填空项 1:_61.若 x=3,y=2,z=1,表达式 z-=xy?x+:+y 的值为 1。(分数:2.00)填空项 1:_62.下列程序的输出结果是_。 #define LEN 5 int aLEN,k; main() fun1(); fun2(); fun1() for(k=0;kLEN;k+) ak=k; fun2() int k; for(k=0;kLEN;k+) printf(“%d“,*(a+k); (分数:2.00)填空项
8、1:_63.以下程序的输出结果是_。 int fun(int*x,int*y) static int m=4; m=*X+*y; *x-=m; *y+=m; return m; main() int a=2,b=6,n; n=fun(printf(“%d,“,n); n=fun( printf(“%d/n“,n); (分数:2.00)填空项 1:_64.想通过以下输入语句给 x赋值 2,给 y赋值 3,则输入数据的形式应该是_。 int x,y; scanf(“x=%d,y=%d“,a=b; b=temp;x=a/b; printf(“x=%d/n“,x); (分数:2.00)填空项 1:_6
9、6.fun1函数的功能是将 3个整数按由大到小的顺序调整后依次放入 a、b、c3 个变量中,a 中放最大数,fun2函数的功能是交换两个变量中的值。补足所缺语句。 fun2(int*x,int*y) int t; t=*x;*x=*y;*y=t; fun1(int*p1,int*p2,int*p3) if(*p3*p2) fun2(*P2,*p3); if(*p1*p3) fun2(_); if(*p1*p2) fun2(_); main() int a,b,c; scanf(“%d%d%d“,i_;i+) z=_; returnz; (分数:2.00)填空项 1:_二级 C语言笔试 51答案
10、解析(总分:84.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:50.00)解析:分析程序段中定义 x值为 1,!x 值为 0,因此循环执行的条件永远成立,该循环是死循环。2.若有说明 char t;,下列表达式不正确的是_。(分数:1.00)A.t=97B.t=aC.t=“a“ D.t=a+b解析:分析选项 A将 97作为 ASCII码值(小写字母 a的 ASCII码值)赋给字符变量 t。选项 D将字符 a和字符 b的 ASCII码值的和赋给变量 t。选项 B是将字符 a的 ASCII 码值赋给变量 t,也是正确的。选项C中的“a”是字符串常量,不是字符常量。3.下列程序
11、段的输出结果是_。 int x=5,y=4,z; printf(“%d/n“,z+=1,z=x%y);(分数:1.00)A.0B.1C.2 D.结果是不确定值解析:分析printf 函数的参数传递方向是从右至左,因此,先将 x%y的值 1赋给 z,再执行 z+=1,z 的值变为 2,格式控制符%d 是将 z+=1的值输出。4.设有如下程序: fun(float*p1,int n,float*p2,int m,float*s) int i; *s=0.0; for(i=0;in;i+)*s+=*p1+; for(i=0;im;i+)*s+=*p2+; main() float a=1.1,2.2
12、,b=1.0,2.0,3.0),*s=a; fun(a,2,b,3,s); printf(“%f/n“,*s); 上面程序的输出结果是_。(分数:1.00)A.8.200000 B.9.300000C.3.300000D.1.100000解析:分析实参指针变量 s指向数组 a的第一个元素,在函数 fun中首先将 s所指数组 a的第一个元素赋值为 0.0,然后将数组 a和 b中的元素值依次累加到数组 a的第一个元素中。5.若有以下说明和语句,则值为 6的表达式是_。 struct stu int n; struct stu*next; ; struct stu a3,*p; a0).n=5;a0
13、.next=gets(s3); for(i=0;i4;i+) puts(si); 输入数据如下:(此处CR代表回车符) aa bbCR cc ddCR 则程序的输出结果是_。(分数:1.00)A.aa bb ccddB.aa bb cc ddC.aa bb cc dd D.aa bb cc dd解析:分析按题目要求输入数据后,数组的第一行是字符串“aa“,第二行是“bb“,第三行是“cc dd“,第四行没有接收到字符串。7.下面程序的执行结果为_。 main() int a,b; for(a=1,b=1;a100;a+) if (b20)break; if(b%3=1) b+=3; conti
14、nue; b-=5; printf(“%d“,A) ; (分数:1.00)A.7B.8 C.9D.10解析:分析本题考查循环辅助控制语句 break和 continue,建议读者用本书采用的列表法分析本题。8.下面程序的输出结果是_。 main() int a34=1,3,5,7,9,11,13,15,17,19,21,23; int(*p)4=a,i,j,k=0; for(i=0;i3;i+) for(j=0;j2;j+) k=pij; printf(“%d/n“,k); (分数:1.00)A.17B.18C.19 D.23解析:分析p 是指向长度为 4的一维数组的指针变量,可看作是二维数组
15、 a的行指针,可以像使用数组名一样通过 p带数组下标的形式来引用数组中元素,变量 k最后是元素 a21的值。9.下列叙述中,不属于结构化分析方法的是_。(分数:1.00)A.面向数据流的结构化分析方法B.面向数据结构的 Jackson方法C.面向数据结构的结构化数据系统开发方法D.面向对象的分析方法 解析:分析常见的需求分析方法有结构化分析方法和面向对象的分析方法两类。其中结构化分析方法又包括面向数据流的结构化分析方法(SA,Structured analysis)、面向数据结构的 Jackson方法(JSD,Jackson system development method) 和面向数据结构
16、的结构化数据系统开发方法(DSSD,Data structured system development method) 。10.下列不属于静态测试方法的是_。(分数:1.00)A.代码检查B.白盒法 C.静态结构分析D.代码质量度量解析:分析静态测试包括代码检查、静态结构分析和代码质量度量等。其中白盒测试属于动态测试。11.以下程序的运行结果是_。 main() char n=0x20; printf(“%d/n“,n=n1); (分数:1.00)A.100B.160C.128D.64 解析:分析n 初始化时值是十六进制 20(即十进制 32),左移 1位,相当于乘以 2,结果是 64。12
17、.若执行下面的程序时,从键盘上输入 5和 2,则输出结果是_。 main() int a,b,k; scanf(“%d,%d“,str2+; printf(“%d/n“,strcmp(str1,str2); (分数:1.00)A.正数 B.负数C.零D.不确定的值解析:分析当两个字符串比较到第 5个字符时,str1 指向的字符是e,str2 指向的字符是/0,字符串比较函数 strcmp的返回值是这两个字符 ASCII码值的差(101),是正数。14.下列程序的输出结果是_。 union un int a3; long b; char c6; un1,*p; main() p=sub(b,st
18、r1=str2=i1MAX;i+) ai-i+i; sub2() int aMAX,i,max; max=5; for(i=0;imax;i+) ai=i; sub3(int a) int i; for(i=0;iMAX;i+) printf(“%d“,ai); printf(“/n“); (分数:1.00)A.0 2 4 6 8 10 12 14 16 18 0 1 2 3 4B.0 1 2 3 4 0 2 4 6 8 10 12 14 16 18C.0 1 2 3 4 5 6 7 8 9 0 1 2 3 4D.0 2 4 6 8 10 12 14 16 18 0 2 4 6 8 10 12
19、 14 16 18 解析:分析函数 sub1给全局作用范围内数组 a(长度为 10)的每个元素赋值,函数 sub2中数组 a仅在本函数范围内有效,长度也是 10,但仅给前 5个元素赋值,main 函数调用 sub3时,传递数组地址均是全局作用范围内数组 a的地址,因此两次调用打印的结果相同。46.以下程序的输出结果是_。 fun(int *s,int *p) static int t=3; *p=st; t-; main() int str=1,2,3,4,i,m=0; for(i=0;i4;i+) fun(str,k= (分数:2.00)填空项 1:_ (正确答案:(ch=getchar()
20、!=,fclose(fp)。)解析:分析根据题目要求,用作为文本结束标志,所以第一空白处应填(ch=getchar()!=,程序中利用循环完成写操作,在操作完毕后,被打开的文件没有被关闭,所以第二个空白处应填 fclose(fp)。61.若 x=3,y=2,z=1,表达式 z-=xy?x+:+y 的值为 1。(分数:2.00)填空项 1:_ (正确答案:-2。)解析:分析表达式 z-=xy?x+:+y 相当于先执行+y,再执行 z-=xy?x:y,最后执行 x+,其中 z-=xy?x:y 等价于 z=z-(xy?x:y),由于 x值为 3,y 值为 3,xy 不成立,返回 y的值,z-y 的值
21、为-2,赋给 z。62.下列程序的输出结果是_。 #define LEN 5 int aLEN,k; main() fun1(); fun2(); fun1() for(k=0;kLEN;k+) ak=k; fun2() int k; for(k=0;kLEN;k+) printf(“%d“,*(a+k); (分数:2.00)填空项 1:_ (正确答案:01234。)解析:分析函数 fun1给数组 a的每个元素赋值,fun2 则输出结果。63.以下程序的输出结果是_。 int fun(int*x,int*y) static int m=4; m=*X+*y; *x-=m; *y+=m; ret
22、urn m; main() int a=2,b=6,n; n=fun(printf(“%d,“,n); n=fun( printf(“%d/n“,n); (分数:2.00)填空项 1:_ (正确答案:8,8。)解析:分析本题考查静态局部变量值的特点,请参考第 10章有关习题的解析。64.想通过以下输入语句给 x赋值 2,给 y赋值 3,则输入数据的形式应该是_。 int x,y; scanf(“x=%d,y=%d“,a=b; b=temp;x=a/b; printf(“x=%d/n“,x); (分数:2.00)填空项 1:_ (正确答案:a=5,b=8,x=1。)解析:分析本题考查形参变量值的
23、改变并不能传回给实参。因此主函数中最后输出的 a和 b仍为原来的初值 5和 8。66.fun1函数的功能是将 3个整数按由大到小的顺序调整后依次放入 a、b、c3 个变量中,a 中放最大数,fun2函数的功能是交换两个变量中的值。补足所缺语句。 fun2(int*x,int*y) int t; t=*x;*x=*y;*y=t; fun1(int*p1,int*p2,int*p3) if(*p3*p2) fun2(*P2,*p3); if(*p1*p3) fun2(_); if(*p1*p2) fun2(_); main() int a,b,c; scanf(“%d%d%d“,i_;i+) z=_; returnz; (分数:2.00)填空项 1:_ (正确答案:ix z*y。)解析:分析循环次数应该是 x次,相当于 x个 y相乘,循环体中 z作为累乘器,值为 z*y。