C语言模拟题.docx
《C语言模拟题.docx》由会员分享,可在线阅读,更多相关《C语言模拟题.docx(23页珍藏版)》请在冰豆网上搜索。
C语言模拟题
第七届全国信息技术应用水平大赛模拟题
C语言程序设计
注:
试卷满分150分,完成时间180分钟。
此模拟题仅供参考,具体题型、题量与分值分配以实际预赛题为准。
单选题(共60题,每题1分,共60分)
1.下列符号串中,属于C语言合法标识符的个数为( )。
_1_2_3,a-b-c,float,9cd,a3b4
A:
1
B:
2
C:
3
D:
4
2.下列能为字符变量a赋值的是:
chara=_____( )。
A:
'ab'
B:
"a"
C:
'\0'
D:
"\0"
3.在下列字符序列中,合法的标识符是( )。
A:
P12.a
B:
stud_100
C:
$water.1
D:
88sum
4.下列用于printf函数的控制字符常量中,代表tab的字符常量是( )。
A:
'\b'
B:
'\t'
C:
'\r'
D:
'\f'
5.下列用于printf函数的控制字符常量中,代表退格的字符常量是( )。
A:
'\b'
B:
'\t'
C:
'\r'
D:
'\n'
6.如有以下程序:
unsignedinta=6;intb=-20;charc;c=(a+b>6);
则c的值为( )。
A:
6
B:
-14
C:
1
D:
0
7.关于C语言,以下不正确的叙述是( )。
A:
在C语言程序设计中,逗号运算符的优先级最低
B:
在C语言程序设计中,var和VAR是两个相同的变量
C:
C语言也支持重载
D:
此处的两个语句int a; a=-13.06; 在程序编译中将会提示出错
8.若有定义:
int a=2,*p;
float x=1,y=2;
char e=‘w’;
则以下用法不正确的是( )。
A:
printf("%c",e+a);
B:
p=&x;
C:
a*=y+x;
D:
x=y=e;
9.intx=20;printf("%d\n",~x);
以上程序片段的输出是( )。
A:
235
B:
-21
C:
-20
D:
-11
10.在C语言中,要求运算数必须是整型的运算符是( )。
A:
/
B:
++
C:
!
=
D:
%
11.若有定义:
inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是(结果保留两位小数)( )。
A:
2.50
B:
2.75
C:
3.50
D:
0.00
12.以下运算符中优先级最低的是( )。
A:
&&
B:
&
C:
||
D:
|
13.设有定义语句:
charc1=1,c2=1;,则以下表达式中值为零的是( )。
A:
c1^c2
B:
c1&c2
C:
~c2
D:
c1|c2
14.以下程序的输出结果是
#include
voidmain()
{
unsignedchara,b;
a=0x0a|3;
b=0x0a&3;
printf("%d%d\n",a,b);
}( )。
A:
211
B:
112
C:
713
D:
137
15.如果inti=4,则printf("%d",-i--)的输出结果是( ),i的值是( )。
A:
-4 3
B:
-3 3
C:
-3 4
D:
-4 4
16.若x=2,y=3则x&y的结果是( )。
A:
1
B:
2
C:
3
D:
5
17.下列程序的输出是( )。
main()
{intx;
printf("%d\n",(x=3*5,x*2,x+10));}
A:
15
B:
25
C:
30
D:
40
18.若x,i,j和k都是int型变量,则计算下面表达式后,x的值为( )。
x=(i=4,j=16,k=32)
A:
4
B:
16
C:
32
D:
其他值
19.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是( )。
A:
7
B:
8
C:
6
D:
2
20.以下程序运行后的输出结果是( )。
main()
{inta,b;
a=50;b=90;
printf("%d\n",(a,b));
}
A:
90
B:
5090
C:
50
D:
其他
21.以下程序的运行结果是( )。
voidmain()
{
inta=4;charch=‘a’;
printf("%d\n",(a&2)&&(ch>‘A’));
}
A:
0
B:
1
C:
2
D:
3
22.以下程序的输出是:
( )。
#include
main( )
{inti,j=4;
for(i=j;i<=2*j;i++)
switch(i/j)
{ case0:
case1:
printf("*");break;
case2:
printf("#");break;
}
}
A:
*###
B:
**##
C:
***#
D:
****#
23.有如下程序片段:
inti=0;
while(i++<=2);
printf("%d",i--);
则正确的执行结果是:
( )。
A:
2
B:
3
C:
4
D:
以上都不是
24.有以下程序段
main()
{inti=1,sum=0,n;
scanf(“%d”,&n);
do
{ i+=2;
sum+=i;
}while(i!
=n);
printf(“%d”,sum);
}
若使程序的输出值为15,则应该从键盘输入的n的值是( )。
A:
1
B:
3
C:
5
D:
7
25.
以下程序的输出是( )。
#include
voidfun(int*p)
{
inta=10;
p=&a;
++a;
}
voidmain()
{
inta=5;
fun(&a);
printf("%d\n",a);
}
A:
5
B:
6
C:
10
D:
11
26.以下关于函数的说法中正确的是( )。
A:
定义函数时,形参类型说明可放在函数体内
B:
return语句后边的值不能为表达式
C:
如果函数类型与返回值类型不一致,以函数类型为准
D:
如果形参与实参的类型不一致,以实参为准
27.已知有定义:
int*p();则以下说法正确的是( )。
A:
指向int型的指针变量
B:
int型的指针数组
C:
一个函数,该函数的返回值是指向int型的指针变量
D:
一个指向函数的指针变量,该函数的返回值为int型
28.若有如下程序:
voids(char*m,intn)
{
*m=*m+3;n=n+3;
printf("%c,%c,",*m,n);
}
voidmain()
{
charp=‘b’,q=‘B’;
s(&q,p);
printf("%c,%c\n",p,q);
}则程序运行后的输出结果是( )。
A:
E,e,b,E
B:
e,E,b,F
C:
E,e,e,E
D:
e,E,b,E
29.C语言规定函数返回值的类型由( )。
A:
在定义时所指定的函数类型所决定
B:
调用该函数时的主调函数类型所决定
C:
return语句中的表达式类型所决定
D:
调用该函数时系统临时决定
30.要在c语言中求正弦30度的值,可以调用库函数,可用格式为( )。
A:
sin(30)
B:
sin(30.0)
C:
sin((double)30)
D:
sin(3.1415/6)
31.在C语言程序设计中,简单变量作为实参时,它和对应形参之间的数据的传递方式是( )。
A:
地址传递
B:
单向值传递
C:
由实参传给形参,再由形参传给实参
D:
由用户指定传递方式
32.以下程序的输出为( )。
inta=2;
intf(int*a)
{
return(*a)++;
}
voidmain()
{
ints=0;
{inta=5;
s+=f(&a);
}
s+=f(&a);
printf("%d%d\n",a,s);
}
A:
27
B:
210
C:
37
D:
311
33.以下程序输出结果是( )。
#include
int*fun()
{
inta[4],k;
for(k=0;k<4;k++)a[k]=k;
return(a);
}
voidmain()
{int*p,j;
p=NULL;
p=fun();
for(j=0;j<4;j++){printf("%d\n",*p);p++;}
}
A:
输出0000
B:
输出0123
C:
输出1111
D:
输出不确定值
34.以下程序的运行结果是( )。
voidfun(int*n)
{
staticintm=2;
*n*=m-1;m+=2;
}
voidmain()
{
staticintm=1;
inti;
for(i=1;i<4;i++)
fun(&m);
printf("%d\n",m);
}
A:
8
B:
10
C:
11
D:
15
35.下面对typedef的叙述中不正确的是( )。
A:
用typedef可以定义各种类型名,但不能用来定义变量
B:
typedef和#define都是在预编译时处理的
C:
用typedef只是将已存在的类型用一个新的标识符来代表
D:
使用typedef有利于程序的通用和移植
36.要使用内存分配函数malloc,需要引入的头文件是( )。
A:
stdio.h
B:
stdlib.h
C:
malloc.h
D:
memory.h
37.以下宏定义中,不会引起二义性的宏个数为( )。
1)#definePOWER(x)x*x
2)#definePOWER(x)(x)*(x)
3)#definePOWER(x)(x*x)
4)#definePOWER(x)((x)*(x))
A:
1个
B:
2个
C:
3个
D:
4个
38.若有二维数组定义语句:
inta[4][5];则下面对元素a[2][3]不正确的引用方式是( )。
A:
*(&a[2][3])
B:
*(a+5*2+3)
C:
*(a[2]+3)
D:
*(*(a+2)+3)
39.若二维数组定义为a[m][n],则在a[i][j]之前的元素个数为( )。
A:
j*m+i
B:
i*m+j
C:
i*m+j-1
D:
j*m+i-1
40.有字符数组a[10]={‘A’,‘\0’}和b[10]={‘B’},则以下正确的输出语句是( )。
A:
puts(a,b);
B:
printf("%s%s\n",a[],b[]);
C:
putchar(a,b);
D:
puts(a);puts(b);
41.下列程序的输出结果是( )。
#include
#include
voidmain()
{
charp1[20]="abcd",p2[20]="ABCD";
charstr[50]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));
printf("%s\n",str);
}
A:
xyabcAB
B:
abcABz
C:
Ababcz
D:
xycdBCD
42.以下程序执行后输出结果是( )。
voidmain()
{
chara[]="movie",b[10]="movie";
printf("%d%d\n",sizeof(a),sizeof(b));
}
A:
55
B:
66
C:
610
D:
1010
43.以下程序的输出结果是( )。
voidmain()
{
char*p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
A:
2
B:
3
C:
4
D:
编译出错
44.已知有以下的说明,
inta[]={8,1,2,5,0,4,7,6,3,9};那么a[*(a+a[3])]的值为( )。
A:
5
B:
0
C:
4
D:
7
45.以下程序输出结果是( )。
#include
main()
{
inta[2][2]={1,2,3,4},(*p)[2];
p=a;
p++;
printf("%d\n",**p);
}
A:
2
B:
3
C:
4
D:
以上都不对
46.设charch,str[4],*strp;,则正确的赋值语句是( )。
A:
ch="CBA";
B:
str="CBA";
C:
strp="CBA";
D:
*strp="CBA";
47.下面程序的运行结果是( )。
#include
#include
fun(char*w,intn)
{chart,*s1,*s2;
s1=w;s2=w+n-1;
while(s1 }
main()
{char*p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
A:
7654321
B:
1714171
C:
1711717
D:
7177171
48.以下程序的输出是()。
#include
main(){
chara[]="language",*p;
p=a;
while(*p!
=‘u’){printf("%c",*p-‘u’+‘U’);p++;}
}
A:
LANGUAGE
B:
language
C:
LANG
D:
LANGuage
49.structs1
{
chara[3];
int num;
}t={‘a’,‘b’,‘x’,4},*p;
p=&t;
则输出为x的语句是( )。
A:
printf(“%c\n”,p->t.a[2]);
B:
printf(“%c\n”,(*p).a[2])
C:
printf(“%c\n”,p->a[3]);
D:
printf(“%c\n”,(*p).t.a[2]);
50.以下程序的输出是( )。
#include
main(){
structst
{intx;
inty;
}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);
}
A:
0
B:
1
C:
3
D:
6
51.以下对age的非法引用是( )。
struct student
{intage;
intnum;
}stu1,*p;
p=&stu1;
A:
stu1.age
B:
student.age
C:
p->age
D:
(*p).age
52.以下程序的输出是( )。
#include
unionmyun
{struct
{intx,y,z;}u;
intk;
}a;
voidmain()
{a.u.x=4;a.u.y=5;a.u.z=6;
a.k=0;
printf("%d\n",a.u.y);
}
A:
4
B:
5
C:
6
D:
0
53.若要用fopen函数打开一个二进制文件,该文件要既能读也能写,当文件不存在时新建文件,则文件打开方式字符串应是( )。
A:
"ab+"
B:
"rb+"
C:
"wb+"
D:
"ab"
54.若执行fopen函数时发生错误,则函数的返回值是( )。
A:
地址值
B:
0
C:
1
D:
EOF
55.要打开文件c:
\user\text.txt用于追加数据,正确的语句是( )。
A:
fp=fopen("c:
\turboc2\abc.txt","r");
B:
fp=fopen("c:
\\turboc2\abc.txt","r");
C:
fp=fopen("c:
\\turboc2\\abc.txt","a+");
D:
fp=fopen("c:
\turboc2\abc.txt","a+");
56.在执行fopen函数时,ferror函数的初值是( )。
A:
TRUE
B:
-1
C:
1
D:
0
57.#include
main()
{
char*s1="Hello",*s2="Beijing";
FILE*pf=fopen("abc.dat","wb+");
fwrite(s2,7,1,pf);
fseek(pf,-1,SEEK_CUR);
fwrite(s1,5,1,pf);
fclose(pf);
}
以上程序执行后,文件abc.dat中的内容为( )。
A:
Hellong
B:
BeijingHello
C:
BeijinHello
D:
Hello
58.若fp为文件指针,且文件已正确打开,i为整型数据,以下语句的输出结果是( )。
fseek(fp,0,SEEK_END);
i=ftell(fp);
printf("i=%d\n",i);
A:
fp所指的文件记录长度
B:
fp所指的文件长度,以字节为单位
C:
fp所指的文件长度,以比特为单位
D:
fp所指的文件当前位置,以字节为单位
59.函数调用语句:
fseek(fp,-20L,2);的含义是( )。
A:
将文件位置指针移到距离文件头20个字节处
B:
将文件位置指针从当前位置向后移动20个字节
C:
将文件位置指针从文件末尾处后退20个字节
D:
将文件位置指针移到离当前位置20个字节处
60.若将文件指针的读写位置指针移动到距离文件头200个字节的位置,对应正确的操作是( )。
A:
fseek(fp, 200,SEEK_SET)
B:
fseek(fp, 200, SEEK_CUR)
C:
fseek(fp, 200,SEEK_END)
D:
ftell(200)
多选题(共20题,每题2分,共40分)
1.关于以下运算,说法正确的有( )。
A:
设有宏定义"#defineF(N)2*N",则表达式F(2+3)的值是10
B:
设intx=4;则执行语句x+=x*=x+1;后,x的值为40
C:
设inta,b=8;执行a=b<<2+1;后a的值是33
D:
设inta[3][4],*p=a[1];该指针变量p指向的元素是a[1][0]
2.有以下定义:
chara[10],*b=a;
则能给a数组输入字符串的语句有( )。
A:
gets(a);
B:
gets(a[0]);
C:
gets(&a[0]);
D:
gets(b);
3.要求函数的功能是在一维数组a中查找x值。
若找到,则返回所在的下标值;否则,返回0。
设数据放在数组元素的a[1]到a[n]中。
在以下给出的函数中,不能正确执行此功能的函数有( )。
A:
funa(int*a,intn,intx)
{
*a=x;
while(a[n]!
=x)n--;
returnn;
}
B:
funb(int*a,intn,intx)
{
intk;
for(k=1;k<=n;k++)
if(a[k]==x)returnk;
return0;
}
C:
func(inta[],intn,intx)
{
int*k;
a[0]=x;k=a+n