资源描述
广西区计算机等级二级C试题及答案
广西区计算机等级二级C试题
[ 点击数:488 更新时间:2006-2-18 作者:wla ]
减小字体 增大字体
选择题(50)
1、c语言规定:在一个源程序中,main函数的位置 A
A)必须在最开始
B)必须在系统调用的库函数的后面
C)可以任意
D)必须在最后
2、下面程序的运行结果是______。
main()
{struct cmplx {int x;
int y;
}cnum[2]={1,3,2,7};
printf(”%d\n”,cnum[0].y/cnum[0].x *cnum[l].x);
}
A)0 B)1 C)3 D)6
3、表达式18/4*2/8值的数据类型为_A____
A)int B)float C)double D)不确定
4、以下不正确的叙述是 D 。
A)在c程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
c)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放入a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数值.对于实型变量只能输入实型数值。
5、以下程序的运行结果是______。
#include "stdio.h”
main()
{struct date
{int year,month,day;
}today;
printf(“%d\n”,sizeof(struct date));
}
A)6 B)8 C)10 D)12
6、以下说法正确的是 。
A)输入项可以为一实型常量,如scanf("%f",3.5);
B)只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d”);
C)当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf (“%4.2f",&f);
D)当输入数据时,必须指明变量的地址,如scanf(“%f",&f);
7、己知各变量的类型说明如下:
int i=8,k,a,b;
unsigned long w=55;
double x=1.42,y=5.2;
则以下符合c语言语法的表达式是_____。
A)a+=a-=(b=4)*(a=3) B)a=a*3=2
C)x%(-3) D)y=float(i)
8、已知ch是字符型变量,下面不正确的赋值语句是______。
A)ch='a+b'; B) ch='\0'; C)ch='7'+'9'; D)ch=5+9
9、有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c),为使变量a的值为1.b为3,c为2,从键盘输入数据的正确形式应当是______。
A)132<回车>
B)1,3,2<回车>
C)a=l b=3c=2<回车>
D)a=1,b=3,c=2<回车>
10、逻辑运算符两侧运算对象的数据类型_____。
A)只能是0或l
B)只能是0或非0正数
c)只能是整型或字符型数据
D)可以是任何类型的数据
11、一个c程序的执行是从 。
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结柬
C)本程序的main函数开始,到本程序文件的最后一个函数结束
D)本程序文件的第一个函数开始,到本程序main函数结束
12、以下程序的输出结果是________。
main()
{int a=100,x=l0,y=20,ok1=5,ok2=0;
if(x<y)
if(y!=10)
if(!ok1)
a=1;
else
if(ok2) a=10;
a=-1;
printf("%d\n",a);
}
A)1 B)0 C)-1 D)值不确定
13、以下正确的叙述是_____。
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定
B)C语言允许main函数带形参,形参名只能是argc和argv
C)当main函数带有形参时,传给形参的值只能从命令行中得到
D)若有说明:main(int argc,char *argv),则形参argc的值必须大于1
14、阅读以下程序:
main()
{int a[l0]={2,4,6,8,10,12,14,16,18,20},*p;
p=a;
printf(“%x\n”,p),
printf(“%x\n”,p+9),
若假设第一个printf语句输出的是ffca,则第二个printf语句的输出是______。
A) ffdd B)ffdc C)ffde D)ffcd
15、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其正确的解释是_____。
main()
{int *p,*q,a,b;
p=&a;
printf("input a:");
scanf("%d",*p);
……
}
A)*p表示的是指针变量p的地址
B)*p表示的是变量a的值,而不是变量a的地址
c)*p表示的是指针变量p的值
D)*p只能用来说明p是—个指针变量
16、设有程序段
int k=10;
while(k=0) k=k-1;
则下面描述中正确的是_______。
A)while循环执行10次 B)循环是无限循环
C)循环体语句一次也不执行 D)循环体语句执行
17、为了避免在嵌套的条件语句if—else中产生二义性,c语言规定:
else总是与_______配对。
A)缩排位置相同的if B)其之前最近的if
c)其之后最近的if D)同一行上的if
18、以下程序的运行结果是_____。
main()
{ int m=5;
if(m++>5) printf("%d\n",m);
else printf("%d\n",m--);
}
A) 4 B) 5 C)6 D)7
19、执行以下语句后b的值为_____。
int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
A)5 B)0 C)6 D)1
20、若有定义:int a[5];则a数组中首元素的地址可以表示为_____。
A)&a B)a+l C)a D)&a[1]
21、以下程序段_____。
x=-1;
do
{x=x*x;}
while(!x);
A)是死循环 B)循环执行二次
C)循环执行一次 D)有语法错误
22、若i为整型变量,则循环执行次数是_____。
for(i=2;i==0;) printf("%d",i--);
A)无限次 B)0次 C)1次 D)2次
23、以下有关宏替换的叙述不正确的是______。
A)宏替换不占用运行时间 B)宏名无类型
C)宏替换只是字符替换 D)宏名必须用大写字母表示
24、下面程序的运行结果是______。
#include<stdio.h>
main()
{int y=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
A)-1 B)1 C)8 D)0
25、下列四组选项中,均不含c语言关键字的选项是______。
A)define B)getc C)include D)while
IF char scanf go
type printf case pow
26、下面程序的运行结果是____。
#include<stdio.h>
void delch(char *s)
{int i,j;
char *a;
a=s;
for(i=0,j=0;a[i]!='\0';i++)
if(a[i]>='0'&&a[i]<='9') {s[j]=a[i];j++;}
s[j]='\0';
}
main()
{char *item="a34bc";
delch(item);
printf("\n%s",item);
}
A)abc B)34 C)a34 D)a34bc
27、下列程序段不是死循环的是____。
A)int i=100;
while(1)
{i=i%100+1;
if(i>l00)break ;
}
B)for( ; ; );
C)int k=0;
do{++k; } while(k>=0);
D)int s=365;
while(s); --s;
28、根据定义和数据的插入方式,输入语句的正确形式为_____。
已有定义:float f1,f2;
数据的输入方式:4.52
3.5
A)scanf("%f,%f",&f1,&f2);
B)scanf("%f%f",&f1,&f2);
C)scanf("%3.2f %2.1f",&f1,&f2);
D)scanf("%3.2f,%2.1f",&f1,&f2);
29、在C语言中,引用数组元素时,其数组下标的数据类型允许是_____ 。
A)整型常量 B)整型表达式
C)整型常量或整型表达式 D)任何类型的表达式
30、下面程序的运行结果是
#include<stdio.h>
main()
{int num=0;
while(num<=2)
{num++;
printf("%d\n",num);
}
}
A) 1 B)1 C)1 D)1
2 2 2
3 3
4
31、若有如下语句
int x=3;
do{printf("%d\n",x-=2);} while(!(--x));
则上面程序段_____。
A)输出的是1 B)输出的是l和-2 C)输出的是3和0 D)是死循环
32、以下能对一维数组a进行正确初始化的语句是______。
A)int a[l0]=(0,0,0,0,0); B) int a[l0]={};
C)int a[]={0}; D) int a[10]={10*1
33、以下不正确的定义语句是_____。
A)double x[5]={2.0,4.0,6.0,8.0,10.0};
B)int y[5]={0,1,3,5,7,9};
C)char c1[]=('1','2','3'',4','5');
D)char c2[]={'\x10','\xa','\x8'};
34、下面程序______(每行程序前面的数字表示行号)
1 main()
2 {
3 float a[0]={0.0};
4 int i;
5 for(i=0;i<3;i++) scanf("%d",&a[i]);
6 for(i=1;i<10;i++) a[0]=a[0]+a[i];
7 printf("%f\n",a[0]; }
A)没有错误 B)第3行有错误
C)第5行有错误 D)第7行有错误
35、下面程序段的运行结果是____。
char c[5]={'a','b','\0','c','\0'};
printf("%s",c);}
A)'a''b' B)ab C)ab c D)abc
36、下面四个选项中,均是合法的用户标识符的选项是______。
A)A B)float C)b_a D)_123
P_O 1ao goto temp
do _A int INT
37、以下正确的函数形式是____。
A)double fun(int x,int y)
{z=x+y,return z;)
B)fun(int x,y)
{int z;
return z;}
C)fun(x,y)
{ int x,y; double z;}
z=x+y;return z;}
D)double fun(int x,int y)
{ double z;
z=x+y;return z;}
38、若运行以下程序时,从键盘输入3.6 2.4<CR> (<CR>表示回车),则下面程序的运行结果是_______。
#include<math.h>
#include<stdio.h>
main()
{float x,y,z;
scanf("%f%f",&x,&y);
z=x/y;
while(1)
{if(fabs(z)>1.0) {x=y;y=z;z=x/y};
else break;
}
printf('%f\n",y);
}
A)1.500000 B)1.600000 C)2.000000 D)2.400000
39、若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为____。(假设a[0][0]位于数组的第一个位置上。)
A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1
40、已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是
if(x>y)
z=x;x=y;y=z;
A)x=10,y=20,z=30
B)x=20,y=30,z=30
C)x=20,y=30,z=10
D)x=20,y=30,z=20
41、以下叙述不正确的是 。
A)一个c源程序可由一个或多个函数组成
B)一个c源程序必须包含一个main函数
C)c程序的基本组成单位是函数
D)在c程序中,注释说明只能位于一条语句的后面
42、若有定义:int *p[4];则标识符p_____。
A)是一个指向整型变量的指针
B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组
D)说明不合法
43、以下关于运算符优先顺序的描述中正确的是——。
A)关系运算符<算术运算符<赋值运算符<逻辑与运算符
B)逻辑与运算符<关系运算符<算术运算符<赋值运算符
C)赋值运算符<逻辑与运算符<关系运算符<算术运算符
D)算术运算符<关系运算符<赋值运算符<逻辑与运算符
44、若有说明:int a[3][4]=(0);则下面正确的叙述是_____。
A)只有元素a[0][0]可得到初值0
B)此说明语句不正确
C)数组a中各元素都可得到初值,但其值不一定为0
D)数组a中每个元素均可得到初值0
45、下述对C语言字符数组的描述中错误的是_____。
A)字符数组可以存放字符串
B)字符数组的字符串可以整体输入、输出
C)可以在赋值语句中通过赋值运算符"="字符数组整体赋值
D)不可以用关系运算符对字符数组中的字符串进行比较
46、判断字符串a和b是否相等,应当使用_____。
A)if(a==b) B)if(a=b)
C)if(strcpy(a,b)) D)if(strcmp(a,b))
47、若有以下说明和语句:
struct student
{int age;
int num;
}std,*p;
p=&std;
则以下对结构体变量std中成员age的引用方式不正确的是_______。
A)std.age B) p->age
C)(*p).age D) *p.age
48、以下正确的说法是______。
A)定义函数时,形参的类型说明可以放在函数体内
B)return后边的值不能为表达式
C)如果函数值的类型与返回值类型不一致,以函数值类型为准
D)如果形参与实参的类型不一致,以实参类型为准
49、以下不正确的说法为_____。
A)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效
50、在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列
顺序为
A)char<int<long int=float<double
B)char=int<long int=float<double
C)char<int<long int<float=double
D)char=int=long int<float<double
51、以下程序的正确运行结果是______。
main()
{int a=2;
for(i=0;i<3;i++) printf("%4d",f(a));
}
f(int a)
{int b=0;static int c=3;
b++;c++;
return(a+b+c);
}
A) 7 7 7
B) 7 l0 13
C) 7 9 11
7 8 9
52、以下正确的描述是_______。
A)c语言的预处理功能是指完成宏替换和包含文件的调用
B)预处理指令只能位于c源程序文件的首部
C)凡是C源程序中行首以"#"标识的控制行都是预处理指令
D)C语言的编译预处理就是对源程序进行初步的语法检查
53、请读程序:
#define ADD(x) x+x
main()
{int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf("sum=%d",sum);
上面程序的运行结果是_____。
A)sum=9 B)sum=10 C)sum=12 D)sum=18
54、若有语句int *point,a=4;和point=&a; 下面均代表地址的一组选项是
_______。
A)a,point,*&a B)&*a,&a,*point
C)*&point,*point,&a D)&a,&*point,point
55、以下错误的描述是_____。
函数调用可以 A)出现在执行语句中
B)出现在一个表达式中
C)做为一个函数的实参
D)做为一个函数的形参
56、已有定义int a=-2;和输出语句:printf(“%8Lx”,a);以下正确的叙述是 。
A)整型变量的输出格式符只有%d一种
B)%x是格式符的一种,它可以适用于任何一种类型的数据
C)%x是格式符的一种,其变量的值按十六进制输出,但%8Lx是错误的
D)%8Lx不是错误的格式符,其中数字8规定了输出字段的宽度
57、若用数组名作为函数调用的实参,传递给形参的是____。
A)数组的首地址
B)数组第一个元素的值
C)数组中全部元素的值
D)数组元素的个数
58、当运行以下程序时,从键盘输入Happy!<CR>(<CR>表示回车),则下面程序的运行结果是_______。
#include<stdio.h>
#include<string,h>
main()
{char str[10],*p=str;
gets(p);
printf(“%d\n”,stre(p));
}
stre(char str[])
{int num=0;
while(*(str+num)!='\0') num++;
return(num);
}
A)7 B)6 C)5 D)10
59、下面有关for循环的正确描述是_____。
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判断表达式
c)在for循环中,不能用break语句跳出循环体
D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
60、设有如下定义:
struct sk
{int n;
float xl;
}data,*p;
若要使p指向data中的n域,正确的赋值语句是_____。
A)p=&data.n;
B)*p=data.n;
C)p=(struct sk *)&data.n;
D)p=(struct sk *)data.n;
61、若有以下定义和语句,则对a数组元素的正确引用为______。
int a[2][3],(*p)[3];
p=a,
A)(p+1)[0] B)*(*(p+2)+1) C)*(p[l]+1) D)p[1]+2
62、若有以下说明和语句:
char *languge[]={"F0RTRAN“,"BASIC”,"PASCAL","JAVA”,"C”};
char **q; q=language+2';
则语句printf(”%s\n“,*q);______。
A)输出的是language[2]元素的地址
B)输出的是字符串PASCAL
C)输出的是1anguage[2]元素的值,它是字符串PASCAL的首地址
D)格式说明不正确,无法得到确定的输出
63、已有定义int x;float y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345 678<回车>,则y 的值为_____。
A)无定值 B)45.000000 C)678.000000 D)123.000000
64、下面程序的运行结果是_____。
#include<stdio.h>
main()
{static char a[]="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));
}
A)gae B)ga C)Language D)有语法错
65、表达式 0xl3&0xl7的值是____。
A)0x17 B)0xl3 C)0xf8 D)0xec
66、若已定义int a=5;下面对(1),(2)两个语句的正确解释是_____。
(1)int *p=&a; (2)*p=a;
A)语句(1)和(2)中的,p含义相同,都表示给指针变量p赋值
B)(1)和(2)语句的执行结果,都是把变量a的地址值献给指针变量p
C)(1)在对p进行说明的同时进行初始化,使p指向a
(2)将变量a的值赋给指针变量p
D)(1)在对P进行说明的同时进行韧始化
(2)将变量a的值赋于*p
67、若w、x、y、z、m均为int型变量,则执行下面语句后的m值是
w=1; x=2; y=3; z=4;
m=(w<x)?w:x;
m=(m<y)?m:y;
m=(m<z)?m:z;
A)l B)2 C)3 D)4
68、以下程序的运行结果是_____。
typedef union{long a[2];
int b[4];
char c[8];
}TY;
TY our;
main()
{printf(”%d\n”,sizeof(our)};
A)32 B)16 C)8 D)24
69、请读程序片断:
int x=20;
prtntf(”%d\n”, ~x);
上面程序片段的输出结果是______。
A)02 B)-20 C)-21 D)-11
70、当顺利执行了文件关闭操作时,fclose函数的返回值是_____。
A)-1 B)TURE C)0 D)1
71、系统的标准输入文件是指_____。
A)键盘 B) 显示器 c) 软盘 D)硬盘
72、根据下面的定义,能打印出字母M的语句是____。
struct person{char name[9];
int age;
}
struct person class[l0]={"John”,17,"Paul",19,"Mary",18,"adam",16};
A)printf("%c\n",class[3].name);
B)printf("%c\n",class[3].name[1]);
C)printf("%c\n",class[2].name[1]);
D)printf("%c\n",class[2].name[0]);
73、若有以下程序段:
int x=1,y=2;
x=x^y;
y=y^x;
x=x^y;
则执行以上语句后x和y的值分别是___。
A)x=l,b=2 B)x=2,y=2 C)x=2,y=1 D)x=1,y=1
给出结果,说明理由及以上语句可以起什么作用,给出等价的其它表述方法。
74、若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文
件方式字符串应是_______。
A)"ab+" B)"wb+" C)"rb+" D)"ab"
填空题(30)
1、有四个数a,b,c,d,要求按从大到小的顺序输出。请在【】内填入正确内容。
main()
{ int a,b,c,d,t ;
scanf(“%d%d%d%d,&a,&b,&c,&d);
if(a<b){t=a;a=b;b=t;}
if(【1】){t=c;c=d; d=t;}
if(a<c){t=a;a=c;c=t;}
if(【2】){t=b;b=c;c=t;}
if(b<d){t=b;b=d;d=t;}
if(c<d){t=c;c=d;d=t;}
printf(“%d%d%d%d\n”,a,b,c,d);
}
2、下面程序是从键盘输入一个三位数的学号,然后输出学号中百位数字是3的学号,输入0时结束循环。请在【】内填入正确内容。
#include<stdio.h>
main()
{long num;
scanf("%ld",&num);
do{if( 【1】 ) printf("%ld",num);
scanf("%ld",&num);
}while( 【2】 );
}
3、 a<500 r=0%
500<=a<1000 r=5%
1000<=a<2000 r=8%
2000<=a<3000 r=10%
3000<=a r=15%
以下程序对输入的一个奖金数,求税率金税和应交税款以及实得奖金数(扣除奖税后)。题中r代表税率,t代表税款,b代表实得奖金数。请在【】填入正确内容。
main()
{float a,r,t,b;
int c;
scanf(”%f",&a);
if(a>=3000)c=6
e1se c=【1】;
switch(c)
{ case 0:r=0;break;
case 1:r=0.05;break;
case 2:
case 3:【2】;break;
case 4:
case 5:r=0.1;break;
case 6:r=0.15;break;
}
t=a*r;
b=a-t;
printf("r=%f,t=%f,b=%f",r,t,b)}
}
4、下面程序的功能是计算l至10之间的奇数之和及偶数之和。请在【】内填入正确内容
#include<stdio.h>
main()
{int a,b,c,i;
a=c=0;
for(i=0;i<=10;i+=2)
{a+=i;
【1】;
c+=b;
}
printf("偶数之和=%d\n",a),
printf("奇数之和=%d\n”, 【2】); c
}
5、以下程序的功能是计算并打印复数的差。请在【】内填入正确内容。
struct comp
{float re;
float im;
};
struct comp *m(x,y)
struct comp *x,*y;
{【1】;
z=(struct comp *)malloc(sizeof(strut comp));
z->re=x->re-y->re;
z->im=x->im-y->im;
return(z);
}
main()
{ struct comp *t;
struct comp a,b;
a.re=1; a.im=2;
b.re=3; b.im=4;
t=m(【2】);
printf("z.re=%f,z.im=%f",t->re,t->im);
}
6、下面程序以每行4个数据的形式输出a数组,请填空。
#define N 20
main()
{int a[N],i;
for(i=0;i<N;i++) scanf("%d",【1】);
for(i=0;i<N;i++)
{if(【2】)【3】
printf("%3d",a[i]);
}
printf("%\n");
}
7、以下程序对输入的两个整数,按从大到小顺序输出。请在【】填入正确内容。
main()
{int x,y,z;
scanf("%d,%d,&x,&y);
if(【1】)
(z=x;【2】}
printf("%d,%d",x,y);
}
8、下面程序的功能是将小写字母变成对应大写字母后的第二个字母。其中y变成A,z变成B。请在【】内填入正确内容。
#include<stdio.h>
main()
{
char c;
while((c=getchar())!=’\0’)
{if(c>='a'&&c<='z')
{【1】;
if(c>'Z'&&c<='Z'+2)
【2】;
}
printf('%c",c);
}
}
9、下面程序段的运行结果是____ 。
char s[20]="abcd";
char *sp=s;
sp++;
puts(strcat(sp,”ABCD”));
10、设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。请填空。
main()
(int a[10]={1,2,3,4,5,6,7,8,9,10};
int k,s,i;
float ave 5;
for(k=s=i=O;i<10;i++)
{if(a[i]%2!=0)【1】;
s+=【2】;
k++;}
if(k!=0) {ave=s/k;printf("%d,%f\n",k,ave);}
11、下面程序段是把从终端法入的一行字符作为字符串放在字符数组中,然后输出。请填空。
int i;
char s[80],*p;
for(i=0;i<79;i++)
{s[i]=getchar();
if(s[i]=='\n') break;
}
s[i]=【1】;
p=【2】;
while(*p) putchar(*p++);
12、以下程序用来按学生姓名查询其排名和平均成绩。查询可连续进行,直到键入0时结束,请在【】内填入正确内容。
#include<stdio.h>
#includl<string.h>
#define NUM 4
struct studet
{int rank;
char *name;
float score,
};
【1】str[]={3,"Tom",89.3,
4,"Mary",78.2,
1,"Jack",95.1,
2,"Jim",90.6,
};
main()
{ char str[l0],
int i;
do {printf("Enter a name:");
scanf(“%s”,str);
for(i=0;i<NUM;i++)
if(【2】)
{printf("name :%8s\n",stu[i].name);
printf("rank :%3s\n",stu[i].rank);
printf("average :%5.1s\n",stu[i].score);
break;
}
if(i>=NUM) printf("Not found\n”);
}while(
展开阅读全文