2002年9月全国计算机等级考试二级C语言笔试试题
2002年9月全国计算机等级考试二级C语言笔试试题
更新于:2007年9月19日 念时
一、选择题((1)-(40)题每小题1分,(41)-(50)题每小题2分,共60分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)在32位计算机中,一个字长所占的字节数为______。
A) 1 B) 2 C) 4 D) 8
(2)与十进制511等值的十六进制数为______。
A) 1FF B) 2FF C) 1FE D) 2FE
(3)能将高级语言编写的源程序转换成目标程序的是______。
A) 编辑程序 B) 编译程序 C) 解释程序 D) 链接程序
(4)在计算机系统中,存储一个汉字的国标码所需要的字节数为______。
A) 1 B) 2 C) 3 D) 4
(5)下列带有通配符的文件名,能表示文件ABC.TXT的是______。
A) *BC.? B) A?.* C) ?BC.* D) ?.?
(6)在多媒体计算机系统中,不能用以存储多媒体信息的是______。
A) 光缆 B) 软盘 C) 硬盘 D) 光盘
(7)DOS命令“COPY/?”的功能是______。
A) 将当前盘当前目录中的所有文件复制到当前盘的根目录下
B) 将当前盘当前目录中所有以单个字符命名的文件复制到当前盘的根目录下
C) 以提示方式复制文件 D) 显示COPY命令的帮助信息
(8)在Windows环境下,若要将当前活动窗口存入剪贴板,则可以按______。
A) Ctrl+PrintScreen键 B) Shift+PrintScreen键
C) PrintScreen键 D) Alt+PrintScreen键
(9)在Windows环境下,单击当前应用程序窗口的“关闭”按钮,其功能是______。
A) 将当前应用程序转为后台运行 B) 退出Windows后再关机
C) 退出Windows后重新启动计算机 D) 终止当前应用程序的运行
(10)在Windows环境下,粘贴快捷键是______。
A) Ctrl+Z B) Ctrl+X C) Ctrl+C D) Ctrl+V
(11)以下叙述中正确的是______。
A) 构成C程序的基本单位是函数 B) 可以在一个函数中定义另一个函数
C) main()函数必须放在其它函数之前 D) 所有被调用的函数一定要在调用之前进行定义
(12)以下选项中合法的实型常数是______。
A) 5E2.0 B) E-3 C) .2E0 D) 1.3E
(13)以下选项中合法的用户标识符是______。
A) long B) _2Test C) 3Dmax D) A.dat
(14)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是______。
A) 字符A B) 字符a C) 字符e D) 非法的常量
(15)以下非法的赋值语句是______。
A) n=(i=2,++i); B) j++; C) ++(i+1); D) x=j>0;
(16)设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是______。
A) 6.500000 B) 6 C) 5.500000 D) 6.000000
(17)已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值 为3,以下选项中正确的输入语句是______。
A) scanf("%2d%2d%2d",&i,&j,&k); B) scanf(""%d %d %d",&i,&j,&k);
C) scanf("%d,%d,%d",&i,&j,&k); D) scanf("i=%d,j=%d,k=%d",&i,&j,&k);
(18)与数学式子3乘以x的n次方/(2x-1)对应的C语言表达式是______。
A) 3*x^n/(2*x-1) B) 3*x**n/(2*x-1)
C) 3*pow(x,n)*(1/(2*x-1)) D) 3*pow(n,x)/(2*x-1)
(19)设有定义:long x=-123456L;,则以下能够正确输出变量x值的语句是______。
A) printf("x=%d\n",x); B) printf("x=%ld\n",x);
C) printf("x=%8dL\n",x); D) printf("x=%LD\n",x);
(20)若有以下程序:
main()
{int k=2,i=2,m;
m=(k+=i*=k); printf("%d,%d\n",m,i);
}
执行后的输出结果是______。
A) 8,6 B) 8,3 C) 6,4 D) 7,4
(21)已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1&&y+z/2的值是______。
A) 6 B) 0 C) 2 D) 1
(22)有一函数
1 x>0
y= 0 x=0
-1 x<0,
以下程序段中不能根据x的值正确计算出y的值的是______。
A) if(x>0) y=1;else if(x==0) y=0;else y=-1; B) y=0;if(x>0) y=1;else if(x<0) y=-1;
C) y=0;if(x>=0)if(x>0) y=1;else y=-1; D) if(x>=0) if(x>0) y=1;else y=0;else y=-1;
(23)以下选项中,与k=n++完全等价的表达式是_______。
A) k=n,n=n+1 B) n=n+1,k=n C) k=++n D) k+=n+1
(24)以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出, 程序如下:
main()
{int n,k;
float score,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{for(k=1;k<=4;k++)
{scanf("%f",&score); sum+=score;}
ave=sum/4.0;
printf("NO%d:%f\n",n,ave);
}
}
上述程序运行后结果不正确,调试中发现有一条语句出现在程序的位置不正确。这条语句是______。
A) sum=0.0; B) sum+=score;
C) ave=sum/4.0; D) printf("NO%d:%f\n",n,ave);
(25)有以下程序段
int n=0,p;
do {scanf("%d",&p);n++;} while(p!=12345&&n<3);
此处do-while循环的结束条件是______。
A) p的值不等于12345并且n的值小于3 B) p的值等于12345并且n的值大于等于3
C) p的值不等于12345或者n的值小于3 D) p的值等于12345或者n的值大于等于3
(26)有以下程序
main()
{int a=15,b=21,m=0;
switch(a%3)
{case 0:m++;break;
case 1:m++;
switch(b%2)
{default:m++;
case 0:m++;break;
}
}
printf("%d\n",m);
}
程序运行后的输出结果是______。
A) 1 B) 2 C) 3 D) 4
(27)C语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是______。
A) void B) int C) float D) double
(28)若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是______。
A) p=q; B) *p=*q; C) n=*q; D) p=n;
(29)有以下程序
float fun(int x,int y)
{return(x+y); }
main()
{int a=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
}
程序运行后的输出结果是______。
(30)有以下程序
void fun(char *c,int d)
{*c=*c+1;d=d+1;
printf("%c,%c,",*c,d);
}
main()
{char a='A',b='a';
fun(&b,a); printf("%c,%c\n",a,b);
}
程序运行后的输出结果是______。
A) B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b
(31)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序
void sort(int a[],int n)
{int i,j,t;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]<a[j]) {t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
sort(&aa[3],5);
for(i=0;i<10;i++) printf("%d,",aa[i]);
printf("\n");
}
程序运行后的输出结果是______。
A) 1,2,3,4,5,6,7,8,9,10, B) 10,9,8,7,6,5,4,3,2,1,
C) 1,2,3,8,7,6,5,4,9,10, D) 1,2,10,9,8,7,6,5,4,3,
(32)有以下程序
int f(int n)
{if (n==1) return 1;
else return f(n-1)+1;
}
main()
{int i,j=0;
for(i=1;i<3;i++) j+=f(i);
printf("%d\n",j);
}
程序运行后的输出结果是______。
A) 4 B) 3 C) 2 D) 1
(33)有以下程序
main()
{char a[]={'a','b','c','d','e','f','g','h','\0'}; int i,j;
i=sizeof(a); j=strlen(a);
printf("%d,%d\n",i,j);
}
程序运行后的输出结果是______。
A) 9,9 B) 8,9 C) 1,8 D) 9,8
(34)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。
void reverse(int a[],int n)
{int i,t;
for(i=0;i<n/2;i++)
{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}
}
main()
{int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0;
reverse(b,8);
for(i=6;i<10;i++) s+=b[i];
printf("%d\n",s);
}
程序运行后的输出结果是______。
A) 22 B) 10 C) 34 D) 30
(35)有以下程序
main()
{int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i,s=0;
for(i=0;i<4;i++) s+=aa[i][1];
printf("%d\n",s);
}
程序运行后的输出结果是______。
A) 11 B) 19 C) 13 D) 20
(36)有以下程序
#include <string.h>
main()
{char *p="abcde\0fghjik\0";
printf("%d\n",strlen(p));
}
程序运行后的输出结果是______。
A) 12 B) 15 C) 6 D) 5
(37)程序中头文件type1.h的内容是:
#define N 5
#define M1 N*3
程序如下:
#include "type1.h"
#define M2 N*2
main()
{int i;
i=M1+M2; printf("%d\n",i);
}
程序编译后运行的输出结果是______。
A) 10 B) 20 C) 25 D) 30
(38)有以下程序
#include <stdio.h>
main()
{FILE *fp; int i=20,j=30,k,n;
fp=fopen("d1.dat","w");
fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d%d",&k,&n); printf("%d%d\n",k,n);
fclose(fp);
}
程序运行后的输出结果是_____。
A) 20 30 B) 20 50 C) 30 50 D) 30 20
(39)以下叙述中错误的是______。
A) 二进制文件打开后可以先读文件的末尾,而顺序文件不可以
B) 在程序结束时,应当用fclose函数关闭已打开的文件
C) 利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数据
D) 不可以用FILE定义指向二进制文件的文件指针
(40)有以下程序
#include <string.h>
main(int argc,char *argv[])
{int i,len=0;
for(i=1;i<argc;i++) len+=strlen(argv[i]);
printf("%d\n",len);
}
程序编译连接后生成的可执行文件是ex1.exe,若运行时输入带参数的命令行是:
ex1 abcd efg 10<回车>
则运行的结果是______。
A) 22 B) 17 C) 12 D) 9
(41)有以下程序
int fa(int x)
{return x*x; }
int fb(int x)
{return x*x*x; }
int f(int (*f1)(),int (*f2)(),int x)
{return f2(x)-f1(x); }
main()
{int i;
i=f(fa,fb,2); printf("%d\n",i);
}
程序运行后的输出结果是______。
A) -4 B) 1 C) 4 D) 8
(42)有以下程序
int a=3;
main()
{int s=0;
{int a=5; s+=a++; }
s+=a++; printf("%d\n",s);
}
程序运行后的输出结果是_______。
A) 8 B) 10 C) 7 D) 11
(43)有以下程序
void ss(char *s,char t)
{while(*s)
{if(*s==t) *s=t-'a'+'A';
s++;
}
}
main()
{char str1[100]="abcddfefdbd",c='d';
ss(str1,c); printf("%s\n",str1);
}
程序运行后的输出结果是______。
A) ABCDDEFEDBD B) abcDDfefDbD
C) abcAAfefAbA D) Abcddfefdbd
(44)有以下程序
struct STU
{char num[10]; float score[3]; }
main()
{struct STU s[3]={{"20021",90,95,85},
{"20022",95,80,75},
{"20023",100,95,90}},*p=s;
int i; float sum=0;
for(i=0;i<3;i++)
sum=sum+p->score[i];
printf("%6.2f\n",sum);
}
程序运行后的输出结果是______。
A) 260.00 B) 270.00 C) 280.00 D) 285.00
(45)设有如下定义:
struct sk
{int a;
float b;
}data;
int *p;
若要使p指向data中的a域,正确的赋值语句是______。
A) p=&a; B) p=data.a; C) p=&data.a; D) *p=data.a
(46)有以下程序
#include <stdlib.h>
struct NODE
{int num; struct NODE *next; }
main()
{struct NODE *p,*q,*r;
p=(struct NODE *)malloc(sizeof(struct NODE));
q=(struct NODE *)malloc(sizeof(struct NODE));
r=(struct NODE *)malloc(sizeof(struct NODE));
p->num=10;q->num=20;r->num=30;
p->next=q;q->next=r;
printf("%d\n",p->num+q->next->num);
}
程序运行后的输出结果是______。
A) 10 B) 20 C) 30 D) 40
(47)若有以下说明和定义typedef int *INTEGER
INTEGER p,*q;
以下叙述正确的是______。
A) p是int型变量 B) p是基类型为int的指针变量
C) q是基类型为int的指针变量 D) 程序中可用INTEGER代替int类型名
(48)有以下程序
main()
{unsigned char a,b,c;
a=0x3; b=a|0x8; c=b<<1;
printf("%d%d\n",b,c);
}
程序运行后的输出结果是______。
A) -11 12 B) -6 -13 C) 12 24 D) 11 22
(49)有以下程序
#include <stdlib.h>
main()
{char *p,*q;
p=(char *)malloc(sizeof(char)*20); q=p;
scanf("%s%s",p,q); printf("%s%s\n",p,q);
}
若从键盘输入:abc def<回车>,则输出结果是______。
A) def def B) abc def C) abc d D) d d
(50)以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。
#include <string.h>
void f(char p[][10],int n)
{ char t[20]; int i,j;
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(strcmp(p[i],p[j])<0)
{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}
}
main()
{char p[][10]={"abc","aabdfg","abbd","dcdbe","cd"};int i;
f(p,5); printf("%d\n",strlen(p[0]));
}
程序运行后的输出结果是
A) 6 B) 4 C) 5 D) 3
二、填空题(每空2分,共40分)
请将每一个空的正确答案写在答案卡上,答在试卷上不得分。
(1)计算机软件分为系统软件和应用软件,操作系统属于【1】 。
(2) 在DOS环境下,代表键盘和显示器的设备文件名为【2】。
(3) 支持Internet基本服务的协议是【3】。
(4) 从Windows环境进入MS-DOS方式后,返回Windows环境的DOS命令为【4】。
(5) 某微型机的运算速度为2MIPS,则该微型机每秒执行【5】条指令。
(6) 以下程序运行后的输出结果是【6】。
main()
{int x=10,y=20,t=0;
if(x==y)t=x;x=y;y=t;
printf("%d,%d\n",x,y);
}
(7)以下程序运行后的输出结果是【7】。
main()
{int x=15;
while(x>10&&x<50)
{x++;
if(x/3){x++;break;}
else continue;
}
printf("%d\n",x);
}
(8)有以下程序:
#include <stdio.h>
main()
{char c;
while((c=getchar())!='?') putchar(--c);
}
程序运行时,如果从键盘输入:Y?N?<回车>,则输出结果为【8】。
(9)以下程序运行后的输出结果是【9】。
void fun(int x,int y)
{x=x+y;y=x-y;x=x-y;
printf("%d,%d,",x,y);}
main()
{int x=2,y=3;
fun(x,y);
printf("%d,%d\n",x,y);
}
(10)以下函数的功能是计算s=1+1/2!+1/3!+……+1/n!,请填空。
double fun(int n)
{double s=0.0,fac=1.0; int i;
for(i=1;i<=n;i++)
{fac=fac 【10】;
s=s+fac;
}
return s;
}
(11)下面程序的运行结果是:【11】。
#define N 10
#define s(x) x*x
#define f(x) (x*x)
main()
{int i1,i2;
i1=1000/s(N);i2=1000/f(N);
printf("%d %d\n",i1,i2);
}
(12)下面程序的运行结果是:【12】。
void swap(int *a,int *b)
{int *t;
t=a;a=b;b=t;
}
main()
{int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf("%d%d\n",*p,*q);
}
(13)下面程序的运行结果是:【13】。
typedef union student
{char name[10];
long sno;
char sex;
float score[4];
}STU;
main()
{STU a[5];
printf("%d\n",sizeof(a));
}
(14) 若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen(【14】);。
(15) 设有定义:int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。
s canf("%d",【15】);
printf("%d\n",【16】);
(16) fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。
#include <stdio.h>
#define N 100
int fun(int(*a)[N])
{int row,col,max,min;
for(row=0;row<N;row++)
{for(max=a[row][0],col=1;col<N;col++)
if(【17】) max=a[row][col];
if(row==0) min=max;
else if(【18】) min=max;
}
return min;
}
(17)函数sstrcmp()的功能是对两个字符串进行比较。当s 所指字符串和t所指字符相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp())。请填空。
#include <stdio.h>
int sstrcmp(char *s,char *t)
{while(*s&&*t&&*s==【19】)
{s++;t++; }
return 【20】;
}
答案将在后期陆续公布……敬请关注!念时