1、国家计算机二级(C)84 及答案解析(总分:3480.00,做题时间:120 分钟)一、选择题(1-10 题每题 2分,11-50 题(总题数:50,分数:3000.00)1.有以下程序 main() int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i ,k,t; for(i=0;i-10i+) s+=aai1; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:60.00)A.11B.19C.13D.2010.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s=a; for(b=1;bn
2、umB.p-numC.(*p).numD.stu3.age15.有以下程序: main( ) int i=0,x=0; for (;) if(i=3|i=5) continue; if (i=6) break; i+; s+=i; ; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:60.00)A.10B.13C.21D.程序进入死循环16.有以下程序 #include main() int i=5; do if(i%3=1) if(i%5=2) printf(“*%d“,i);break; i +; while(i!=0); printf(“/n“); 程序的运行
3、结果是 (分数:60.00)A.*7B.*3*5C.*5D.*2*617.有以下程序: main( ) unsigned int a; int b=-1; a=b; printf(“%u“,a); 程序运行后的输出结果是( )。 (分数:60.00)A.-1B.65535C.32767D.-3276818.数字字符 0的 ASC值为 48,若有以下程序 main() char a=1,b=2; printf(“%c“,b+); printf (“%d/n“,b-a); 程序运行后的输出结果是【 】。(分数:60.00)A.32B.502C.22D.2,5019.与十六进制数 200等值得十进制
4、数为( )。(分数:60.00)A.256B.512C.1024D.204820.有以下程序段: int n=0,p; do scanf(“%d“,p);n + +;while(p!=12345 nA.p的值不等于 12345并且 n的值小于 3B.p的值等于 12345并且 n的值大于等于 3C.p的值不等于 12345或者 n的值小于 3D.p的值等于 12345或者 n的值大于等于 321.以下叙述中错误的是【 】。(分数:60.00)A.对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素
5、的下标超出所定义的下标范围时,系统将给出“下标越界“的出错信息D.可以通过赋初值的方式确定数组元素的个数22.有定义语句 int b;char c10;,则正确的输入语句是【 】。(分数:60.00)A.scallf(“%d%s“,B.scallf(“%d %s“,C.scanf(“%d %s“,b,c)D.scanf(“%d%s“,b, 要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是( )。 (分数:60.00)A.for(i=0;iy ? x:y; B.int max(int x,y) int z; z=xy ? x:y; return z; C.max(int x,int
6、y) int z; z=xy?x:y; return(z); D.int max(int x,int y) return(xy?x:y); 29.以下符合 C语言语法的实型常量是( )。(分数:60.00)A.1.2B.3.14.159EC.0.0005D.E1530.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int xN) int i=0; while(iN) scanf(“%d“,_); 在下划线处应填入的是( )。 (分数:60.00)A.x+iB. -p; y=*p; printf(“y=%d/n“,y); 程序的运行
7、结果是( )。 (分数:60.00)A.y=0B.y=1C.y=2D.y=337.若以下选项中的变量已正确定义,则正确的赋值语句是( )。(分数:60.00)A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3;38.有以下程序 main( ) int m 3=1,4,7,2,5,8,3,6,9; int i,j,k=2; for(i=0;iA.4 5 6B.2 5 8C.3 6 9D.7 8 939.以下叙述中不正确的是( )。(分数:60.00)A.C语言中的文本文件以 ASCII码形式存储数据B.C语言中对二进制位的访问速度比文本文件快C.C语言中,随机读写方式不
8、使用于文本文件D.C语言中,顺序读写方式不使用于二进制文件40.有以下程序 main( ) int a 3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;iA.7B.6C.8D.无确定值41.有以下程序: void sum(int a) a0=a-1+a1; main() int a10=1,2,3,4,5,6,7,8,9,10; sum( unsigned char c; ul; ul.c=A; printf(“%c/n“,ul.n); 执行后输出结果是( )。 (分数:60.00)A.产生语法错B.随机值C.AD.6543.有以下程序段 int a10=1,2,3
9、,4,5,6,7,8,9,10,*p= b=p5; b 中的值是( )。 (分数:60.00)A.5B.6C.8D.944.若有定义:char* x=“abcdefghi“;,以下选项中正确运用了 strcpy函数的是【 】。(分数:60.00)A.char Y10; strcpy(Y,x4);B.char Y10; strcpy(+y,B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s1)0)S;D.if(strcmp(s1,s2)0)S;49.以下能正确定义且赋初值的语句是【 】。(分数:60.00)A.int n1=n2=10;B.char c=32;C.float
10、 f=f+1.1;D.double x=12.3E2.5;50.下列叙述中正确的是【 】。(分数:60.00)A.线性链表是线性表的链式存储结构B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构二、填空题(每空 2分,共 40分)(总题数:12,分数:480.00)51.以下程序的输出结果是 1。 #define MCRA(m) 2*m #define MCRB(n,m) 2*MCRA(n)+m main( ) int i=2,j=3; printf(“%d/n“,MCRB(j,MCRA(i); (分数:40.00)填空项 1:_52.以下函数的功能是删除字符串
11、s中的所有数字字符。请填空。 viod dele(char *s) int n=0,i; for(i=0;si;i+) if( 1) sn+=si; sn= 2; (分数:40.00)填空项 1:_53.执行以下程序后,输出#号的个数是 1。 #include stdio.h main( ) int i,j; for(i=1; i5; i+) for(j=2; j=i; j+) putchar(#); (分数:40.00)填空项 1:_54.在 Windows环境下,利用菜单命令删除固定硬盘上的文件与文件夹,实际上是将需要删除的文件与文件夹移动到 1 文件夹中。(分数:40.00)填空项 1:
12、_55.以下程序的功能是将字符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。 #include stdio.h #include ctype.h main( ) char s80, d80; int i,j; gets(s); for(i=j=0;si!=/0;i+) if( 1) dj=si; j+; dj=/0; puts(d); (分数:40.00)填空项 1:_56.设有说明 struct DATEintyear;intmonth;intday;请写出一条定义语句,该语句定义 d为上述结构
13、体类型变量,并同时为其成员 year、month、day 依次赋初值 2006、10、1: 1。(分数:40.00)填空项 1:_57.深度为 5的满二叉树有 1 个叶子结点。(分数:40.00)填空项 1:_58.在 Windows环境下,为了将屏幕内容存入剪贴板,应按 1 键。(分数:40.00)填空项 1:_59.以下程序的功能是输出如下形式的方阵: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 请填空。 main1 int i,j,x; for(j=4;j 2;j-) for(i=1;i=4;i+) x=(j-1)*4 + 3; printf(“%4d“
14、,x); printf(“/n“); (分数:40.00)填空项 1:_填空项 1:_60.设有定义语句:inta3=0,12;,则数组元素 a12的值是 1。(分数:40.00)填空项 1:_61.在 64位高档微机中,CPU 能同时处理 1 个字节的二进制数据。(分数:40.00)填空项 1:_62.已知字符 A的 ASC代码值为 65,以下程序运行时若从键盘输入 B33回车,则输出结果是 1。 #includestdio.h main2 char a,b; a=getchar3;scanf(“%d“, a=a-A+0;b=b*2; printf(“%c%c/n“,a,b); (分数:40
15、.00)填空项 1:_国家计算机二级(C)84 答案解析(总分:3480.00,做题时间:120 分钟)一、选择题(1-10 题每题 2分,11-50 题(总题数:50,分数:3000.00)1.有以下程序 main() int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i ,k,t; for(i=0;i-10i+) s+=aai1; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:60.00)A.11B.19 C.13D.20解析:10.若有如下程序段,其中 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0) s
16、=a; for(b=1;bnumB.p-numC.(*p).numD.stu3.age 解析:15.有以下程序: main( ) int i=0,x=0; for (;) if(i=3|i=5) continue; if (i=6) break; i+; s+=i; ; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:60.00)A.10B.13C.21D.程序进入死循环 解析:16.有以下程序 #include main() int i=5; do if(i%3=1) if(i%5=2) printf(“*%d“,i);break; i +; while(i!=0
17、); printf(“/n“); 程序的运行结果是 (分数:60.00)A.*7 B.*3*5C.*5D.*2*6解析:整个程序中只有对 i增加的语句没有对 i减少的语句,所以 2、3 都不可能出现,选项 B)和 D)错误。而 i=5时第一个 if语句的表达式为假,所以选项 C)也错误。17.有以下程序: main( ) unsigned int a; int b=-1; a=b; printf(“%u“,a); 程序运行后的输出结果是( )。 (分数:60.00)A.-1B.65535 C.32767D.-32768解析:18.数字字符 0的 ASC值为 48,若有以下程序 main() c
18、har a=1,b=2; printf(“%c“,b+); printf (“%d/n“,b-a); 程序运行后的输出结果是【 】。(分数:60.00)A.32B.502C.22 D.2,50解析:执行语句“printf(“%c,“,b+);“后,b 的值变成字符 3,执行“printf(“%d/n“,b-a);“,即3-1。 19.与十六进制数 200等值得十进制数为( )。(分数:60.00)A.256B.512 C.1024D.2048解析:20.有以下程序段: int n=0,p; do scanf(“%d“,p);n + +;while(p!=12345 nA.p的值不等于 1234
19、5并且 n的值小于 3B.p的值等于 12345并且 n的值大于等于 3C.p的值不等于 12345或者 n的值小于 3D.p的值等于 12345或者 n的值大于等于 3 解析:21.以下叙述中错误的是【 】。(分数:60.00)A.对于 double类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界“的出错信息 D.可以通过赋初值的方式确定数组元素的个数解析:在 C语言中,如果出现下标越界的情况,系统不管在编译还是执行时都不会给出“下标越界“的错误提示。 22.
20、有定义语句 int b;char c10;,则正确的输入语句是【 】。(分数:60.00)A.scallf(“%d%s“,B.scallf(“%d %s“, C.scanf(“%d %s“,b,c)D.scanf(“%d%s“,b, 要求依次输出 x数组 6个元素中的值,不能完成此操作的语句是( )。 (分数:60.00)A.for(i=0;iy ? x:y; B.int max(int x,y) int z; z=xy ? x:y; return z; C.max(int x,int y) int z; z=xy?x:y; return(z); D.int max(int x,int y)
21、return(xy?x:y); 解析:29.以下符合 C语言语法的实型常量是( )。(分数:60.00)A.1.2B.3.14.159EC.0.0005 D.E15解析:30.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10 void arrin(int xN) int i=0; while(iN) scanf(“%d“,_); 在下划线处应填入的是( )。 (分数:60.00)A.x+iB. -p; y=*p; printf(“y=%d/n“,y); 程序的运行结果是( )。 (分数:60.00)A.y=0B.y=1C.y=2D.y=3 解析:首先定义了
22、一个一维数组和指针,接着将数组第四个元素的地址赋予*p,进行-p 使指针 p指向了数组的第三个元素,通过 y=*p:将数组第三个元素的值 3赋予 y,所以选项 D正确。37.若以下选项中的变量已正确定义,则正确的赋值语句是( )。(分数:60.00)A.x1=26.8%3B.1+2=x2C.x3=0x12 D.x4=1+2=3;解析:38.有以下程序 main( ) int m 3=1,4,7,2,5,8,3,6,9; int i,j,k=2; for(i=0;iA.4 5 6B.2 5 8C.3 6 9 D.7 8 9解析:39.以下叙述中不正确的是( )。(分数:60.00)A.C语言中的
23、文本文件以 ASCII码形式存储数据B.C语言中对二进制位的访问速度比文本文件快C.C语言中,随机读写方式不使用于文本文件D.C语言中,顺序读写方式不使用于二进制文件 解析:40.有以下程序 main( ) int a 3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;iA.7 B.6C.8D.无确定值解析:41.有以下程序: void sum(int a) a0=a-1+a1; main() int a10=1,2,3,4,5,6,7,8,9,10; sum( unsigned char c; ul; ul.c=A; printf(“%c/n“,ul.n); 执行后
24、输出结果是( )。 (分数:60.00)A.产生语法错B.随机值C.A D.65解析:43.有以下程序段 int a10=1,2,3,4,5,6,7,8,9,10,*p= b=p5; b 中的值是( )。 (分数:60.00)A.5B.6C.8D.9 解析:44.若有定义:char* x=“abcdefghi“;,以下选项中正确运用了 strcpy函数的是【 】。(分数:60.00)A.char Y10; strcpy(Y,x4);B.char Y10; strcpy(+y,B.if(strcmp(s1,s2)S;C.if(strcmp(s2,s1)0)S;D.if(strcmp(s1,s2)
25、0)S; 解析:49.以下能正确定义且赋初值的语句是【 】。(分数:60.00)A.int n1=n2=10;B.char c=32; C.float f=f+1.1;D.double x=12.3E2.5;解析:语句“int n1=n2=10;“中,由于变量 n2未定义,所以此赋值语句错误:由于赋值语句中不能存在运算表达式,所以选项 C中的赋值语句错误;选项 D中指数表示错误,C 语言规定,e 后面的指数必须为整数;选项 B中的“32“是 ASCII 码的表示形式,这是 C语言中字符型数据和整型数据通用的表现,即一个字符数据可以以字符形式出现,也可以以整数形式出现。 50.下列叙述中正确的是
26、【 】。(分数:60.00)A.线性链表是线性表的链式存储结构 B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构解析:所谓线性链表,就是指线性表的链式存储结构,简称链表。线性表链式存储结构的基本单位称为存储结点,每个存储结点包括数据域和指针域两个组成部分。栈、队列和双向链表是线性结构,二叉树是非线性结构。线性结构和非线性结构是从数据的逻辑结构角度来讲的,与该数据结构中有多少个元素没有关系,即使是空的二叉树也是非线性结构。二、填空题(每空 2分,共 40分)(总题数:12,分数:480.00)51.以下程序的输出结果是 1。 #define MCRA(m) 2*m
27、 #define MCRB(n,m) 2*MCRA(n)+m main( ) int i=2,j=3; printf(“%d/n“,MCRB(j,MCRA(i); (分数:40.00)填空项 1:_ (正确答案:16)解析:52.以下函数的功能是删除字符串 s中的所有数字字符。请填空。 viod dele(char *s) int n=0,i; for(i=0;si;i+) if( 1) sn+=si; sn= 2; (分数:40.00)填空项 1:_ (正确答案:si=0si=9)解析:53.执行以下程序后,输出#号的个数是 1。 #include stdio.h main( ) int i
28、,j; for(i=1; i5; i+) for(j=2; j=i; j+) putchar(#); (分数:40.00)填空项 1:_ (正确答案:6)解析:54.在 Windows环境下,利用菜单命令删除固定硬盘上的文件与文件夹,实际上是将需要删除的文件与文件夹移动到 1 文件夹中。(分数:40.00)填空项 1:_ (正确答案:回收站)解析:55.以下程序的功能是将字符串 s中的数字字符放入 d数组中,最后输出 d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。 #include stdio.h #include ctype.h main
29、( ) char s80, d80; int i,j; gets(s); for(i=j=0;si!=/0;i+) if( 1) dj=si; j+; dj=/0; puts(d); (分数:40.00)填空项 1:_ (正确答案:si=0 j 2;j-) for(i=1;i=4;i+) x=(j-1)*4 + 3; printf(“%4d“,x); printf(“/n“); (分数:40.00)填空项 1:_ (正确答案:=1 或0)填空项 1:_ (正确答案:i)解析:本程序有两重 for循环,外层 for循环控制输出数据的行数,故第第一个空填“=1“或“0“,内层循环控制每行输出的个数
30、。在内层 for循环中,用语句“x=(j-1)*4+ -|_|-;“控制输出方阵中的具体数据,由于这些数据与其所在的行、列(j,i)有关系 x=(j-1)*4+i,故此此空填 i。 60.设有定义语句:inta3=0,12;,则数组元素 a12的值是 1。(分数:40.00)填空项 1:_ (正确答案:0)解析:本题考查的是二维数组初始化问题。题中对数组的 a00,a10,a203个元素分别赋值为0,1,2,其余的元素都自动赋 0。所以 a12的值为 0。61.在 64位高档微机中,CPU 能同时处理 1 个字节的二进制数据。(分数:40.00)填空项 1:_ (正确答案:8)解析:62.已知
31、字符 A的 ASC代码值为 65,以下程序运行时若从键盘输入 B33回车,则输出结果是 1。 #includestdio.h main2 char a,b; a=getchar3;scanf(“%d“, a=a-A+0;b=b*2; printf(“%c%c/n“,a,b); (分数:40.00)填空项 1:_ (正确答案:1B)解析:C 语言使字符型数据和整型数据之间可以通用。题中执行“a=getchar-|_|-;“后,a的值 B,在内存中的表现形式为 ASCII 码 66:执行“scanf(“%d“,&b:“后,b 在内存中的表现形式为 33,然后经过“a=a-A+0;b=b*2;“运算,得出 a的值为字符 1,b的值为 ASCII码 66,最后以字符型输出为1B。