C语言试题 3.docx
《C语言试题 3.docx》由会员分享,可在线阅读,更多相关《C语言试题 3.docx(64页珍藏版)》请在冰豆网上搜索。
C语言试题3
C语言测试试卷
●C语言二级等级考试的笔试时间为120分钟,题型有选择题与填空题两种。
选择题每题1.5分,共40题,满分60分;填空题每空2分,共20空,满分40分。
●C语言笔试的选择题每题提供A、B、C、D四个答案供考生选择,四个答案中只有一个是正确的,考生需用铅笔在答题卡上对应位置涂黑所选答案的字母。
●C语言笔试的填空题答案须清楚地写在答题纸上,每空可能有多种写法,人工判卷时会正确处理。
●考生在完成选择题时,可采用排除法,先否定干扰性小的答案,对相似而又把握不定的答案,即干扰性强的答案,务必仔细分辨。
●对填空题,考生首先要看请题意,在题意的指导下,读懂程序,联系上、下语句,然后再着手填写。
(本大题共40个选项,【1】~【40】每个选择项1.5分,共60分)
1.下列属于C语言的是【1】。
A)printf("%d\n",a)B)#include
C)a=b;b=c;c=a;D)/*Thisisaprogram*/
2.设有语句intx=2,y=3;,则表达式x=(y==3)的值是【2】。
A)0B)1C)2D)3
3.C语言的下列运算符中,优先级最高的运算符是【3】。
A)++B)+=C)||D)!
=
4.已知'A'的ASCII码的十进制值为65,'0'的ASCII码的十进制值为48,则以下程序运行结果是【4】。
main()
{charch1,ch2;
ch1='A'+'5'-'3';
ch2='A'+'6'-'3';
printf("%d,%c\n",ch1,ch2);}A)67,DB)C,DC)C,68D)67,68
5-6.在C程序中,设一表达式含有int、long、unsigned和char类型的常数和变量,则表达式的最后运算结果是【5】,这四种类型的转换规律是【6】。
【5】A)intB)charC)unsignedD)long
【6】A)int->unsigned->long->charB)char->int->long->unsigned
C)char->int->unsigned->longD)char->unsigned->long->int
7.若a、b均为整数且a≠b,b≠0,则表达式a/b*b+a%b的值是【7】。
A)aB)bC)a被b除的余数部分D)a被b除商的整数部分
8.下列语句中,符合C语言语法的赋值语句是【7】。
A)a=7+b+c=a+7;B)a=7+b++=a+7;C)a=7+b,b++,a+7;D)a=7=b,c=a+7;
9.为表示x≥y≥z,须用的C语言表达式为【9】。
A)(x>=y)&&(y>=z)B)(x>=y)AND(y>=x)C)x>=y>=zD)(x>=y)&(y>=z)
10.设inta,b;,用语句scanf('%d%d",&b);输入a、b值时,不能作为输入数据分隔符的是【10】。
A)空格B),C)回车 D)[Tab]
11以下程序的运行结果是【11】。
main()
{inta=-1,b=4,k;
k=((a++<=0)&&(!
b--<=0));
printf("%d%d%d",k,a,b);}
A)003B)012C)103D)112
12.以下程序的运行结果是【12】。
main()
{intx=023;
printf("%d",x);}
A)35B)19C)23D)023
13.sizeof(double)是【13】。
A)一种函数调用B)一个双精度表达式C)一个整型表达式D)一个不合法的表达式
14.以下程序运行时,若从键盘输入5,则输出结果是【14】。
main()
{inta;
scanf("%d",&a);
if(a++>5)printf("%d\n",a);
elseprintf("%d\n",a--);}
A)7B)4C)5D)6
15.以下程序运行后,a的值是【15】。
main()
{inta,b;
for(a=1,b=2;a<=100;a++)
{
if(b>=20)break;
if(b%3==1)
{b+=3;continue;}
b+=5;}}
A)10B)9C)8D)7
16.以下程序段的运行结果是【16】。
intx=3;
do{printf("%3d,",x-=2);}while(!
(--x));
A)1B)30C)死循环D)1-2
17.下列程序段中,非死循环的是【17】。
【17】A)inti=100; B)intk=0;C)ints=10;D)for(;;)
while
(1)do{while(++s%2+s%2)
{i=i%100+1;++k;s++;
if(i>=100)break;}while(k>=0);
}printf("d\n",k);
18.设已定义chars[]="\"Name\\Address\023\n";,则字符串所占的字节数是【18】。
A)19B)15C)18D)14
19.以下程序段的运行结果是【19】。
main()
{inta[]={2,4,6,8,10},y=1,x;
for(x=0;x<3;x++)y+=a[x+1];
printf("%d\n",y);}
A)17B)18C)19D)20
20.已定义charc[]="Fujian";inti;,则下列函数调用中错误的是【20】。
A)printf("%s",c);B)for(i=0;i<8;i++)printf("%c",c[i]);
C)puts(c);D)for(i=0;i<8;i++)puts(c[i]);
21.已定义charx[8];inti;,为了给该数组赋值,下列语句正确的是【21】。
A)x[8]="TurboC";B)x="TurboC";C)x[]="TurboC";D)for(i=0;i<7;i++)x[i]=getchar();
22.以下程序运行结果是【22】。
main()
{chara[][5]={"ABCD","1234","abcd","5678","EFGH"};
inti;
for(i=0;i<3;i++)printf("%s",a[i]);}
A)A1aB)ABCD1234abcdC)ABCD)ABCD1234abcd5678EFGH
23.设inta[][4]={0,0};,则下列描述错误的是:
【23】。
A)数组a的每个元素都可得到初值0
B)二维数组a的第一维大小为1
C)数组a的行数为1
D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
24.设有下列语句,则【24】是对a数组元素的不正确引用,其中0≤i<10。
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;A)a[p-a]B)*(&a[i])C)p[i]D)*(*(a+i))
25.若有以下程序:
main
{charch[]="Iamstudent!
",*p;
p=ch;
printf("%x\n",p);
printf("%x\n",p+9);}
其中有两个printf(),如果第一个printf()运行结果是ffd6,则第二个printf()运行结果是【25】。
【25】A)ffdfB)ffe8C)ffd6D)ffcf
26.以下程序的运行结果是【26】。
main()
{inti;
charaa[][3]={'a','b','c','d','e','f'};
char(*p)[3]=aa;
for(i=0;i<2;i++)
if(i==0)aa[i][i+1]=**(p++);
printf("%c\n",**p);}
A)aB)bC)dD)c
27.设有下列语句:
charstr1[]="string",str2[8],*str3,*str4="string";
则【27】是对库函数strcpy的不正确调用。
此函数用来复制字符串。
A)strcpy(str3,"HELLO3");B)strcpy(str2,"HELLO2");
C)strcpy(str1,"HELLO1");D)strcpy(str4,"HELLO4");
28.以下程序是将一个整数存放到一个数组中,存放时按逆序存放,例如483存放成384请选择填空完善程序。
voidconvert(char*a,intn)
{inti;
if((i=n/10)!
=0)convert(【28】,i);
*a=n%10+'0';}
charstr[10]="";
main()
{intnumber;
scanf("%d",&number);
convert(str,number);
puts(str);}
A)a++B)a+1C)a--D)a-1
29.以下程序的运行结果是【29】。
fun3(intx)
{staticinta=3;
a+=x;
returna;}
main()
{intk=2,m=1,n;
n=fun3(k);
n=fun3(m);
printf("%d\n",n);}
A)3B)4C)6D)9
30.以下程序的运行结果是【30】。
voidast(intx,inty,int*cp,int*dp)
{*cp=x+y;*dp=x-y;}
main()
{inta=4,b=3,c,d;
ast(a,b,&c,&d);
printf("%d,%d\n",c,d);}
A)7,1B)1,7C)7,-1D)c、d未赋值,编译出错
31.以下程序的运行结果是【31】。
main()
{intx=1,y=2,z;
z=x>y?
++x:
++y;
printf("%d,%d,%d\n",x,y,z);}
A)1,2,3B)1,3,3C)2,3,3D)2,2,3
32.若有以下程序段,则z的二进制值是【32】。
intx=3,y=2,z;
z=x^y<<2;
A)0000000000001011B)0000000000000100C)0000000011110100D)0000000000000001
33.以下程序段的运行结果是【33】。
main()
{inti=4,j;
j=i;
pic(i+2*j-2,'*');
putchar('\n');
for(j-=2;j>=0;j--)
{pic(3-j,'');
pic(i+2*j,'*');
putchar('\n');
}}
pic(intlen,charc)
{
intk;
for(k=1;k<=len;k++)
putchar(c);}
【33】A)*B)**********C)****D)**********
***************************
*****************************
*******************************
34-35.指出以下程序所指处的运行结果。
voidf1(intx,inty,int*sum)
{*sum=x+y;;
++x;
++y;}
voidf2(inta,intb,int*product)
{*product=a*b;
a+=b;
b-=a;}
main()
{inta=10,b=20,c=100,(*f)();
f=f1;
(*f)(a,b,&c);
printf("%d,%d,%d\n",a,b,c);/*运行结果是【34】*/
f=f2;
(*f)(a,b,&c);
printf("%d,%d,%d\n",a,b,c);/*运行结果是【35】*/}
【34】A)11,21,100B)11,21,30C)10,20,30D)11,21,33
【35】A)30,-10,300B)30,-10,200C)33,-12,231D)10,20,200
36.以下程序中的循环执行了【36】次。
#defineN2
#defineMN+1
#defineNUM(M+1)*M/2
main()
{inti,n=0;
for(i=0;in++;
printf("%d\n",n);}
A)5B)6C)8D)9
37.编译预处理命令以【37】结尾。
A);B).C)\0D)回车键
38.若定义如下结构,则能打印出字母M的语句是【38】。
structperson{
charname[9];
intage;};
structpersonclass[10]={"Wujun",20,"Liudan",23,"Maling",21,"zhangming",22};
A)printf("%c\n",class[3].name);B)printf("%c\n",class[2].name[0]);
C)printf("%c\n",class[2].name[1]);D)printf("%c\n",class[3].name[1]);
39.以下程序段的运行结果是【39】。
enumweekday{aa,bb=2,cc,dd,ee}week=ee;
printf("%d\n",week);
【39】A)eeB)5C)2D)4
40.以下程序的功能是【40】。
#include
main()
{FILE*fp;
longintn;
fp=fopen("wj.txt","rb");
fseek(fp,0,SEEK_END);
n=ftell(fp);
fclose(fp);
printf("%ld",n);}
A)计算文件wj.txt的起始地址B)计算文件wj.txt的终止地址
C)计算文件wj.txt的长度D)将文件指针定位到文件末尾
填空题(本大题共20个空,每个空2分,共40分。
请将答案写在答题卡对应栏中,答在试卷上不得分)
1.以下程序的运行结果是【1】。
main()
{
floata=365.7189;
intb=12,c;
c=(int)a+b;
printf("a=%.2f,b=%d,c=%d\n",a,b,c);
}
2.堆栈是一种先进后出的数据结构。
以下程序模拟堆栈。
#defineN10
main()
{
inta[N];
inti,*p=a;
while(p<【2】)
scanf("%d",p++);/*压栈*/
while(p>a)
printf("%d",【3】);/*出栈*/}
3.将指定的字符串用冒泡排序法从大到小排序。
main()
{char*str="VisualFoxpro",【4】;
intn,i;
n=【5】;
while(n-->1)
for(i=0;iif(str[i]printf("%s\n",str);
}
4.以下程序的功能是将用户运行程序时键入的参数作为字符串连接起来。
#include
main(intargc,char*argv[])
{inti;
for(i=1;istrcat(argv[1],【6】);
printf("%s\n",argv[1]);
}
5.以下程序的运行结果是【7】。
#definePR(ar)printf("%d",ar)
main()
{
intj,a[]={1,3,5,7,9,11,15},*p=a;
for(j=3,j;j--)
{
switch(j)
{
case1:
case2:
PR(*p++);break;
case3:
PR((*p)--);
}
}
}
6.以下程序实现从10个数中找出最大值和最小值。
intmax,min;
find_max_min(int*p,intn)
{
int*q;
max=min=*p;
for(q=p;q<【8】;q++)
if(【9】)max=*q;
elseif(min>*q)min=*q;
}
main()
{
inti,num[10];
printf("Input10numbers:
");
for(i=0;i<10;i++)scanf("%d",&num[i]);
find_max_min(【10】,10);
printf("max=%d,num=%d\n",max,min);
}
7.以下程序是将1到9这9个数字分成三个3位数,要求第一个3位数正好是第二个3位数的二倍,是第三个3位数的三倍(重复的数应剔除)。
根据题意,只要确定第一个3位数后,再计算另外两个数,而第一个3位数可设置在(111~333)范围内。
inta[9];
main()
{
intm;
for(m=111;m<=333;m++)
if(ok(m,a)&&ok(2*m,a+3)&&ok(3*m,【11】))
printf("%d,%d,%d\n",m,2*m,3*m);
}
ok(intt,int*z)/*分解t,存入z指向的三个数组元素,若满足,要求返回1*/
{
int*p1,*p2;
for(p1=z;p1{
*p1=t%10;/*分解整数m*/
t=【12】;
for(p2=a;p2if(*p1==0||【13】)
return0;
【14】;
}
}
8.以下程序的运行结果是如下矩阵。
矩阵中的每个元素的形成规律是:
正对角线和其对角线以上的元素其值为1,其他元素值为:
行下标-列下标+1。
11111
21111
32111
43211
54321
main()
{
inti,j,a[5][5];
for(i=0;i<=4;i++)
for(j=0;j<5;j++)
if(【15】)a[i][j]=1;
else【16】;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)printf('%2d",a[i][j]);
printf("\n");
}
9.以下程序通过指针连接两个字符串。
charscat(char*str1,char*str2)/*函数返回指向str1指针*/
{
char*p=str1;
while(*p!
=【17】)p++;
while(*p++=【18】);/*将str2连接到str1的后面*/
returnstr1;
}
main()
{
chara[50],b[30];
printf("Enterstring1:
");scanf("%s",a);
printf("Enterstring2:
");scanf("%s",b);
printf("a+b=%s\n",scat(a,b);
}
10.以下程序用来统计已建好的单向链表中结点的个数。
其中head指向链表首结点,count用来统计结点个数。
structnode
{
chardata;
structnode*next;
}
main()
{
structnode*p,*head;
intcount=0;
p=head;
while(p!
=【19】)
{
count++;
p=【20】;
}
printf("%d\n",count);
}
12.2.3参考答案与分析
1.选择题:
(每题1.5分)
【1】C
分析:
C语言的语句以“;”结束,所以只有答案C是对的。
【2】B
分析:
y==3是关系运算符,其值或1或0,此题为1。
【3】A
分析:
参见《C语言程序设计与应用教程》附录E。
【4】A
分析:
C语言中的字符是以ASCII码值存放在内存中的。
【5】D
分析:
C语言的规定,参见《C语言程序设计与应用教程》图2.6。
【6】C
分析:
C语言的规定,同[5]。
【7】A
分析:
设c=a/b,则a%b为a-c*b,代入原式c*b+a-c*b,结果为a。
【8】C
分析:
赋值语句的左端应为变量,因此答案A、B都是错误的。
答案C、D是逗号表达式,其计算原则是从左至右,而D中是将b赋给常量7,是错误的。
答案C是正确的。
【9】A
分析:
C语言语法规定。
【10】B
分析:
C语言语法规定,按其输入格式从键盘输入数据时,只能以空格、回车及Tab间隔各数据项。
【11】C
分析:
在逻辑“与”表达式中,a经a++运算后为0,而a++的值仍为-1,b经b--运算后为3,致使与逻辑表达式的两端均为非零值,所以k为1。
【12】B
分析:
x的初值为八进制数,其二进制为0000000000010011,计算各位1对应的十进制数,相加即得。
【13】C
分析:
sizeof是一个运算符,它用来计算括号内的数据类型在内存中所占据的字节数。
【14】D
分析:
见第3章参考答案3.2。
【15】D
分析:
本题与第3章的3.11相似,但在本题中,循环一开始,b+=5语句被执行,b的初值从2开始,b值的变化为2、7、10、13、16、19、22,所以a的值为7。
【16】D
分析:
所用的是do-while循环,第一次输出x的值为1,而--x表达式值为0,经非运算后为1;第二次输出x的值为-2,再经--x,其表达式为非0值,再非运算为0,退出循环。
【17】A
分析:
答案D中无循环条件与循环变量增量,明显是死循环,答案B、C中循环变量一直使循环条件成立,