当前位置:文档之家› 全国计算机等级考试二级C语言程序设计真题精选3(含答案)

全国计算机等级考试二级C语言程序设计真题精选3(含答案)

全国计算机等级考试二级C语言程序设计真题精选3
一、单项选择题
1.下列关于C语言文件的叙述中正确的是()。

A.文件由一系列数据依次排列组成,只能构成二进制文件
B.文件由结构序列组成,可以构成二进制文件或文本文件
C.文件由数据序列组成,可以构成二进制文件或文本文件√
D.文件由字符序列组成,其类型只能是文本文件
解析:C语言将文件看作是一个字符(字节)的序列,即由一个一个字符(字节)数据顺序组成。

根据数据的组成形式,可将文件分为两种:①ASCII文件,又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符;②二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

所以C文件就是一个字节流或一个二进制流。

2.有以下程序:#includ<stdio.h>main()
inm=1,n=2,*p=&m,*q=&n,*r; r=p,p=q;q=r; printf
("%d,%d,%d,%",m,n,*p,*q);}程序运行后的输出结果是()。

A.1,2,1,2
B.1,2.2,1 √
C.2,1,2,1
D.2,1.1,2
解析:本题定义了两个整型变量,然后用两个指针分别指向这两个整型变量,接着对指针进行交换,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。

3.有以下程序:
#includ<stdio.h>#include<string.h>strucAina;chab[10];doublc;};strucf (struct);main()struca={1001,"ZhangDa",1098.0}; a=f(a);printf ("%d,%s,%6.1",a.a,a.b,a.c);}strucf(struct)t.a=1002;strcpy
(t.b,"ChangRong");t.c=1202.0;returt;}程序运行后的输出结果是
()。

A.1001,ZhangDa,1098.0
B.1002,ZhangDa,1202.0
C.1001,ChangRong,1098.0
D.1002,ChangRong,1202.0 √
解析:函数f对结构体进行修改,并返回新的结构体;main函数先定义了一个结构体变量a并为它赋初值,然后调用函数f修改结构体变量的成员值,最后输出新的结构体变量成员。

4.数据库管理系统是()。

A.操作系统的一部分
B.在操作系统支持下的系统软件√
C.一种编译系统
D.一种操作系统
解析:系统软件主要包括:①操作系统软件;②各种语言的解释程序和编译程序;③各种服务性程序;④各种数据库管理系统。

数据库管理系统属于系统软件,负责数据库中的数据组织、数组操纵、数据维护、控制和保护以及数据服务等。

5.有以下程序:#includ<stdio.h>voifun(inp)ind=2; p=d++;printf ("%d",p);}main()ina=1; fun(a);printf("%",a);}程序运行后的输出结果是()。

A.32
B.12
C.21 √
D.22
解析:C语言中函数参数传递满足“单向传递”,实现传递值的功能,实参能传给形参,形参却不能传回给实参。

fun函数体内输出p的值为2,并不影响到fun函数外a的值,a的值在main函数内依然为1。

6.有以下程序:#includ<stdio.h>#definf(x)x*x*xmain()
ina=3,s,t; s=f(a+1);t=f((a+1)); printf("%d,%",s,t);}程序运行后的输出结果是()。

A.10,64 √
B.10,10
C.64,10
D.64,64
解析:C语言中带参数的宏可以理解为用参数直接替代定义式中的变量,而不经过任何修改。

所以s=f(a十1)=a+1*a+1*a+1,t=f((a+1))=
(a+1)*(a+1)*(a+1),所以有无括号的运算结果是不同的。

7.有以下程序:#includ<stdio.h>main()ina[]={2,3,5,4},i; for
(i=0;i<4;i++)switch(i%2)cas0:switch
(a[i]%2)cas0:a[i]++;break; cas1:a[i]-
-; }break; cas1:a[i]=0; } for(i=0;i<4;i++)printf
("%d",a[i]);printf("");}程序运行后的输出结果是()。

A.3344
B.2050
C.3040 √
D.0304
解析:main函数的主体是一个for循环语句,for循环中包含一个switch语句,如果判断条件为0则进入第二个switch语句,如果判断语句为1则执行“a[i]=0”,最后将数组顺序输出。

所以程序功能是将数组的偶数项设为0,奇数项如果为奇数则减1,为偶数就加1,最后得到结果。

8.若有以下程序段:inr=8;printf("%",r>>1);输出结果是()。

A.16
B.8
C.4 √
D.2
解析:c语言中“>>”是对二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位信息舍去,在高位补0,将所得的结果再赋值给变量。

本题中8的二进制为00001000,右移一位得到00000100,所以是4。

9.有以下定义语句,编译时会出现编译错误的是()。

A.chara=‘a'
B.chara=‘ ';
C.chara=‘aa';√
D.chara=‘-'
解析:本题中a为一个字符型变量,只能为其赋值一个字符常量。

C项中‘aa'不是字符常量,所以会编译错误。

BD两项为转义字符,编译可以通过。

10.下面结构体的定义语句中,错误的是()。

A.structord{intx;inty;intz;};structorda;
B.structord{intx;inty;intz;}structorda; √
C.structord{intx;inty;intz;}a;
D.struct{intx;inty;intz;}a;
解析:C语言中结构体变量的定义有3种方法:①定义结构体类型的同时定义结构体变量,如C项;②使用无名结构体类型定义结构体变量,如D项;③先定义结构体类型,后定义结构体变量,如A项。

11.有以下程序:#includ<stdio.h>#include<string.h>main()
chaa[10]="abcd"; printf("%d,%",strlen(a),sizeof(a));}程序运行后的输出结果是()。

A.7,4
B.4,10 √
C.8,8
D.10,10
解析:在C语言中,strlen()用来统计字符串中字符的个数,sizeof()是求分配给数组的存储空间大小。

题目中字符串a中字符个数为4,但由于数组a定义含有10个字符,所以所占空间大小为10。

12.以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。

#definMI-2147483647infingma(inx[],inn)ini,max;for(i=0;i<n;i++)max=MIN;if(max<x[i])
max=x[i];}returmax;}造成错误的原因是()。

A.定义语句inti,max;中max未赋初值
B.赋值语句max=MIN;中,不应给max赋MIN值
C.语句if(max-<x[i])max=x[i];中判断条件设置错误
D.赋值语句max=MIN;放错了位置√
解析:本题中for循环中首先将MIN值赋值给max,然后用x[i]与max的值比较。

每次都是将MIN值与x[i]值进行比较,所以无论x[i]的值是什么,都不会影响if的判断语句, max=[i]始终执行。

所以函数返回的是数组中最后一个元素的值。

本题的错误在于max=MIN的位置,for循环之前应先执行max=MIN。

13.设有定义:cha*c;以下选项中能够使字符型指针c正确指向一个字符串的是()。

A.charstr[]="string";c=str;√
B.scanf("%s",c);
C.c=getchar();
D.*c="string";
解析:B项中scanf()函数是将c定义为一个字符数组的数组名,C项中是将c定义为一个字符型变量,D项是在指针定义时为它赋值,否则是不合法的,所以BCD三项都不正确。

A项定义字符数组str,再将字符数组str的首地址赋给字符型指针c,正确。

相关主题