2004年9月全国计算机等级考试二级C语言笔试试题及答案
1.与十进制数200等值的十六进制数为
A.A8 B.A4
C.C8 D.C4
2.DOS文件系统的组织结构属于
A.星形结构B.网形结构
C.环形结构D.树形结构
3. 对存储器按字节进行编址,若某存储器芯片共有10根地址线,则该存储器芯片的存储容量为
A.1KB B.2KB
C.4KB D.8KB
4. 在DOS环境下,代表键盘和显示器的设备文件名为
A.PRN B.CON
C.NUL D.LPT
5. 计算机网络的主要特点是
A.运算速度快B.运算精度高
C.资源共享D.人机交互
6.磁盘处于写保护状态时其中的数据
A.不能读出,不能删改B.可以读出,不能删改
C.不能读出,可以删改D.可以读出,可以删改
7.从Windows环境进入MS-DOS方式后,返回Windows环境的DOS命令为
A.EXIT B.QUIT
C.RET D.MSDO
8. 在Windows环境下,若资源管理器左宣传品中的某文件夹左边标有“+”标记,则表示
A.该文件夹为空
B.该文件夹中含有子文件夹
C.该文件夹中只包含有可执行文件
D.该文件夹中包含系统文件
9.在Windows菜单中,暗淡的命令名项目表示该命令
A.暂时不能用B.正在执行
C.包含下一层菜单D.包含对话框
10.在Windows环境下,单击当前窗口中的按钮“×”(右上角的关闭按钮),其功能是
A.将当前应用程序转为后台运行
B.退出Windows后再关机
C.终止当前应用程序的运行
D.退出Windows后重新启动计算机
11.用C语言编写的代码程序
A.可立即执行B.是一个源程序
C.经过编译即可执行D.经过编译解释才能执行
12.结构化程序由三种基本结构组成,三种基本结构组成的算法
A.可以完成任何复杂的任务
B.只能完成部分复杂的任务
C.只能完成符合结构化的任务
D.只能完成一些简单的任务
13. 以下定义语句中正确的是
A.char a='A'b='B'; B.floata=b=10.0;
C.int a=10,*b=&a; D.float*a,b=&a;
14.下列选项中,不能用作标识符的是
A._1234_ B._1_2
C.int_2_ D.2_int_
15.有以下定义语句
double a,b;int w; long c;
若各变量已正确赋值,则下列选项中正确的表达式是
A.a=a+b=b++ B.w%(int)a+b
C.(c+w)%(int)a D.w=a==b;
16.有以下程序
main()
{ intm=3,n=4,x;
x=-m++;
x=x+8/++n;
printf("%d\n",x);
}
程序运行后的输出结果是
A.3 B.5
C.-1 D.-2
17.有以下程序
main()
{ chara='a',b;
print("%c,",++a);
printf("%c\n",b=a++);
}
程序运行后的输出结果是
A.b,b B.b,c
C.a,b D.a,c
18.有以下程序
main()
{ int m=0256,n=256;
printf("%o%o\n",mn,n);
}
程序运行后的输出结果是
A.0256 0400
B.0256 256
C.256 400
D.400 400
19.有以下程序
main()
{ inta=666,b=888;
printf("%d\n",a,
B.;
}
程序运行后的输出结果是
A.错误信息
B.666
C.888
D.666,888
20.有以下程序
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{
case0:printf("%d",i);
case2:printf("%d",i);
default:printf("%d",i);
}
}
程序运行后的输出结果是
A.022111
B.021021
C.000122
D.012
21.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是
资料来源:东方教育网全国计算机等级考试频道Http://www.eastedu.com.cn
A.abs(x-y)<10
B.x-y>-10&& x-y<10
C.@(x-y)<-10||!(y-x)>10
D.(x-y)*(x-y)<100
22.有以下程序
main()
{
inta=3,b=4,c=5,d=2;
if(a>
B.
if(b>
C.
printf("%d",d+++1);
else
printf("%d",++d+1);
printf("%d\n",
D.;
}
程序运行后的输出结果是
A.2
B.3
C.43
D.44
23.下列条件语句中,功能与其他语句不同的是
A. if(a) printf("%d\n",x);else printf("%d\n",y);
B. if(a==0)printf("%d\n",y); else printf("%d\n",x);
C. if (a!=0)printf("%d\n",x); else printf("%d\n",y);
D. if(a==0) printf("%d\n",x);else printf("%d\n",y);
24.有以下程序
main()
{ inti=0,x=0;
for (;;)
{
if(i==3||i==5)continue;
if (i==6)break;
i++;
s+=i;
};
printf("%d\n",s);
}
程序运行后的输出结果是
A.10
B.13
C.21
D.程序进入死循环
25.若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是B
A.for(i=1,p=1;i<=5;i++) p*=i;
B.for(i=1;i<=5;i++){ p=1; p*=i;}
C.i=1;p=1;while(i<=5){p*=i; i++;}
D.i=1;p=1;do{p*=i; i++;}while(i<=5);
26.有以下程序
main()
{ chara,b,c,d;
scanf("%c,%c,%d,%d",&a,&b,&c,&
D.;
printf("c,%c,%c,%c\n",a,b,c,
D.;
}
若运行时从键盘上输入:6,5,65,66<回车>。则输出结果是
A.6,5,A,B
B.6,5,65,66
C.6,5,6,5
D.6,5,6,6
27)以下能正确定义二维数组的是
A.int a[][3];
B.int a[][3]=2{2*3};
C.int a[][3]={};
D.int a[2][3]={{1},{2},{3,4}};
28. 有以下程序
int f(int a)
{ returna%2; }
main()
{ ints[8]={1,3,5,2,4,6},i,d=0;
for(i=0;f(s);i++) d+=s;
printf("%d\n",
D.;
}
程序运行后的输出结果是
A.9
B.11
C.19
D.21
29.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是
A.p+1
B.*(p+3)
C.*(p+1)+3
D.*(p[0]+2])
30.有以下程序
main()
{ inta=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=p;p=q;q=r;
printf("%d,%d,%d,%d\n",*p,"q,a,
B.;
}
程序运行后的输出结果是
A.8,7,8,7
B.7,8,7,8
C.8,7,7,8
D.7,8,8,7
31.s12和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是
A.if(s1>s2)S;
B.if(strcmp(s1,s2))S;
C.if(strcmp(s2,s1)>0)S;
D.if(strcmp(s1,s2)>0)S;
资料来源:东方教育网全国计算机等级考试频道 Http://www.eastedu.com.cn
32.设有定义语句
intx[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值,不能完成此操作的语句是
A.for(i=0;i<6;i++) printf("-",*(p++));
B.for(i=0;i<6;i++)printf("-",*(p+i));
C.for(i=0;i<6;i++)printf("-",*p++);
D.for(i=0;i<6;i++)printf("-",(*p)++);
33.有以下程序
#include
main()
{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
*q=*(p+5);
printf("%d%d\n",*p,*1);
}
程序运行后的输出结果是
A.运行后报错
B.6 6
C.6 11
D.5 10
34有以下定义和语句
inta[3][2]={1,2,3,4,5,6,},*p[3];
p[0]=a[1];
则*p[0]+1)所代表的数组元素是
A.a[0][1]
B.a[1][0]
C.a[1][1]
D.a[1][2]
35.有以下程序
main()
{charstr[][10]={" China ","Beijing"},*p=str;
printf("%s\n",p+10);
}
程序运行后的输出结果是
A. China
B.Bejing
C.ng
D.ing
36. 有以下程序
main()
{chars[]="ABCD",*p;
for(p=s+1;p
}
程序运行后的输出结果是
A. ABCD
B.A
C.B
D.BCD
BCD B C CD
CD C D D
D D
37.在函数调用过程中,如果函数funA调用了函数 funB,函数funB又调用了函数funA,则
A.称为函数的直接递归调用
B.称为函数的间接递归调用
C.称为函数的循环调用
D.C语言中不允许这样的递归调用
38.已有定义:int i,a[10],*p;,则合法的赋值语句是
A.p=100;
B.p=a[5];
C.p=a[2]+2;
D.p=a+2;
39.以下叙述中正确的是
A.局部变量说明为static存储数,其生存期将得到延长
B.全局变量说明为static存储类,其作用域将被扩大
C.任何存储类的变量在未赋初值时,其值都是不确定的
D.形参可以使用的存储类说明符与局部变量完全相同
40.设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是
A.c1^c2
B.c1&c2
C.~c2
D.c1|c2
41.程序中对fun函数有如下说明
void *fun();
此说明的含义是:
A.fun了数无返回值
B.fun函数的返回值可以是任意的数据类型
C.fun函数的返回值是无值型的指针类型
D.指针fun指向一个函数,该函数无返回值
42.有以下程序
main()
{ chars[]"Yes\n/No",*ps=s;
puts(ps+4);
*(ps+4)=0;
puts(s);
}
程序运行后的输出结果是
A.n/No
B./No
C.n/NO
D.
Yes Yes Yes/No
/No /No Yes
43.有以下程序
main()
{ unsignedint a;
int b=-1;
a=b;
printf("%u",a);
}
程序运行后的输出结果是
A.-1
B.65535
C.32767
D.-32768
44.有以下程序
void fun(int*a,int i,int j)
{ int t;
if(i
{t=a;a=a[j];a[j]=t;
i++; j--;
fun(a,i,j);
}
}
main()
{ intx[]={2,6,18},i;
fun(x,0,3);
for(i=0;i<4;i++)printf("-",x);
printf("\n");
}
程序运行后的输出结果是
A.1 2 6 8
B. 8 6 2 1
C. 8 1 6 2
D.8 6 1 2
45.有以下说明和定义语句
structstudent
{ int age;char num[8];};
structstudentstu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};
structstudent *p=stu;
资料来源:东方教育网全国计算机等级考试频道 Http://www.eastedu.com.cn
以下选项中引用结构体变量成员的表达式错误的是
A. (p++)->num
B.p->num
C.(*p).num
D.stu[3].age
46.有以下程序
mina()
{ intx[]={1,3,5,7,2,4,6,0},i,j,k;
for(i=0;i<3;i++)
for(j=2;j>=i;j--)
if(x[j+1]>x[j]){k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j+1]>x[j]){k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j]>x[j+1]){k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<8;i++) printf("%d",x);
printf("\n");
}
程序运行后的输出结果是:
A.75310246
B.01234567
C.76310462
D.13570246
47.有如下程序
#include
main()
{FILE *fp1;
fp1=fopen("f1.txt","w");
fprintf(fp1,"abc");
fclose(fp1);
}
若文本文件f1.txt中原有内容为:good,则运行以上程序后文件f1.txt中的内容为
A.goodabc
B.abcd
C.abc
D.abcgood
48~50.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的
字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出
正确的选项。
#include
stuct node
{ chardata; struct node *next;};
(48)CreatList(char *s)
{ structnode *h,*p,*q);
h=(structnode *) malloc(sizeof(struct node));
p=q=h;
while(*s!='\0')
{ p=(structnode *) malloc(sizeof(struct node));
p->data=(49) ;
q->next=p;
q= (50) ;
s++;
}
p->next='\0';
return h;
}
main()
{ charstr[]="link list";
struct node*head;
head=CreatList(str);
...
}
(48)
A.char *
B.struct node
C.struct node*
D.char
(49)
A.*s
B.s
C.*s++
D.(*s)++
(50)
A.p->next
B.p
C.s
D.s->next
二、填空题:(每空2分,共40分)
1.在64位高档微机中,CPU能同时处理 _____ 个字节的二进制数据。
2.E-mail地址由域名和用户名两部分组成,它们之间用@分隔,其中在@后面的部分是 _______
3.Windows窗口一般由标题栏、菜单栏、控制按钮等部分组成。为了移动窗口,则要用鼠标拖动 _____
4.计算机软件分为系统软件和应用软件,UNIX系统属于 ________ 。
5.在Windows环境下,为了将屏幕内容存入剪贴板,应按 ________ 键。
6.以下程序段的输出结果是 _____
int i=9;
printf("%o\n",i);
7.以下程序运行后的输出结果是 _______ 。
main()
{ inta,b,c;
a=25;
b=025;
c=0x25;
printf("%d %d %d\n',a,b,c);
}
8.以下程序运行后的输出结果是 ______ 。
main()
{ intp[7]={11,13,14,15,16,17,18};
inti=0,j=0;
while(i<7 && p%2==1) j+=p[i++];
printf("%d\n",j);
}
9.以下程序运行后的输出结果是 _______ 。
main()
{ intx=1,y=0,a=0,b=0;
switch(x)
{case1:switch(y)
{ case0:a++; break;
case 1:b++;break;
}
case2:a++;b++; break;
}
printf("%d %d\n",a,b);
}
10.以下程序运行后的输出结果是 _______ 。
main()
{ inta[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
inti=0,j=0,s=0;
while(i++<4)
{
if(i==2||i==4) continue;
j=0;
do{ s+=a[j]; j++; } while(j<4);
}
printf("%d\n",s);
}
11.以下程序运行后的输出结果是 _____ 。
main ()
{ chara[]="Language",b[]="Programe";
char*p1,*p2; int k;
p1=a; p2=b;
for(k=0;k<=7;k++)
if(*p1+k)==*(p2+k)) printf("%c",*(p1+k));
}
12.以下程序运行后的输出结果是 _______ 。
main()
{ chara[]="123456789",*p; int i=0;
p=a;
while(*p)
{if(i%2==0) *p='*";
p++;i++;
}
puts(a);
}
13.以下程序中, for循环体执行的次数是 _____ 。
#define N 2
#define MN+1
#define KM+1*M/2
main()
{ int i;
for(i=1;i { ... ]
...
}
14、通过函数求f(x)的累加和,其中f(x)=x2+1
main()
{
printf("Thesum=%d\n",SunFun(10));
}
SunFun(int n)
{
int x,s=0;
for(x=0;x<=n;x++)s+=F(________);
return s;
}
F( int x)
{ return____________;}
15. 以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。
请填空。
main()
{ inti,a[20],sun,count;
suum=count=0;
for(i=0;i<20;i++) scanf("%d", _____ );
fro(i=0;i<20;i++)
{if(a>0)
{ count++;
sum+=______ ;
}
}
printf("sum=%d,count=%d\n",sum,count);
}
16.以下程序中,函数
sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。
#define M 2
#define N 4
voidSumColumMin(int a[M][N],int *sum)
{ inti,j,k,s=0;
for(i=0;i { k=0;
for(j=1;j if(a[k]>a[j])k=j;
s+= _______;
}
[*sum] =s;
}
main()
{ intx[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin( _______ );
printf("%d\n",s);
}
2004年9月二级C笔试答案
选择题
1-5 C D A BC 6-10 B A B A C
11-15 B C CD C 16-20 D A C B C
21-25 C A DD B 26-30 A C A D C
31-35 D D AC B 36-40 D B D A A
41-45 C B BC D 46-50 A C C A B
填空题
1. 8 2. 域名3. 标题栏
4. 系统软件5. PEINTSCREEN
6. 11 7. 25 21 37
8. 24 9. 21
10 . 92 11. gae
12.1*3*5*7*9 13. 4
14. x x*x+1 15. &a[i] a[i] 16. a[k][i] *sum x,&s