1995年4月全国计算机等级考试二级C语言笔试试题

 更新于:2007年9月19日       念时

一、选择题((1)-(40)每小题1分,(41)-(50)每小题2分,共60分)
   下列各题 A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。

(1) 第一台电子数字计算机ENIAC诞生于
A) 1927年 B)1936年 C) 1946年 D) 1951年

(2) 用FORTRAN语言编制的源程序要变为目标程序,必须经过
A) 汇编 B) 解释 C) 编辑 D) 编译

(3) 计算机软件一般包括系统软件和
A) 字处理软件 B) 应用软件 C) 管理软件 D) 科学计算机软件

(4) 计算机内使用的数是
A) 二进制数 B) 八进制数 C) 十进制数 D) 十六进制数

(5) 目前微型机常用的5.25寸双面高密度软盘的容量是
A) 360KB B) 1.44MB C) 760KB D) 1.2MB

(6) 具有多媒体功能的微机系统常用CD-ROM作为外存储器,它是
A) 只读内存储器 B) 只读大容量软盘 C) 只读硬盘 D) 只读光盘

说明: (7)到(17)题给定的条件如下:
微机系统有A和B两个容量相同的软盘驱动器,硬盘C的目录结构为
文件AUTOEXEC.BAT的内容为
PROMPT $P$G
CD F4
CD \DOS

(7) 微机系统用硬盘C启动后,当前系统提示符是
A) C:\> B) C:\DOS> C) C:\F4> D) C>

(8) 在用C盘启动后,把A盘格式化成系统盘的命令为
A) FORMAT A: B) \FORMAT A:/S
C) \DOS\FORMAT A:/S D) \DOS\FORMAT A:\S

(9) 设当前盘为C盘,C盘当前目录为\DOS。把JD1.FOR和JD2.FOR连接起来后存入A盘根目录下,命名为JD3.FOR,应使用命令
A) COPY JD1.FOR+JD2.FOR A:JD3.FOR   B) COPY \F4\JD1.FOR+JD2.FOR A:\JD3.FOR
C) COPY \F4\JD1.FOR+\F4\JD2.FOR A:\JD3.FOR   D) COPY \F4\JD1.FOR+\F4\JD2.FOR JD3.FOR

(10) 设当前盘为C盘,C盘当前目录为\DOS。把FORMAT.COM和DISKCOPY.COM两个命令文件复制到A盘上的命令为
A) COPY \DOS\*.* A: B) COPY\*.COM A:
C) COPY DOS\*.* A: D) COPY DOS\*.COM A:

(11) 列出硬盘C上所有扩展名为.FOR文件的命令是
A) DIR\*.FOR B) DIR C:\F4\*.FOR C) DIR C:\*.FOR D) DIR C:\F4\*.*

(12) 把A盘的所有信息复制到B盘上的命令为
A) COPY A:*.* B: B) COPY A:*.* B:*.*
C) C:\DOS\DISKCOPY A: B: D) C:\DOS\DISKCOPY B: A:

(13) 设当前盘为C盘。删除硬盘C上的两个扩展名为.EXE文件的命令是
A) DEL\F4\*.EXE B) DEL\XD?.EXE C) DEL\F4\*.* D) DEL \*.EXE

(14) 设当前盘为C盘。C盘当前目录为\DOS。在硬盘C的根目录下建立新子目录USER的命令为
A) MD C:USER B) MD\USER\ C) MD\USER D) MD USER

(15) 设当前盘为C盘,C盘当前目录为根目录。在硬盘C上删除子目录F4的命令或命令组为
A) RD F4 B) RD\F4 C) DEL\F4\*.* D) DEL\*.*
RD F4 RD F4

(16) 设当前盘为C盘,C盘当前目录为根目录。把JD1.FOR改名为JX1.FOR的命令为
A) REN JD1.FOR JX1.FOR B) REN JX1.FOR JD1.FOR
C) REN F4\JD1.FOR JX1.FOR D) REN \F4\JX1.FOR JD1.FOR

(17) 显示C盘根目录下所有.TXT文件内容的命令为
A) TYPE C:\*.TXT B) TYPE C:\*.TXT>CON
C) COPY C:\*.TXT>CON D) COPY C:\*.TXT CON

(18) 按照数据模型分类,FoxBASE和dBASE是属于
A) 层次型 B) 网状型 C) 关系型 D) 混合型

