1、二级 C语言笔试-294 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:50,分数:60.00)1.有以下程序#includestdiohmain()int *p,j;pNULLpfun();for(j0;j4;j+)printf(“%d“,*p);p+;int*fun()int a4,k;for(k=0;k4;k+)akk;return((分数:1.00)A.;程序运行后的输出结果是 ( )A) 程序有错不能运行B.输出 4个 NULLC.输出 0 1 2 3D.输出 1 1 1 12.若有如下定义和声明:struct sint m;char ch;double
2、x;union t char a6;int b3;tt;ss;则 sizeof(struets)的值是 ( )(分数:1.00)A.6B.14C.17D.203.若有如下程序:#define PI 3.1415926#define A(r) 2*PI*rmain()float a,1;a3.0;1A((分数:1.00)A.;printf(“r%.2f,1%.2f/n“,a,1); 则程序运行后的输出结果是4.开发软件时对提高开发人员工作效率至关重要的是 ( )(分数:1.00)A.操作系统的资源管理功能B.先进的软件开发工具和环境C.程序人员的数量D.计算机的并行处理能力5.若有如下程序:su
3、b(int n)int t;if(n=1) return t=5;else t=sub(n-1)+3;return t; main()printf(“%d/n“,sub(5); 则程序运行后的输出结果是 ( )(分数:1.00)A.17B.18C.19D.206.若有如下程序:sub(int x)int y0; static int z1;y+x+2;z+y+x;return(z); main()int t1,n;for(n=0;n3;n+)printf(“%d,“,sub(t); 则程序运行后的输出结果是 ( )(分数:1.00)A.5,5,5B.5,9,13,C.5,7,9,D.5,8,1
4、1,7.在下列叙述中,错误的一条是 ( )(分数:1.00)A.scanf()函数可以用来输入任何类型的多个数据B.数组名作函数参数时,也采用“值传递”方式C.如果形参发生改变,不会改变主调函数的实参值D.函数的实参与形参的类型应一致8.有以下程序main()int m,n;printf(“Enter m,n:“);scanf(“%d%d“, gets(sp);B.char sp5 gets(sp);C.char *sp=“12345“; gets(sp);D.charsp5“/0“ gets(sp)24.线性表若采用链式存储结构时,要求内存中可用存储单元的地址 ( )(分数:1.00)A.必
5、须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以25.C语言中各种基本数据类型的存储空间长度排列为 ( )(分数:1.00)A.charlongintfloatdoubleB.doublefloatlongintcharC.charintlongfloatdoubleD.floatintlongchardouble26.有以下程序union myunstructint x,y,z;u;int k;a;main()aux4;auy=5;a,uz=6;ak0;printf(“%d/n“,aux);程序运行后的输出结果是 ( )(分数:1.00)A.4B.5C.6D.027.
6、下述语句中,_中的 if语句语法是错误的。 ( )(分数:1.00)A.if(xy);B.if(xy)x+y;C.if(x!y)seanf(“%d“,scanf(“%s“,s2);if(strcmp(s1,s2) printf(“);else printf(“$“);printf(“%d/n“,strlen(strcat(s1,s2); 如果从键盘上输入 name回车name1回车,则程序运行后的输出结果是 ( )(分数:1.00)A.$8B.10C.$9D.934.设 a、b 和 c都是 int型变量,且 a3,b4,c5,则下列值为 0的表达式是 ( )(分数:1.00)A.acase 1
7、:printf(“1111“);case 2:printf(“3333“);printf(“%f“,A) ;A) 1.900000B.111133331.900000C.33331.900000D.00001111233331.90000037.若有如下程序:struct studentchar name10;float score3;stu3“lili“,75,90,90,“liudan“,90,85,75;“guoli“,85,85,70;main()int i;float sum0,aver;for(i0;i3;i+)sumsum+stui.score1; aversumi;printf
8、(“%6.2f/n“,aver); 则程序运行后的输出结果是 ( )(分数:1.00)A.83.33B.85.00C.86.00D.86.6738.下述对 C语言字符数组的描述中错误的是 ( )(分数:1.00)A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.可以在赋值语句中通过赋值运算符“”对字符数组整体赋值D.不可以用关系运算符对字符数组中的字符串进行比较39.有以下程序:void fun(int k)static int a5;int i;for(i0;i5;i+)ai+i+k, printf(“%d“,ai); printf(“/n“);main()fun(1);
9、 fun(2); 程序的输出结果是 ( )(分数:1.00)A.1 2 3 4 53 5 7 9 11B.随机数C.1 2 3 4 52 3 4 5 6D.1 2 3 4 52 4 6 8 1040.在计算机中,算法是指 ( )(分数:1.00)A.加工方法B.解题方案的准确而完整的描述C.排序方法D.查询方法41.对下述程序,正确的判断是 ( )main()int a,b,seanf(“%d,%d“,正确的说明语句形式为 【8】 。(分数:2.00)填空项 1:_59.下面程序是计算 100以内能被 4整除且个位数为 4的所有整数,请填空。main()int m,n;for(m0; 【9】
10、;m+)nm*10+4;If( 【10】 )continue;printf(“%d/n“,n); (分数:4.00)填空项 1:_60.以下程序从终端输入一行字符放在 s数组中,输入以回车符作为结束,函数 fun统计存放在 s数组中每个数字字符的个数。形参 ch指向 s数组,形参 n给出了 s数组中字符的个数。在 acc数组中用下标为0的元素统计字符“0”的个数,下标为 1的元素统计字符“1”的个数,。请填空。#include stdiohvoid fun(int *,char*,int);main()char s80,c; int acc10,i0;printf(“Enter charact
11、ers:/n“);while(cgetchar()!/n)s 【11】 c;fun( 【12】 );for(i=0;i10;i+)printf(“%c:%d/n“,0+i,acci);printf(“/n/n“);void fun(int *a,char *ch,int n)int i,d;for(i=0;i10;i+)ai= 【13】 ;for(i=0;in;i+)d 【14】 ; ad+; (分数:8.00)填空项 1:_61.下面程序的输出结果是 【15】 。#define MAX 3int aMAX;main()fun1();un2(A) ;printf(“/n“);funl()int
12、 k,t0;for(k0;kMAX;k+,t+)akt+t;fun2(int b)int k;for(k0;kMAX;k+)printf(“%d“,*(b+k);(分数:2.00)填空项 1:_62.以下函数把 b字符串连接到 a字符串的后面,并返回 a中新字符串的长度。请填空。strcen(char a,char b)int num0,n0;while(*(a+num)!= 【16】 )num+;while(bn)*(a+num)bn;num+; 【17】 ;return(num);(分数:4.00)填空项 1:_63.执行以下程序时,若输入 end回车,则输出结果是 【18】 。main(
13、)char ch10“Begin“;gets(if(n=1) return t=5;else t=sub(n-1)+3;return t; main()printf(“%d/n“,sub(5); 则程序运行后的输出结果是 ( )(分数:1.00)A.17 B.18C.19D.20解析:6.若有如下程序:sub(int x)int y0; static int z1;y+x+2;z+y+x;return(z); main()int t1,n;for(n=0;n3;n+)printf(“%d,“,sub(t); 则程序运行后的输出结果是 ( )(分数:1.00)A.5,5,5B.5,9,13, C
14、.5,7,9,D.5,8,11,解析:7.在下列叙述中,错误的一条是 ( )(分数:1.00)A.scanf()函数可以用来输入任何类型的多个数据B.数组名作函数参数时,也采用“值传递”方式 C.如果形参发生改变,不会改变主调函数的实参值D.函数的实参与形参的类型应一致解析:8.有以下程序main()int m,n;printf(“Enter m,n:“);scanf(“%d%d“, gets(sp); B.char sp5 gets(sp);C.char *sp=“12345“; gets(sp);D.charsp5“/0“ gets(sp)解析:24.线性表若采用链式存储结构时,要求内存中
15、可用存储单元的地址 ( )(分数:1.00)A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以 解析:25.C语言中各种基本数据类型的存储空间长度排列为 ( )(分数:1.00)A.charlongintfloatdoubleB.doublefloatlongintcharC.charintlongfloatdouble D.floatintlongchardouble解析:26.有以下程序union myunstructint x,y,z;u;int k;a;main()aux4;auy=5;a,uz=6;ak0;printf(“%d/n“,aux);程序运行后的
16、输出结果是 ( )(分数:1.00)A.4B.5C.6D.0 解析:27.下述语句中,_中的 if语句语法是错误的。 ( )(分数:1.00)A.if(xy);B.if(xy)x+y;C.if(x!y)seanf(“%d“,scanf(“%s“,s2);if(strcmp(s1,s2) printf(“);else printf(“$“);printf(“%d/n“,strlen(strcat(s1,s2); 如果从键盘上输入 name回车name1回车,则程序运行后的输出结果是 ( )(分数:1.00)A.$8B.10C.$9D.9 解析:34.设 a、b 和 c都是 int型变量,且 a3
17、,b4,c5,则下列值为 0的表达式是 ( )(分数:1.00)A.acase 1:printf(“1111“);case 2:printf(“3333“);printf(“%f“,A) ;A) 1.900000B.111133331.900000 C.33331.900000D.00001111233331.900000解析:37.若有如下程序:struct studentchar name10;float score3;stu3“lili“,75,90,90,“liudan“,90,85,75;“guoli“,85,85,70;main()int i;float sum0,aver;for
18、(i0;i3;i+)sumsum+stui.score1; aversumi;printf(“%6.2f/n“,aver); 则程序运行后的输出结果是 ( )(分数:1.00)A.83.33B.85.00C.86.00D.86.67 解析:38.下述对 C语言字符数组的描述中错误的是 ( )(分数:1.00)A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.可以在赋值语句中通过赋值运算符“”对字符数组整体赋值 D.不可以用关系运算符对字符数组中的字符串进行比较解析:39.有以下程序:void fun(int k)static int a5;int i;for(i0;i5;i
19、+)ai+i+k, printf(“%d“,ai); printf(“/n“);main()fun(1); fun(2); 程序的输出结果是 ( )(分数:1.00)A.1 2 3 4 53 5 7 9 11 B.随机数C.1 2 3 4 52 3 4 5 6D.1 2 3 4 52 4 6 8 10解析:40.在计算机中,算法是指 ( )(分数:1.00)A.加工方法B.解题方案的准确而完整的描述 C.排序方法D.查询方法解析:41.对下述程序,正确的判断是 ( )main()int a,b,seanf(“%d,%d“,正确的说明语句形式为 【8】 。(分数:2.00)填空项 1:_ (正确
20、答案:typedef int ArrInt410;)解析:59.下面程序是计算 100以内能被 4整除且个位数为 4的所有整数,请填空。main()int m,n;for(m0; 【9】 ;m+)nm*10+4;If( 【10】 )continue;printf(“%d/n“,n); (分数:4.00)填空项 1:_ (正确答案:9m1010n%4!0)解析:60.以下程序从终端输入一行字符放在 s数组中,输入以回车符作为结束,函数 fun统计存放在 s数组中每个数字字符的个数。形参 ch指向 s数组,形参 n给出了 s数组中字符的个数。在 acc数组中用下标为0的元素统计字符“0”的个数,下
21、标为 1的元素统计字符“1”的个数,。请填空。#include stdiohvoid fun(int *,char*,int);main()char s80,c; int acc10,i0;printf(“Enter characters:/n“);while(cgetchar()!/n)s 【11】 c;fun( 【12】 );for(i=0;i10;i+)printf(“%c:%d/n“,0+i,acci);printf(“/n/n“);void fun(int *a,char *ch,int n)int i,d;for(i=0;i10;i+)ai= 【13】 ;for(i=0;in;i+
22、)d 【14】 ; ad+; (分数:8.00)填空项 1:_ (正确答案:11i+12acc,s,i13014chi-0)解析:61.下面程序的输出结果是 【15】 。#define MAX 3int aMAX;main()fun1();un2(A) ;printf(“/n“);funl()int k,t0;for(k0;kMAX;k+,t+)akt+t;fun2(int b)int k;for(k0;kMAX;k+)printf(“%d“,*(b+k);(分数:2.00)填空项 1:_ (正确答案:024)解析:62.以下函数把 b字符串连接到 a字符串的后面,并返回 a中新字符串的长度。
23、请填空。strcen(char a,char b)int num0,n0;while(*(a+num)!= 【16】 )num+;while(bn)*(a+num)bn;num+; 【17】 ;return(num);(分数:4.00)填空项 1:_ (正确答案:160或 0或 NULL17n+或+n 或 nn+1 或 n+1)解析:63.执行以下程序时,若输入 end回车,则输出结果是 【18】 。main()char ch10“Begin“;gets(&ch1); puts(ch);(分数:2.00)填空项 1:_ (正确答案:Bend)解析:64.下面函数用来求两个单精度数之和,并通过形参将结果传回,请填空。Void sub(float x,noat y, 【19】 z)【20】 x+y;(分数:4.00)填空项 1:_ (正确答案:19float20* z)解析: