1、二级 C 语言笔试-285 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.对于下面的语句,叙述正确的是_。char c1=“abcd“;char c2=a,b,c,d;(分数:2.00)A.数组 c1 和数组 c2 等价B.数组 c1 占用空间大于数组 c2 占用空间C.数组 c1 占用空间小于数组 c2 占用空间D.数组 c1 和数组 c2 的长度相同2.关系数据库管理系统应能实现的专门的关系运算包括_。(分数:2.00)A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表3.如下程序的输出结果是_。main
2、()static int a4=1,2,3,4;int*k,*j;j=a+1;k=in;i+)*s+=*p1+;for(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.10000013.下列程序段的输出结果是_。int x=5,y=4,z;printf(“%d/n“,z+=1,z=x%y);(分数:1.00)A.0B.1C.2D.结果是不确定值14
3、.若有以下说明,则能打印出“Yu”的语句是_。struct sampchar name10;int number;kk3=“WarBin“,1,“LiYu“,2,“LuHui“,3;struct samp*str3;str0=str1=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“);A) 0 2 4 6 8 10 12 1B.0 1 2 3 4 0 2 4 6 8 10 12 14
4、16 18C.0 1 2 3 4 5 6 7 8 90 1 2 3 4D.0 2 4 6 8 10 12 14 16 180 2 4 6 8 10 12 14 16 1821.若有以下说明和语句,则值为 6 的表达式是_。struct stuint n;struct stu*next;struct stu a3,*p;a0).n=5;a0.next=gets(s3);for(i=0;i4;i+)puts(si);输入数据如下:(此处CR代表回车符)aa bbCRcc ddCR则程序的输出结果是_。(分数:1.00)A.aa bb ccddB.aa bb cc ddC.aa bb cc ddD.
5、aa bb cc dd28.下列叙述中,不属于结构化分析方法的是_。(分数:1.00)A.面向数据流的结构化分析方法B.面向数据结构的 Jackson 方法C.面向数据结构的结构化数据系统开发方法D.面向对象的分析方法29.设有以下定义:int a33=1,2,3,4,5,6,7,8,9;int(*ptr)3=a;则下列能正确表示数组元素 a12的表达式是_。(分数:1.00)A.*(*ptr+1)2)B.a23C.(*ptr+1)+2D.*(*(a+1)+2)30.设有如下函数:fun(floatx)x*=x+;printf(“%d/n“,x);return(x);则函数的类型是_。(分数:
6、1.00)A.floatB.voidC.intD.无法确定31.下面程序的输出结果是_。main()int a10=0,1,2,3,4,5,6,7,8,9,*p=a+4;printf(“%d/n“,p3);(分数:1.00)A.6B.7C.3D.532.下面程序的执行结果是_。main()char str=“quert?“,*p=str;while(putchar(*p+)!=?);(分数:1.00)A.quertB.RvfsuC.quert?D.rvfsu?33.语句定义如下:char strl50,str220,ch;则下列语句正确的是_。(分数:1.00)A.str1=“Crazy“;s
7、tr2=str1;B.str1=“Crazy“;str2=“English“;strcpy(str1,str2);C.ch=“xy“;D.ch=x;34.以下程序的输出结果是_。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,i3;i+)for(j=0;j2;j+)k=pij;printf(“%d/n“,k);(分数:1.00)A.17B.18C.19D.2338.下列程序的输出结果是_。#include stringhmain()char*str1=“a
8、bcde“,*str2=“abcd“;strl+;str2+;printf(“%d/n“,strcmp(str1,str2);(分数:1.00)A.正数B.负数C.零D.不确定的值39.两次运行下面的程序后,如果从键盘上分别输入 7 和 3,则输出结果是_。main()int x;scanf(“%d“,sub(b,a100;a+)if (b20)break;if(b%3=1)b+=3;continue;b-=5;printf(“%d“,(分数:1.00)A.;A) 7B.8C.9D.1049.若执行下面的程序时,从键盘上输入 5 和 2,则输出结果是_。main()int a,b,k;scan
9、f(“%d,%d“,(分数:4.00)填空项 1:_61.若 x=3,y=2,z=1,表达式 z-=xy?x+:+y 的值为 1。(分数:2.00)填空项 1:_62.下列程序的输出结果是_。#define LEN 5int 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:_63.以下程序的输出结果是_。int fun(int*x,int*y)static int m=4;m=*X+*y; *x-=m; *y+=
10、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:_66.fun1 函数的功能是将 3 个整数按由大到小的顺序调整后依次放入 a、b、c3 个变量中,a 中放最大数,fun2 函数的功能是交换两个变量中的值。补足所缺语句。f
11、un2(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;(分数:4.00)填空项 1:_二级 C 语言笔试-285 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.对于下面的语句,叙述正确的是_。char c1=“abcd“;char c2=a,b,c
12、,d;(分数:2.00)A.数组 c1 和数组 c2 等价B.数组 c1 占用空间大于数组 c2 占用空间 C.数组 c1 占用空间小于数组 c2 占用空间D.数组 c1 和数组 c2 的长度相同解析:分析给字符数组按字符串方式初始化,则在字符串末尾有一个字符串结束标志,占一个字节的存储空间,如逐个元素赋值,则不加字符串结束标志。2.关系数据库管理系统应能实现的专门的关系运算包括_。(分数:2.00)A.排序、索引、统计B.选择、投影、连接 C.关联、更新、排序D.显示、打印、制表解析:分析关系数据库建立在关系数据模型的基础上,具有严格的数学理论基础。关系数据库对数据的操作除了包括集合代数的并
13、、差等运算之外,更定义了一组专门的关系运算:连接、选择和投影。关系运算的特点是运算的对象都是表。3.如下程序的输出结果是_。main()static int a4=1,2,3,4;int*k,*j;j=a+1;k=in;i+)*s+=*p1+;for(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.200000 B.9.300000C.3.300000D.1.100000解析:分析实参指针变量 s 指向数组
14、 a 的第一个元素,在函数 fun 中首先将 s 所指数组 a 的第一个元素赋值为 0.0,然后将数组 a 和 b 中的元素值依次累加到数组 a 的第一个元素中。13.下列程序段的输出结果是_。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 的值输出。14.若有以下说明,则能打印出“Yu”的语句是_。struct sampchar name10;i
15、nt number;kk3=“WarBin“,1,“LiYu“,2,“LuHui“,3;struct samp*str3;str0=str1=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“);A) 0 2 4 6 8 10 12 1B.0 1 2 3 4 0 2 4 6 8 10 12 14 16 18C.0 1 2 3 4 5 6 7 8 90 1 2 3 4D.0 2 4 6 8
16、10 12 14 16 180 2 4 6 8 10 12 14 16 18 解析:分析函数 sub1 给全局作用范围内数组 a(长度为 10)的每个元素赋值,函数 sub2 中数组 a 仅在本函数范围内有效,长度也是 10,但仅给前 5 个元素赋值,main 函数调用 sub3 时,传递数组地址均是全局作用范围内数组 a 的地址,因此两次调用打印的结果相同。21.若有以下说明和语句,则值为 6 的表达式是_。struct stuint n;struct stu*next;struct stu a3,*p;a0).n=5;a0.next=gets(s3);for(i=0;i4;i+)puts(
17、si);输入数据如下:(此处CR代表回车符)aa bbCRcc ddCR则程序的输出结果是_。(分数:1.00)A.aa bb ccddB.aa bb cc ddC.aa bb cc dd D.aa bb cc dd解析:分析按题目要求输入数据后,数组的第一行是字符串“aa“,第二行是“bb“,第三行是“cc dd“,第四行没有接收到字符串。28.下列叙述中,不属于结构化分析方法的是_。(分数:1.00)A.面向数据流的结构化分析方法B.面向数据结构的 Jackson 方法C.面向数据结构的结构化数据系统开发方法D.面向对象的分析方法 解析:分析常见的需求分析方法有结构化分析方法和面向对象的分
18、析方法两类。其中结构化分析方法又包括面向数据流的结构化分析方法(SA,Structured analysis)、面向数据结构的 Jackson 方法(JSD,Jackson system development method) 和面向数据结构的结构化数据系统开发方法(DSSD,Data structured system development method) 。29.设有以下定义:int a33=1,2,3,4,5,6,7,8,9;int(*ptr)3=a;则下列能正确表示数组元素 a12的表达式是_。(分数:1.00)A.*(*ptr+1)2)B.a23C.(*ptr+1)+2D.*(*(
19、a+1)+2) 解析:分析指针变量 ptr 是指向长度为 3 的整型一维数组,当 ptr 指向二维数组 a 时,ptr 每移动一个单位将指向数组的下一行,*(*(a+1)+2)表示数组元素 a12, *(*(ptr+1)+2)也可以。30.设有如下函数:fun(floatx)x*=x+;printf(“%d/n“,x);return(x);则函数的类型是_。(分数:1.00)A.floatB.voidC.int D.无法确定解析:分析函数 fun 缺省返回值类型时,系统将默认为 int 型。形参 x 是 float 型,和函数返回值类型不一致,此时,以函数返回值类型为准。31.下面程序的输出结
20、果是_。main()int a10=0,1,2,3,4,5,6,7,8,9,*p=a+4;printf(“%d/n“,p3);(分数:1.00)A.6B.7 C.3D.5解析:分析指针变量 p 指向数组 a 的第 5 个元素,p3在原指向基础上移 3 个单位,指针变量 p 将指向第 8 个元素(下标为 7 的元素),值为 7。32.下面程序的执行结果是_。main()char str=“quert?“,*p=str;while(putchar(*p+)!=?);(分数:1.00)A.quertB.RvfsuC.quert? D.rvfsu?解析:分析*p+是先取*p 的值,然后指针变量 p 指
21、向下一个字符,putchar 是先执行(输出)再判断,所以“?”是可以显示的。33.语句定义如下:char strl50,str220,ch;则下列语句正确的是_。(分数:1.00)A.str1=“Crazy“;str2=str1;B.str1=“Crazy“;str2=“English“;strcpy(str1,str2);C.ch=“xy“;D.ch=x; 解析:分析str1 和 str2 是数组名,是常量,其值不可改变,所以 A 和 B 中将字符串常量赋值给 str1和 str2 是错误的。字符变量 ch 占一个字节,只能存放一个字符,所以 C 也不正确。34.以下程序的输出结果是_。f
22、un(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,i3;i+)for(j=0;j2;j+)k=pij;printf(“%d/n“,k);(分数:1.00)A.17B.18C.19 D.23解析:分析p 是指向长度为 4 的一维数组的指针变量,可看作是二维数组 a 的行指针,可以像使用数组名一样通过 p 带数组下标的形式来引用数组中元素,变量 k 最后是元素 a21的值。38.下列程序的输出结果是_。#include stringhmain()char*str1
23、=“abcde“,*str2=“abcd“;strl+;str2+;printf(“%d/n“,strcmp(str1,str2);(分数:1.00)A.正数 B.负数C.零D.不确定的值解析:分析当两个字符串比较到第 5 个字符时,str1 指向的字符是e,str2 指向的字符是/0,字符串比较函数 strcmp 的返回值是这两个字符 ASCII 码值的差(101),是正数。39.两次运行下面的程序后,如果从键盘上分别输入 7 和 3,则输出结果是_。main()int x;scanf(“%d“,sub(b,a100;a+)if (b20)break;if(b%3=1)b+=3;continue;b-=5;printf(“%d“,(分数:1.00)A.;A) 7B.8 C.9D.10解析:分析本题考查循环辅助控制语句 break 和 continue,建议读者用本书采用的列表法分析本题。49.若执行下面的程序时,从键盘上输入 5 和 2,则输出结果是_。main()int a,b,k;scanf(“%d,%d“,&a,&b) ;k=a;if(ab) k=a%b;else k=b%a;printf(“%d/n“,k);(分数:1.00)A.5B.3C.2