(19) FoxBASE和dBASE命令文件的扩展名为
A) .PRG B) .DBF C) .MEM D) .TXT

(20) “计算机等级考试”这七个汉字作为字符串常量,在FoxBASE和dBASE中,可以表示为
A) {计算机等级考试} B) (计算机等级考试)
C) 计算机等级考试 D) “计算机等级考试”

(21) 请选出可用作C语言用户标识符的一组标识符
A) void B) a3_b3 C) For D) 2a
define _123 -abc DO
WORD IF Case sizeof

(22) 设 int a=12,则执行完语句 a+=a-=a*a后,a的值是
A) 552 B) 264 C) 144 D) -264

(23) C语言程序的基本单位是
A) 程序行 B) 语句 C) 函数 D) 字符

(24) 请选出合法的C语言赋值语句
A) a=b=58 B) i++; C) a=58,b=58 D) k=int(a+b);

(25) 执行下面程序片段的结果是
int x=23;
do
{ printf("%2d",x--);}
while(!x);
A) 打印出321 B) 打印出23 C) 不打印任何内容 D) 陷入死循环

(26) 请选出以下语句的输出结果
printf("%d\n",strlen("\t\"\065\xff\n"));
A) 5 B) 14 C) 8 D) 输出项不合法,无正常输出

(27) 设有如下的函数
ggg(x)
float x;
{ printf("\n%d",x*x);}
则函数的类型
A) 与参数x的类型相同 B) 是void C) 是int D) 无法确定

(28) 设有如下枚举类型定义:
enum language { Basic=3,Assembly,Ada=100,COBOL,Fortran};
枚举量Fortran的值为
A) 4 B) 7 C) 102 D) 103

(29) 若有以下说明和语句,请选出哪个是对c数组元素的正确引用
int c[4][5], (*cp)[5];
cp=c;
A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2)

(30) 标准函数 fgets(s, n, f) 的功能是
A) 从文件f中读取长度为n的字符串存入指针s所指的内存  B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存
C) 从文件f中读取n个字符串存入指针s所指的内存  D) 从文件f中读取长度为n-1的字符串存入指针s所指的内存

(31) 设有如下一段程序:
int *var,ab;
ab=100
var=&ab;
ab=*var+10;
执行上面的程序后,ab的值为
A) 120 B) 110 C) 100 D) 90

(32) 以下程序段给数组所有的元素输入数据,请选择正确答案填入。
#include
main()
{ int a[10],i=0;
while(i<10) scanf("%d",________ );

}
A) a+(i++) B) &a[i+1] C) a+i D) &a[++i]

(33) 设有如下的程序段:
char str[ ]="Hello";
char *ptr;
ptr=str;
执行上面的程序段后,*(ptr+5)的值为
A) 'o' B) '\0' C) 不确定的值 D) 'o'的地址

(34) 在宏定义 #define PI 3.14159中,用宏名PI代替一个
A) 单精度数 B) 双精度数 C) 常量 D) 字符串

(35) 字符(char)型数据在微机内存中的存储形式是
A) 反码 B) 补码 C) EBCDIC码 D) ASCII码

(36) 执行下面的程序段
int x=35;
char z='A';
int b;
B=((x&15)&&(z<'a'));
后,B的值为
A) 0 B) 1 C) 2 D) 3

(37) C语言规定,程序中各函数之间
A) 既允许直接递归调用也允许间接递归调用  B) 不允许直接递归调用也不允许间接递归调用
C) 允许直接递归调用不允许间接递归调用  D) 不允许直接递归调用允许间接递归调用

(38) 假设在程序中a,b,c均被定义成整型,并且已赋大于1的值,则下列能正确表示代数式 的表达式是
A) 1/a*b*c B) 1/(a*b*c) C) 1/a/b/(float)c D) 1.0/a/b/c

(39) 若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是
A) pb=&x B) pb=x; C) *pb=&x; D) *pb=*x

(40) 设有
static char str[ ]="Beijing";
则执行
printf("%d\n", strlen(strcpy(str,"China")));
后的输出结果为
A) 5 B) 7 C) 12 D) 14

(41) 设有如下程序:
#include
main()
{ int **k, *j, i=100;
j=&i; k=&j;
printf("%d\n", **k);
}
上面程序的输出结果是
A) 运行错误 B) 100 C) i的地址 D) j的地址

