全国计算机等级考试二级笔试试卷基础部分和C语言程序设计
(考试时间:120分钟,满分100分)
2003年9月一、选择题,(1-40)每题1分,(41-50)每题2分,共60分)
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。
(1) 在计算机中,一个字节所包含二进制位的个数是
A) 2 B) 4 C) 8 D) 16
(2) 在多媒体计算机中,CD-ROM属于
A) 存储媒体 B) 传输媒体 C) 表现媒体 D) 表示媒体
(3) 在DOS系统中,带有通配符的文件名*.*表示
A) 硬盘上的全部文件 B) 当前盘当前目录中的全部文件
C) 当前盘上的全部文件 D) 根目录中的全部文件
(4) 十六进制数100转换为十进制数为
A) 256 B) 512 C) 1024 D) 64
(5) 能将高级语言编写的源程序转换为目标程序的软件是
A) 汇编程序 B) 编辑程序 C) 解释程序 D) 编译程序
(6) 在Internet中,用于在计算机之间传输文件的协议是
A) TELNET B) BBS C) FTP D) WWW
(7) 在Windows环境下,资源管理器左窗口中的某文件夹左边标有“+”标记表示
A) 该文件夹为空 B) 该文件夹中含子文件夹
C) 该文件夹中只包含有可执行文件 D) 该文件夹中包含系统文件
(8) 在Windows环境下,下列叙述中正确的是
A) 在“开始”菜单中可以增加项目,也可以删除项目
B) 在“开始”菜单中不能增加项目,也不能删除项目
C) 在“开始”菜单中可以增加项目,但不能删除项目
D) 在“开始”菜单中不能增加项目,但可以删除项目
(9) 从Windows环境进入DOS方式后,返回Windows环境的命令为
A) QUIT B) WIN C) EXIT D) ESC
(10) 下列叙述中正确的是
A) 计算机病毒只感染可执行文件
B) 计算机病毒只感染文本文件
C) 计算机病毒只能通过软件复制的方式进行传播
D) 计算机病毒可以通过读写磁盘或网络等方式进行传播
(11) 以下叙述中正确的是
A) C程序中注释部分可以出现在程序中任意合适的地方
B) 花括号“{”和“}”只能作为函数体的定界符
C) 构成C程序的基本单位是函数,所有函数名都可以由用户命名
D) 分号是C语句之间的分隔符,不是语句的一部分
(12) 以下选项中可作为C语言合法整数的是
A) 10110B B) 0386 C) 0Xffa D) x2a2
(13) 以下不能定义为用户标识符的是
A) scanf B) Void C) _3com_ D) int
(14) 有以下程序
main()
{ int a; char c=10;
float f=100.0; double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是
A) 1 65 1 6.5 B) 1 65 1.5 6.5
C) 1 65 1.0 6.5 D) 2 65 1.5 6.5
(15) 以下选项中非法的表达式是
A) 0<=x<100 B) i=j==0 C) (char)(65+3) D) x+1=x+1
(16) 有以下程序
main()
{int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
printf("%d,%d\n",k,m);
}
程序运行后的输出结果是
A) 0,0 B) 0,1 C) 1,0 D) 1,1
(17) 有定义语句:int x,y;,若要通过scanf("%d,%d",&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是
A) 11 12<回车> B) 11,12<回车>
C) 11,12<回车> D) 11,<回车>
12<回车>
(18) 设有如下程序段:
int x=2002,y=2003;
printf("%d\n",(x,y));
则以下叙述中正确的是
A) 输出语句中格式说明符的个数少于输出项的个数,不能正确输出
B) 运行时产生出错信息
C) 输出值为2002
D) 输出值为2003
(19) 设变量x为float型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是
A) x=x*100+0.5/100.0; B) x=(x*100+0.5)/100.0;
C) x=(int)(x*100+0.5)/100.0; D) x=(x/100+0.5)*100.0;
(20) 有定义语句:int a=1,b=2,c=3,x; 则以下选项中各程序段执行后,x的值不为3的是
A) if (c<a) x=1; B) if (a<3) x=3;
else if (b<a) x=2; else if (a<2) x=2;
else x=3; else x=1;
C) if (a<3) x=3; D) if (a<b) x=b;
if (a<2) x=2; if (b<c) x=c;
if (a<1) x=1; if (c<a) x=a;
(21) 有以下程序
main ()
{ int s=0,a=1,n;
scanf("%d",&n);
do
{ s+=1; a=a-2; }
while(a!=n);
printf("%d\n",s);
}
若要使程序的输出值为2,则应该从键盘给n输入的值是
A) -1 B) -3 C) -5 D) 0
(22) 若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)
s=a;
for(b=1;b<=c;b++) s=s+1;
则与上述程序段功能等价的赋值语句是
A) s=a+b; B) s=a+c; C) s=s+c; D) s=b+c;
(23) 有以下程序
main()
{ int k=4,n=4;
for( ; n<k ;)
{ n++;
if(n%3!=0) continue;
k--; }
printf("%d,%d\n",k,n);
}
程序运行后的输出结果是
A) 1,1 B) 2,2 C) 3,3 D) 4,4
(24) 要求以下程序的功能是计算,
main ()
{ int n; float s;
s=1.0;
for(n=10;n>1;n--)
s=s+1/n;
print("%6.4f\n",s);
}
程序运行后输出结果错误,导致错误结果的程序行是
A) s=1.0; B) for(n=10;n>1;n--)
C) s=s+1/n; D) printf("%6.4f/n",s);
(25) 已定义ch为字符型变量,以下赋值语句中错误的是
A) ch="\"; B) ch=62+3; C) ch=NULL; D) ch="\xaa";
(26) 若已定义的函数有返回值,则以关于该函数调用的叙述中错误的是
A) 调用可以作为独立的语句存在 B) 调用可以作为一个函数的实参
C) 调用可以出现在表达式中 D) 调用可以作为一个函数的形参
(27) 有以下函数定义:
void fun( int n,double x) { …… }
若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是
A) fun(int y,double m); B) k=fun(10,12.5);
C) fun(x,n); D) vold fun(n,x);
(28) 有以下程序
void fun(char *a,char *b)
{ a=b; (*a)++; }
main ()
{ char c1="A",c2="a",*p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf(“&c&c\n”,c1,c2);
}
程序运行后的输出结果是
A) Ab B) aa C) Aa D) Bb
(29) 若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是
A) t *i=NULL; B) float *f=NULL;
scanf("&d",f); *f=10.5;
C) char t="m",*c=&t; D) long *L;
*c=&t; L=‘\0’;
(30) 有以下程序
#inc1ude <stdio.h>
main()
{ printf("%d\n",NULL); }
程序运行后的输出结果是
A) 0 B) 1 C) -1 D) NULL没定义,出错
(31) 已定义c为字符型变量,则下列语句中正确的是
A) c=‘97’; B) c="97"; C) c=97; D) c="a";
(32) 以下不能正确定义二维数组的选项是
A) int a[2][2]={{1},{2}}; B) int a[][2]={1,2,3,4};
C) int a[2][2]={{1},2,3}; D) int a[2][]={{1,2},{3,4}};
(33) 以下选项中不能正确把c1定义成结构体变量的是
A) typedef struct B) struct color cl
{ int red; { int red;
int green; int green;
int blue; int blue;
} COLOR; };
COLOR cl;
C) struct color D) struct
{ int red; { int red;
int green; int green;
int blue; int blue;
} c l; } c l ;
(34) 以下能正确定义一维数组的选项是
A) int num []; B) #define N 100
Int num [N];
C) int num[0..100]; D) int N=100;
int num[N];
(35) 下列选项中正确的语句组是
A) char s[8]; s={"Beijing"}; B) char *s; s={"Beijing"};
C) char s[8]; s="Beijing"; D) char *s; s="Beijing";
(36) 已定义以下函数
fun (int *p)
{ return *p,}
该函数的返回值是
A) 不确定的值 B) 形参p中存放的值
C) 形参p所指存储单元中的值 D) 形参p的地址值
(37) 下列函数定义中,会出现编译错误的是
A) max(int x,int y,int *z) B) int max(int x,y)
{ *z=x>y? x:y; } int z ;
z=x>y? x:y;
return z ;
}
C) max (int x,int y) D) int max(int x,int y)
{ int z; { return(x>y?x:y) ; }
z=x>y?x:y; return(z);
}
(38) 有以下程序
#include <stdio.h>
#define F(X,Y) (X)*(Y)
main ()
{ int a=3,b=4;
printf("%d\n",F(a++,b++));
}
程序运行后的输出结果是
A) 12 B) 15 C) 16 D) 20
(39) 有以下程序
fun(int a,int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3,y=8,z=6,r;
r=fun (fun(x,y),2*z);
printf("%d\n",r);
}
程序运行后的输出结果是
A) 3 B) 6 C) 8 D) 12
(40) 若有定义:int *p[3];,则以下叙述中正确的是
A) 定义了一个基类型为int的指针变量p,该变量具有三个指针
B) 定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C) 定义了一个名为*p的整型数组,该数组含有三个int类型元素
D) 定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
(41) 以下程序中函数scmp的功能是返回形参指针s1和 s2所指字符串中较小字符串的首地址
#include <stdio.h>
#include <string.h>
char *scmp(char *s1,char *s2)
{ if( strcmp (s1,s2<0)
return(s1);
else return(s2);
}
main ()
{ int I; char string[20],str[3][20];
for(i=0;i<3;i++) gets(str[i]);
strcpy(string,scmp(str[0],str[1]));/*库函数strcpy对字符串进行复制*/
strcpy(string,scmp(string,str[2]));
printf("%s\n",string);
}
运行时依次输入:abcd、abba和abc三个字符串,则输出结果为
A) abcd B) abba C) abc D) abca
(42) 有以下程序
struct s
{ int x,y;} data[2]={10,100,20,200};
main ()
{ struct s *p=data;
printf("%d\n",++(p->x));
}
程序运行后的输出结果是
A) 10 B) 11 C) 20 D)21
(43) 有以下程序段
main()
{ int a=5,*b,**c;
c=&b; b=&a;
……
}
程序在执行了c=&b:b=&a;语句后,表达式:**c的值是
A) 变量a的地址 B) 变量b中的值 C) 变量a中的值 D) 变量b的地址
(44) 有以下程序
#include <string.h>
main()
{ char str[][20]={"Hello","Beijing"},*p=str;
printf("%d\n",strlin(p+20));
}
程序运行后的输出结果是
A) 0 B) 5 C) 7 D) 20
(45) 已定义以下函数
fun(char *p2,char *p1)
{ while((*p2=*p1)!=‘\0’){p1++;p2++; } }
函数的功能是
A) 将p1所指字符串复制到p2所指内存空间
B) 将p1 所指字符串的地址赋给指针 p2
C) 对p1和p2两个指针所指字符串进行比较
D) 检查p1和p2两个指针所指字符串中是否有‘\0’
(46) 有以下程序
main()
{ int x=3,y=2,z=1;
printf("%d\n",x/y&~z);
}
程序运行后的输出结果是
A) 3 B) 2 C) 1 D) 0
(47) 若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为
A) 0 B) 1 C) -1 D) 一个非0值
(48) 下列关于C语言数据文件的叙述中正确的是
A) 文件由ASCII码字符序列组成,C语言只能读写文本文件
B) 文件由二进制数据序列组成,C语言只能读写二进制文件
C) 文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件
D) 文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件
(49) 有以下程序
main()
{ int a[3][3],*p,i;
p=&a [0][0] ;
for ( i=0 ; i<9 ; i++) p[i]=i+1;
printf("%d\n",a[1][2]);
}
程序运行后的输出结果是
A) 3 B) 6 C) 9 D) 2
(50) 有以下结构体说明和变量定义,如图所示,指针p、q、r分别指向一个链表中的三个连续结点。
struct node
{ int data
struct node *next ;
} *p,*q,*r;

