2002年4月全国计算机等级考试二级C语言试卷(含答案)
发布时间:2006-10-14 8:53:53   收集提供:gaoqian

一、选择题((1)—(40)题每小题1分,(41)—(50)题每小题2分,共和60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1) 在计算机中,一个字长的二进制位数是
A) 8 B) 16 C) 32 D) 随CPU的型号而定
(2) 计算机网络的突出优点是
A) 速度快 B) 资源共享 C) 精度高 D) 容量大
(3) 计算机网络能传送的信息是:
A) 所有的多媒体信息 B) 只有文本信息
C) 除声音外的所有信息 D) 文本和图像信息
(4) 切断计算机电源后,下列存储器中的信息会丢失的是:
A) RAM B) ROM C) 软盘 D) 硬盘
(5) 十进制数127转换成二进制数是
A) 11111111 B) 01111111 C) 10000000 D) 11111110
(6) 要想打印存放在当前盘当前目录上所有扩展名为.TXT 的文件内容, 应该使用的DOS命令为
A) DIR *.TXT>PRN B) TYPE *.TXT>PRN
C) COPY *.TXT PRN D) COPY *.TXT>PRN
(7) 将当前盘当前目录及其子目录中的全部文件 (总量不足1.2MB) 复制到一张空的A盘的根目录下,应该使用的DOS命令为
A) XCOPY *.*A:\ /M B) XCOPY *.*A:\ /S
C) XCOPY *.*A:\ /P D) XCOPY *.*A:\ /A
(8) 在C盘根目录下执行PROMPT $p$g命令之后,DOS的提示符变为
A) C:> B) C:\> C) C> D) C:\
(9) DOS命令 "COPY CON DISP"中的CON代表
A) 子目录 B) 磁盘文件 C) 键盘 D) 显示器
(10) 结构化程序设计所规定的三种基本控制结构是
A) 输入、处理、输出 B) 树形、网形、环形
C) 顺序、选择、循环 D) 主程序、子程序、函数
(11) 要把高级语言编写的源程序转换为目标程序,需要使用
A) 编辑程序 B) 驱动程序 C) 诊断程序 D) 编译程序
(12) 英文小写字母d的ASCII码为100,英文大写字母D的ASCII码为
A) 50 B) 66 C) 52 D) 68
(13) Windows环境下,PrintScreen键的作用是
A) 复制当前窗口到剪贴板 B) 打印当前窗口的内容
C) 复制屏幕到剪贴板 D) 打印屏幕内容
(14) 在Windows环境下,为了终止应用程序的运行,应
A) 关闭该应用程序窗口 B) 最小化该应用程序窗口
C) 双击该应用程序窗口的标题栏 D) 将该应用程序窗口移出屏幕
(15) 下列各带有通配符的文件名中,能代表文件XYZ.TXT的是
A) *Z.? B) X*.* C) ?Z,TXT D) ?.?
(16) 若有定义:int a=8,b=5,C;,执行语句C=a/b+0.4;后,c的值为
A) 1.4 B) 1 C) 2.0 D) 2
(17) 若变量a是int类型,并执行了语句:a=‘A'+1.6;,则正确的叙述是
A) a的值是字符C B) a的值是浮点型
C) 不允许字符型和浮点型相加 D) a的值是字符‘A’的ASCII值加上1。
(18) 以下程序段的输出结果是
int a=1234;
printf("%2d\n",a);
A) 12 B) 34 C) 1234 D) 提示出错、无结果
(19) 以下选项中不属于C语言的类型的是
A) signed short imt B) unsigned long int
C) unsigned int D) long short
(20) 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
A) scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);
C) scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);
(21) 在16位C编译系统上,若定义long a; ,则能给a赋40000的正确语句是
A) a=20000+20000; B) a=4000*10;
C) a=30000+10000; D) a=4000L*10L;
(22) 以下叙述正确的是
A) 可以把define和if定义为用户标识符
B) 可以把define定义为用户标识符,但不能把if定义为用户标识符
C) 可以把if定义为用户标识符,但不能把define定义为用户标识符
D) define和if都不能定义为用户标识符
(23) 若定义:int a=511,*b=&a;, 则printf("%d\n",*b);的输出结果为
A) 无确定值 B) a的地址 C) 512 D) 511
(24) 以下程序的输出结果是
main()
{ int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}
A) 5 B) 4 C) 6 D) 不确定
(25) 以下程序中,while循环的循环次数是
main()
{ int i=0;
while(i<10)
{ if(i<1) continue;
if(I==5) break;
 i++;
}
......
}
A) 1 B) 10
C) 6 D) 死循环,不能确定次数
(26) 以下程序的输出结果是
main()
{ int a=0,i;
for(i=;i<5;i++)
{ switch(i)
{ case 0:
case 3:a+=2;
case 1:
case 2:a+=3;
default:a+=5;
}
}
printf("%d\n",a);
}
A) 31 B) 13 C) 10 D) 20
(27) 以下程序的输出结果是
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}
A) 1 B) 0 C) 非0的数 D) -1
(28) 以下程序的输出结果是
#include
main()
{ int i=0,a=0;
while(i<20)
{ for(;;)
{ if((i%10)==0) break;
else i--;
}
i+=11; a+=i;
}
printh("%d\n",a);
}
 A) 21 B) 32 C) 33 D) 11