(42) 设 a=5, b=6, c=7, d=8, m=2, n=2, 执行
(m=a>b)&&(n=c>d)
后n的值为
A) 1 B) 2 C) 3 D) 4

(43) 下面函数的功能是
sss(s, t)
char *s, *t;
{ while((*s)&&(*t)&&(*t++== *s++));
return(*s-*t);
}
A) 求字符串的长度 B) 比较两个字符串的大小
C) 将字符串s复制到字符串t中 D) 将字符串s接续到字符串t中

(44) 请选出以下程序的输出结果
#include
sub(x,y,z)
int x, y, *z;
{ *z=y-x; }
main()
{ int a, b, c;
sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);
printf("%d,%d,%d\n", a,b,c);
}
A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-2,-7

(45) 下面程序的输出结果是
#include
main()
{ int i=2,p;
p=f(i,i+1);
printf("%d",p);
}
int f(a,b)
int a,b;
{ int c;
if(a>b) c=1;
else
if(a==b) c=0;
else c=-1;
return(c);
}
A) -1 B) 0 C) 1 D) 2

(46) 请选出以下程序段的输出结果
#include
#define MIN(x,y) (x)<(y)? (x):(y)
main()
{ int i,j,k;
i=10; j=15;
k=10*MIN(i,j);
printf("%d\n",k);
}
A) 15 B) 100 C) 10 D) 150

(47) 请选出以下程序段的输出结果
#include
main()
{ char sl[10], s2[10], s3[10], s4[10];
scanf("%s%s",s1,s2); gets(s3); gets(s4);
puts(s1); puts(s2); puts(s3); puts(s4);
}
输入数据如下:(此处代表回车符)
aaaa bbbb
cccc dddd
A) aaaa B) aaaa C) aaaa D) aaaa bbbb
bbbb bbbb bbbb cccc
cccc cccc dddd dddd
cccc dddd dddd eeee

(48) 请选出以下程序的输出结果
#include
fun(s, n1, n2)
int *s, n1, n2;
{ int i, j, t;
i=n1; j=n2;
while(i<J)
{ t= *(s+i); *(s+i)= *(s+j); *(s+j)=t;
i++; j--;
}
}
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,0},i, *p=a;
fun(p,0,3); fun(p,4,9); fun(p,0,9);
for(i=0; i<10; i++) printf("%d", *(a+i));
printf("\n");
}
A) 0 9 8 7 6 5 4 3 2 1 B) 4 3 2 1 0 9 8 7 6 5
C) 5 6 7 8 9 0 1 2 3 4 D) 0 9 8 7 6 5 1 2 3 4

(49) 请选出以下程序的输出结果
#include
main()
{ int a[ ]={ 1,2,3,4 },i;
int x=0;
for(i=0; i<4; i++)
{ sub(a,x); printf("%d",x);}
printf("\n");
}
sub(s,y)
int *s, y;
{ static int t=3;
y=s[t]; t--;
}
A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 D) 4 4 4 4

(50) 下面程序的输出结果为
struct st
{ int x;
int *y;
} *p;
int dt[4]={10,20,30,40};
struct st aa[4]={ 50,&dt[0],60,&dt[1],
70,&dt[2],80,&dt[3] };
main()
{ p=aa;
printf("%d\n", ++p->x );
printf("%d\n", (++p)->x);
printf("%d\n", ++( *p->y));
}
A) 10 B) 50 C) 51 D) 60
20 60 60 70
20 21 21 31

二、填空题(每空2分,共40分)
   请将每空的正确答案写在答题卡上【1】-【20】序号的横线上,答在试卷上不得分。


(1) 十进制数123用八位二进制表示为 【1】 。

(2) 70年代末开始出现16位微处理器,标志着微型计算机进入了第三代;80年代起使用 【2】 位微处理器,标志微型计算机进入了第四代。

(3) 通用计算机操作系统的功能和任务是:作业管理、文件管理、外设管理、CPU管理和 【3】 管理。

(4) PC-DOS的两个隐含文件是:IBMBIO.COM(输入输出程序)与 【4】 (磁盘操作管理程序)。

(5) FoxBASE和dBASE有两种变量:即内存变量和 【5】 变量 。

(6) 设有如下程序段:
int i=0, sum=1;
do
{ sum+=i++;}
while(i<6);
printf("%d\n", sum);
上述程序段的输出结果是 【6】 。