现要将q和r所指结点的先后位置交换,同时要保持链表的连续,以下错误的程序段是
A) r->next=q; q->next=r->next; p->next=r;
B) q->next=r->next; p->next=r; r->next=q;
C) p->next=r; q->next=r->next; r->next=q;
D) q->next=r->next; r->next=q; p->next=r;
二、填空题(每空2分,共40分)
请将每一个空的正确答案写在答题卡【1】至【20】序号的横线上,答在试卷上不得分.
(1) 计算机软件分为系统软件与应用软件,UNIX属于【1】 。
(2) 假设在当前盘的当前目录下有两个文件A.TXT和B.TXT,现要将文件B.TXT合并连接到文件A.TXT后面。若使用TYPE命令,则完整的命令为【2】 。
(3) Internet的信息服务方式分为基本服务和扩展服务,电子邮件属于【3】 。
(4) 在Windows环境下,利用菜单命令删除固定硬盘上的文件与文件夹,实际上是将需要删除的文件与文件夹移动到 【4】 文件夹中。
(5) 在Windows环境下,为了进行“添加/删除程序”操作,首先打开【5】,然后双击其中的相应图标。
(6) 以下程序运行后的输出结果是 【6】 。
main()
{ int p=30;
printf (“%d\n”,(p/3>0? p/10,p%3));
}
(7) 以下程序运行后的输出结果是 【7】 。
main()
{ char m;
m=‘B’+32; printf("%c\n",m);
}
(8) 以下程序运行后的输出结果是【8】 。
main()
{ int a=1,b=3,c=5;
if (c=a+b) printf("yes\n");
else printf("no\n");
}
(9) 以下程序运行后的输出结果是 【9】 。
main()
{ int i,m=0,n=0,k=0;
for (i=9; i<=11; i++)
switch(i/10)
{ case 0,m++; n++; break;
case 10,n++;break;
default,k++;n++;
}
printf("%d %d %d\n",m,n,k);
}
(10) 执行以下程序后,输出‘#’号的个数是 【10】 。
#include <stdio.h>
main()
{ int i,j;
for(i=1; i<5; i++)
for(j=2; j<=i; j++) putchar('#');
}
(11) 以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
int fun(int n)
{ int n=0,f=1,i;
for (i=1; i<=n; i++)
{ m+=i*f;
f= 【11】 ;
}
return m;
}
main()
{ printf("m=%d\n",【12】 );}
(12) 以下程序运行后的输出结果是 【13】
main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++)
{ n[i]=n[i-1]*2+1;
printf(“%d”,n[i]);
}
}
(13) 以下程序运行后的输出结果是 【14】
main()
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++)
{ for(j=0;j<3;j++) printf("&d ",a[i][j]);
printf("\n");
}
}
(14) 以下程序运行后的输出结果是 【15】
int a=5;
fun(int b)
{ static int a=10;
a+=b++;
printf("%d",a);
}
main()
{ int c=20;
fun(c);
a+=c++;
printf("%d\n",a);
}
(15) 请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。
【16】(double,double);
main()
{ double x,y;
scanf("%1f%1f",&x,&y);
printf("%1f\n",max(x,y));
}
double max(double a,double b)
{ return (a>b? a:b),}
(16) 以下程序运行后输入:3,abcde<回车>,则输出结果是 【17】
#include <string.h>
move(char *str,int n)
{ char temp ; int i;
temp=str[n-1];
for(i=n-1; i>0;i--) str[i]=str[i-1];
str[0]=temp;
}
main()
{ char s[50]; int n,i,z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1; i<=n; i++) move(s,z);
printf("%s\n",s);
}
(17) 以下程序运行后的输出结果是 【18】
fun(int x)
{ if (x/2>0) fun(x/2);
printf("%d",x);
}
main()
{ fun (6); }
(18) 已有定义如下:
struct node
{ int data;
struct node *next;|
} *p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。
请填空。
p=(struct node *) malloc( 【19】 );
(19) 以下程序的功能是将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。请填空。
#include <stdio.h>
#include <ctype.h>
main()
{ char s[80],d[80]; int i,j;
gets(s);
for(i=j=0; s[i]!=‘\0’; i++)
if( 【20】 ) { d[j]=s[i]; j++;}
d[j]=‘\0’;
puts(d);
}
〖完〗
2003年9月二级笔试试卷基础知识和C程序设计评分标准和参考答案选择题((1)~(40)每小题1分,(41)~(50)每小题2分,共60分)
C
A
B
A
D
C
B
A
C
D
A
C
D
B
D
C
A
D
C
C
B
B
C
C
A
D
C
A
D
A
C
D
B
B
D
C
B
A
D
B
B
B
C
C
A
D
A
D
B
A
二、填空题(每空2分,共20分)
(1)
【1】
系统软件
(2)
【2】
TYPE?B.T?XT?>>?A.TXT
(3)
【3】
基本服务
(4)
【4】
回收站
(5)
【5】
控制面板
(6)
【6】
3
(7)
【7】
b
(8)
【8】
yes
(9)
【9】
1 3 2
(10)
【10】
6
(11)
【11】
-f
【12】
fun(10)
(12)
【13】
1 3 7 15
(13)
【14】
1 2 3 0 5 6 0 0 9
(14)
【15】
30 25
(15)
【16】
double max
(16)
【17】
cdeab
(17)
【18】
1 3 6
(18)
【19】
sizeof(struct?node?)
(19)
【20】
s[i]>='0'?&&?s[i]<?='9'
【完】