(29) 以下程序的输出结果是
char cchar(char ch)
{
if(ch>=‘A’&&ch<=‘Z') ch=ch-‘A'+‘a';
return ch;
}
main()
{ char s[]="ABC+abc=defDEF",*p=s;
while(*p)
{ *p=cchar(*p);
p++;
}
printf("%s\n",s);
}
A) abc+ABC=DEFdef B) abc+abc=defdef
C) abcaABCDEFdef D) abcabcdefdef
(30) 以下程序的输出结果是
int f()
{ static int i=0;
int s=1;
s+=i; i++;
return s;
}
 main()
{ int i,a=0;
for(i=0;i<5;i++) a+=f();
printf("%d\n",a);
}
A) 20 B) 24 C) 25 D) 15
(31) 以下程序段的输出结果是
char s[]="\\141\141abc\t";
printf ("%d\n",strlen(s));
A) 9 B) 12 C) 13 D) 14
(32) 若有以下程序
#include
void f(int n);
main()
{ void f(int n);
 f(5);
}
void f(int n)
{ printf("%d\n",n); }
则以下叙述中不正确的是
A) 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B) 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f
C) 对于以上程序,编译时系统会提示出错信息:提示对对f函数重复说明
D) 函数f无返回值,所以可用void将其类型定义为无值型
(33) 以下程序调用findmax函数返回数组中的最大值
findmax(int *a,int n)
{ int *p,*s;
for(p=a,s=a; p-aif ( ) s=p;
return(*s);
}
main()
{ int x[5]={12,21,13,6,18};
printf("%d\n",findmax(x,5));
}
在下划线处应填入的是
A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s
(34) 以下程序的输出结果是
main()
{ char cf[3][5]={"AAAA","BBB","CC"};
printf("\"%s\"\n",ch[1]);
}
A) "AAAA" B) "BBB" C) "BBBCC" D) "CC"
(35) 在C语言中,形参的缺省存储类是
A) auto B) register C) static D) extern
(36) 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是
A) p=2*(int*)malloc(sizeof(int));
B) p=(int*)malloc(2*sizeof(int));
C) p=(int*)malloc(2*2);
D) p=(int*)calloc(2,sizeof(int));
(37) 以下程序的输出结果是
main()
{ char x=040;
 printf("%0\n",x<<1);
}
A) 100 B) 80 C) 64 D) 32
(38) 若要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是
A) fopen("A:\user\abc.txt","r") B) fopen("A:\\user\\abc.txt","r+")
C) fopen("A:\user\abc.txt","rb") C) fopen("A:\\user\\abc.txt","w")
(39) 以下不能正确进行字符串赋初值的语句是
A) char str[5]="good!"; B) char str[]="good!";
C) char *str="good!"; D) char str[5]={‘g',‘o',‘o',‘d'};
(40) 若有下面的说明和定义:
struct test
{ int ml; char m2; float m3;
union uu {char ul[5]; int u2[2];} ua;
} myaa;
则sizeof(struct test )的值是
A) 12 B) 16 C) 14 D) 9
(41) 若有定义:int aa[ 8];。则以下表达式中不能代表数组元aa[1]的地址的是
A) &aa[0]+1 B) &aa[1] C) &aa[0]++ D) aa+1
(42) 以下程序的输出结果是
f(int b[],int m,int n)
{ int i,s=0;
for(i=m;ireturn s;
}
main()
{int x,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3,7);
printf("%d\n",x);
}
A) 10 B) 18 C) 8 D) 15
(43) 若有以下定义和语句:
int s[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是
A) ps+1 B) *(ps+3) C) ps[0][2] D) *(ps+1)+3
(44) 以下程序的输出结果是
main()
{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
 for(i=0;i<3;i++)
 for(j=i;j<=i;j++) t=t+b[i][b[j][j]];
printf("%d\n",t);
}
 A) 3 B) 4 C) 1 D) 9