(7) 阅读下列程序:
#include
main()
{ int i, j, row, column,m;
static int array[3][3]={{100,200,300},
{28,72,-30},
{-850,2,6}
};
m=array[0][0];
for (i=0; i<3; i++)
for (j=0; j<3; i++)
if (array[i][j]<M)
{ m=array[i][j]; row=i; column=j;}
printf("%d,%d,%d\n",m,row,column);
}
上述程序的输出结果是 【7】 。

(8) 设a、b、c为整型数, 且a=2、b=3、c=4, 则执行完以下语句:
a*=16+(b++)-(++c);
后,a的值是 【8】 。

(9) 下面程序的输出结果是 【9】 。
#include
main()
{ int a=3, b=2, c=1;
c-=++b;
b*=a+c;
{ int b=5, c=12;
c/=b*2;
a-=c;
printf( '%d,%d,%d,",a,b,c);
a+=--c;
}
printf( '%d,%d,%d,",a,b,c);
}

(10) 设有如下程序:
#include
main(argc,argv)
int argc; char *argv[ ];
{ while( --argc>0) printf("%s",argv[argc]);
printf("\n");
}
假定上述程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROG ABCD EFGH IJKL ,则输出结果为 【10】 。

(11) 阅读下列程序:
#include
#define MAX_COUNT 4
void fun();
main()
{ int count;
for (count=1; count<=MAX_COUNT; count++) fun();
}
void fun()
{ static int i;
i+=2; printf("%d",i);
}
上述程序的输出结果是 【11】 。

(12) 设有下列程序:
#include
#include
main()
{ int i;
char str[10], temp[10];
gets(temp);
for (i=0; i<4; i++)
{ gets(str);
if (strcmp(temp,str)<0) strcpy(temp,str);
}
printf("%s\n",temp);
}
上述程序运行后,如果从键盘上输入(在此代表回车符):
C++
BASIC
QuickC
Ada
Pascal
则程序的输出结果是 【12】 。

(13) 设有如下程序:
#include
main(argc,argv)
int argc; char *argv[ ];
{ FILE *fp;
void fc();
int i=1;
while( --argc>0)
if((fp=fopen(argv[i++],"r"))==NULL)
{ printf("Cannot open file! \n");
exit(1);
}
else
{ fc(fp); fclose(fp); }
}
void fc(ifp)
FILE *ifp;
{ char c;
while((c=getc(ifp))!='#') putchar(c-32);
}
上述程序经编译、连接后生成可执行文件名为cpy.exe。假定磁盘上有三个 文本文件,其文件名和内容分别为:
文件名 内容
a aaaa#
b bbbb#
c cccc#
如果在DOS下键入
cpy a b c
则程序输出 【13】 。

(14) 若输入3个整数3,2,1,则下面程序的输出结果是【14】 。
#include
void sub( n,uu)
int n, uu[ ];
{ int t;
t=uu[n--]; t+=3*uu[n];
n=n++;
if(t>=10)
{ uu[n++]=t/10; uu[n]=t%10;}
else uu[n]=t;
}
main( )
{ int i, n, aa[10]={0,0,0,0,0,0}
scanf( "%d%d%d",&n,&aa[0],&aa[1]);
for(i=1; i
for(i=0; i<=n; i++) printf("%d",aa[i]);
printf("\n");
)

(15) 若有以下定义:
double w[10];
则w数组元素下标的上限为 【15】 ,下限为 【16】 。

(16) 以下程序统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。
#include
#include
main( )
{ int num[26],i; char c;
for(i=0; i<26; i++) num[i]=0;
while( 【17】 !='#') /*统计从终端输入的大写字母个数*/
if( isupper(c)) num[c-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/
if(num[i]) printf("%c:%d\n,i 【18】 , num[i]);
}

(17) 下面的程序调用getone函数开辟一个动态存储单元,调用assone函数把数据输入此动态存储单元,调用outone函数输出此动态存储单元中的数据。请填空。
#include
getone(s)
int **s;
{ *s=(int *)malloc(sizeof(int));}
assone(a)
int *a;
{ scanf("%d", 【19】 );}
outone(b)
int *b;
printf("%d\n", 【20】 );}
main( )
{ int *p;
getone(&p);
assone(p);
outone(p);
}


答案将在后期陆续公布……敬请关注!