(45) 以下程序的输出结果是
#include
#include
main()
{ char b1[8]="abcdefg",b2[8],*pb=b1+3;
while (--pb>=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2));
}
A) 8 B) 3 C) 1 D) 7
(46) 在说明语句:int *f();中,标识符f代表的是
A) 一个用于指向整型数据的指针变量
B) 一个用于指向一维数组的行指针
C) 一个用于指向函数的指针变量
D) 一个返回值为指针型的函数名
(47) 不合法的main函数命令行参数表示形式是
A) main(int a,char *c[]) B) main(int arc,char **arv)
C) main(int argc,char *argv) D) main(int argv,char *argc[])
(48) 以下程序的输出的结果是
int x=3;
main()
{ int i;
for (i=1;i}
ncre()
{ staic int x=1;
x*=x+1;
printf(" %d",x);
}
A) 3 3 B) 2 2 C) 2 6 D) 2 5
(49) 若以下定义:
struct link
{ int data;
struck link *next;
}a,b,c,*p,*q;
且变量a和b之间已有如下图所示的链表结构:
a b
data next data next
┌──┬──┐ ┌──┬──┐
│ 5 │ ┼──→ │ 9 │ \0 │
└──┴──┘ └──┴──┘
↑p
c
data next
┌──┬──┐
│ 7 │ │
└──┴──┘
↑q
指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是:
A) a.next=c; c.next=b; B) p.next=q; q.next=p.next;
C) p->next=&c; q->next=p->next; D) (*p).next=q; (*q).next=&b;
(50) 设有以下说明语句
typedef struct
{ int n;
char ch[8];
}PER;
则下面叙述中正确的是
A) PER 是结构体变量名 B) PER是结构体类型名
C) typedef struct 是结构体类型 D) struct 是结构体类型名
二、填空题(每空2分,共40分)
请将每一个空的正确答案写在答案卡上,答在试卷上不得分。
(1) 为了要将当前盘目录中的可执行程序ABC.EXE的输出结果存放到当前盘当前目录中的文件OUT.TXT中,则应使用的DOS命令为【1】 。
(2) 计算机网络分为广域网和局域网,因特网属于【2】 。
(3) 要想在当前目录下方便地执行C盘\UCDOS目录中的程序,就应该先执行预设搜索路径的命令,该DOS命令为【3】 。
(4) 要查看当前目录中扩展名为.DAT的所有文件目录,应该使用的DOS 命令为【4】 。
(5) 在Windows环境下,当进行复制操作时,其复制的内容将存放在【5】中
(6) 若从键盘输入58,则以下程序输出的结果是 【6】 。
main()
{ int a;
scanf("%d",&a);
if(a>50) printf("%d",a);
if(a>40) printf("%d",a);
if(a>30) printf("%d",a);
}
(7) 以下程序的输出结果是【7】 。
main()
{ int a=177;
printf("%o\n",a);
}
(8) 以下程序的输出结果是【8】 。
 main()
{ int a=0
a+=(a=8);
printf("%d\n",a);
}
(9) 以下程序输出的结果是【9】 。
main()
{ int a=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
(10) 以下定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针.请将定义补充完整。
struct node
 {int info;
 【10】 link;
}
(11) 以下程序的输出结果是【11】 。
main()
 {int s,i;
 for(s=0,i=1;i<3;i++,s+=i);
 printf("%d\n",s);
}
(12) 以下程序的输出结果是【12】 。
main()
 { char *p="abcdefgh",*r;
 long *q;
 q=(long*)p;
 q++;
 r=(char*)q;
 printf("%s\n",r);
}
(13) 以下程序的输出结果是【13】 。
main()
{ char s[]="abcdef";
 s[3]=‘\0';
 printf("%s\n",s);
}
(14) 以下程序的输出结果是【14】 。
main()
{ int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{ if(k<=n) sub(a,n/2,2*k);
*a+=k;
}
(15) 设有如下宏定义
#define MYSWAP(z,x,y) {z=x; x=y; y=z;}
以下程序段通过宏调用实现变量a、b内容交换,请填空。
float a=5,b=16,c;
MYSWAP( 【15】 ,a,b);
(16) 以下程序用来统计文件中字符个数。请填空。
 #include "stdio.h"
 main()
 { FILE *fp; long num=0L;
 if((fp=fopen("fname.dat","r"))==NULL)
 { pirntf("Open error\n"); exit(0);}
 while( 【16】 )
 { fgetc(fp); num++;}
 printf("num=%1d\n",num-1);
 fclose(fp);
 }
(17) 以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。
#define N 3
#define M 3
 select(int a[N][M],int *n)
 { int i,j,row=1,colum=1;
for(i=0;ifor(j=0;jif(a[i][j]>a[row][colum]){row=i;colum=j;}
*n= 【17】;
return 【18】;
 }
 main()
 {int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;
 max=select(a,&n);
 printf("max=%d,line=%d\n",max,n);
 }
(18) mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。
int mystrlen(char *str)
{ int i;
for(i=0; 【19】!=‘\0';i++);
return(【20】);
}



基础部分和C语言程序设计试题
参考答案及评分标准
一、选择题(⑴-(40)题每题1分,(41)-(50)题每题2分,其60分)
(1) D (2) B (3) A (4) A (5) B
(6) C (7) B (8) B (9) C (10) C
(11) D (12) D (13) C (14) A (15) B
(16) B (17) D (18) C (19) D (20) A
(21) D (22) B (23) D (24) C (25) D
(26) A (27) A (28) B (29) B (30) D
(31) A (32) C (33) B (34) B (35) A
(36) A (37) A (38) B (39) A (40) A
(41) C (42) A (43) C (44) B (45) D
(46) D (47) C (48) C (49) C (50) B
二、填空题答案(每空2分,共40分)
(1) 【1】 ABC >OUT.TXT 或者 ABC.EXE>OUT.TXT
(2) 【2】 广域网
(3) 【3】 PATH C:\UCDOS 或其它等效命令
(4) 【4】 DIR *.DAT 或 DIR *.DAT/P 或 DIR *.DAT/W 或带其它参数也可
(5) 【5】 剪贴板
(6) 【6】 585858
(7) 【7】 261
(8) 【8】 16
(9) 【9】 0
(10) 【10】 struct node *
(11) 【11】 5
(12) 【12】 efgh
(13) 【13】 abc
(14) 【14】 7
(15) 【15】 c
(16) 【16】 !feof(fp)
(17) 【17】 row
(18) 【18】 a[row][colum]
(19) 【19】 *(str+i)str[i]
(20) 【20】 i



 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50