非计算机专业计算机等级考试C语言练习题吐血推荐.docx
《非计算机专业计算机等级考试C语言练习题吐血推荐.docx》由会员分享,可在线阅读,更多相关《非计算机专业计算机等级考试C语言练习题吐血推荐.docx(37页珍藏版)》请在冰豆网上搜索。
非计算机专业计算机等级考试C语言练习题吐血推荐
C语言笔试练习题
一、单选题:
(请选择一个正确结果)
1.下列语句的输出为()
intx=-1;
printf("%d,%u,%O",x,x,x,);
A)-1,65535,177777B)-1,-1,-1
C)-1,32767,-17777D)-1,32768,177777
2.若x,y为实数类型的变量,要判断x,y相等,最好使用下列关系表达式(C)
A)x==y;B)x-y==0;
C)fabs(x-y)〈1e-8;D)abs(x-y)〈1e-8;
3.若有以下的定义、说明和语句,则值为101的表达式是()。
structcw
{inta;
int*b;
}*p;
intx0[]={11,12},x1[]={31,32};
staticstructcwx[2]={100,x0,300,x1};
p=x;
A)*p-〉bB)p-〉a
C)++(p->a)D)(p++)-〉a
4.若有以下定义和语句,则输出结果是(B)。
char*sp="\t\b\\\0English\n";
printf("%d",strlen(sp));
A)12B)3C)17D)13
5.有如下程序
voidmain()
{intx=23;
do
{printf("%d",x--);
}while(!
x);
}
该程序的执行结果是(B)
A)321B)23
C)不输出任何内容D)陷入死循环
6.若已定义x和y为double类型,则表达式x=2,y=x+10/4的值是(C)
A)2B)4C)4.0D)4.5
7.要将一个整数12000分别以ASCII码文件和二进制文件形式存放,各自所占的存储空间数分别是()字节。
A)5和2B)2和5C)2和2D)5和5
8.对于类型相同的两个指针变量之间,不可进行的运算是()
A)==B)=C)+D)-
9.sizeof(’a’+10.4)的值为()类型。
A)intB)floatC)doubleD)char
10.若有定义inta=3;则执行完printf("%d",-a--);语句后a的值为(A)
A)-3B)2C)-2D)3
11.若有floatx=2.5;y=4.7;inta=7;则表达式x+a%3*(int)(x+y)%2/4的值为(D)
A)4.0B)3.0C)2.75D)2.5
12.语句printf("s=%-5.3s","computer");的输出结果是(B)
A)s=comB)s=comC)s=terD)s=ter
13.inta=3,b=4,c=5;执行完表达式a++>--b&&b++>c--&&++c后,a,b,c的值分别为(B)
A)345B)435C)444D)445
14.intx=3,y=1;则条件表达式x>y?
1:
2.3的值为(A)
A)1B)1.0C)2.3D)2
15.若有定义inti=2,a[10],*p=&a[i]:
则与*p++等价的是(D)
A)a[i++]B)a[i]++C)a[i]D)a[++i]
16.以下程序的输出结果是(C):
voidmain()
{inta=5,*p1,**p2;
p1=&a,p2=&p1;
(*p1)++;
printf("%d\n",**p2);
}
A)5B)4C)6D)不确定
17.以下程序的输出结果是()
intx=3,y=4;
voidmain()
{intx,y=5;
x=y++;
printf("%d",x);
}
A)3B)4C)5D)6
18.若#include后面的文件名用双引号括起来,寻找被包含文件的方式是(A)
A)先按系统设定的标准方式查找,再在当前目录中查找
B)先在当前目录中查找,再按系统设定的标准方式查找
C)只在当前目录中查找
D)只按系统设定的标准方式查找
19.程序设计的步骤一般分为:
分析问题、构造模型、设计与描述算法、编写程序、调试程序和()
A)数据设计B)算法分析
C)编制程序说明文档D)编译
20.表达式11&10的结果用十进制表示为()。
A)11B)3C)1D)10
21.结构化程序语言的三种基本结构是(A)
(A)顺序结构、选择结构、循环结构
(B)递归结构、循环结构、转移结构
(C)嵌套结构、递归结构、顺序结构
(D)循环结构、转移结构、顺序结构
22.若有以下说明和语句,请选出哪个是对c数组元素的正确引用(D)
intc[4][5],(*cp)[5];
cp=c;
(A)cp+1(B)(cp+3)(C)*(cp+1)+3(D)*(*cp+2)
23.设有如下的程序段:
charstr[]="hello";
char*ptr;
ptr=str;
执行上面的程序段后,*(ptr+5)的值为(B)。
(A)o'(B)'\0'(C)不确定的值(D)'o'的地址
24.执行下面的程序段后,B的值为(B)。
intx=35;
charz='A';
intB;
B=((x&15)&&(z<'a'));
(A)0(B)1(C)2(D)3
25.以下程序的输出结果为(C)。
#include
main()
{inti;
for(i=0;i<10;i++);
printf("%d",i);
}
(A)0(B)123456789(C)0123456789(D)10
26.以下程序的输出结果是(B)。
#include
main()
{inti=010,j=10;
printf("%d,%d",++i,j--);
}
(A)11,10(B)9,10(C)010,9(D)10,9
27.表达式k=(12<10)?
4:
1?
2:
3的值为(B)。
(A)1(B)2(C)3(D)4
28.有一C语言源程序如下:
main()
{inta,b=-1;scanf("%d",&a);
if(a)if(a>0)b=1;elseb=0;
}
该程序所表示的数学函数关系是()
(A)
(B)
(C)
(D)
29.在下列程序中,调用f(8)的值是(D)
intf(intn)
{if(n==1)return
(1);
elseif(n==2)return
(2);
elsereturn(f(n-1)+f(n-2));
}
(A)13(B)21(C)55(D)34
30.在执行程序china.exe时,若输入的命令行为:
chinaenlishBeijing,则程序执行结果为()。
#include
voidmain(intargc,char*argv[])
{while(argc>1)
{printf("%c",**++argv);argc--;}}
(A)eB(B)ceB
(C)chinaenlishBeijing(D)enlishBeijing
31.如a为int型,则与表达式a等价的C语言关系表达式是()
(A)a>0(B)a!
=0(C)a==0(D)a>0
32.循环语句for(a=0,b=0;(b!
=45)||(a<5);a++);的循环次数是()
(A)4(B)3(C)5(D)无数多次
33.一个C语言程序是由(B)组成。
(A)一个函数(B)一个或若干个函数
(C)一个过程(D)一个过程或若干个过程
34.设有字符数组a,则正确的输入语句是(C)。
(A)gets('a');(B)scanf("%c",a);
(C)scanf("%s",a);(D)gets("a");
35.如果程序中有staticcharc;则编译程序会对其自动设置初值为()。
(A)'\n'(B)"\n"(C)0(D)'\0'
36.C语言用(D)表示逻辑真值。
(A)true(B)T
(C)整型值0(D)非0整型值整数1
37.已知:
int*p;使用“p=malloc(sizeof(int));”语句动态申请int型的存储单元,应当使用()。
(A)int(B)int*(C)(*int)(D)(int*)
38.在C函数中,局部变量的隐含存储类型是(A)。
(A)auto(B)static(C)register(D)extern
39.C语言中,以下叙述中错误的是(C)。
(A)同一程序中,全局变量和局部变量可以同名
(B)局部变量的作用域被限定在其所定义的局部范围中
(C)同一程序中,全局变量和局部变量不能同名
(D)全局变量的作用域从定义处开始到本源程序文件结束
40.在c语言中,函数调用时如果相应的形参和实参都是简单变量,则主调函数和被调函数之间传递数据的方式是(C)。
(A)单向地址值传递(B)双向地址值传递
(C)单向数值传递(D)双向数值传递
41.有定义:
inta[5][4],*p=a[0];,则*(p+2*4+3)等于(D)。
(A)a[2][0](B)a[2][1](C)a[2][2](D)a[2][3]
42.C语言中,一个函数调用语句为fun((el,e2,e3),(e4,e5),e6);,其实参个数为(A)。
(A)3个(B)4个(C)5个(D)6个
43.有如下程序,该程序的输出结果是(A)
main()
{intx=1,a=0,b=0;
switch(x)
{case0;b++;
case1:
a++;
case2:
a++;b++;
}
(A)a=2,b=1(B)a=l,b=l
(C)a=l,b=0(D)a=2,b=2
44.在执行语句if((x=y=2)>=x&&(x=5))y*=x;后变量x、y的值应分别为()。
(A)2、4(B)5、2(C)5、10(D)执行时报错
45.若N为整型变量,则for(N=10;N=0;N--);循环里的循环体被()。
(A)无限循环(B)执行10次
(C)执行一次(D)一次也不执行
46.在位运算中,操作数每左移一位,其结果相当于(A)
A)操作数乘以2;B)操作数除以2;
C)操作数除以4;D)操作数乘以4;
47.已有定义intk=2;int*ptrl,*ptr2,且ptrl和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)
A)k=*ptrl+*ptr2;B)ptr2=k;
C)ptrl=ptr2;D)k=*ptrl*(*ptr2);
49.下面程序的输出是(C)
main()
{intx=l0,y=3;
printf(“%d\n”,y=x/y);}
A)0B)1C)3D)不确定的值
49.已知:
chars[4]="cba";char*p;执行语句序列p=s;printf("%c\n",*p+1);后,其输出为(D)。
A)字符'c'B)字符'b'C)字符'a'D)字符'd'
50.enumcolor{red,green,yellow=5,white,black};定义了一枚举类型.编译程序为枚举值表中各标识符分配的枚举值依次为()
A)1、2、3、4、5B)0、1、5、2、3
C)0、l、5、6、7D)3、4、5、6、7
51.运行完下列程序后,在屏幕上的内容是(D)。
main()
{inta=0;
a+=(a=12);
printf(''%d\n'',a);
}
A)0B)6C)12D)24
52.运行下列程序并用键盘输入53,48,32后,在屏幕上的内容是()。
main()
{inti,j,k;
scanf(''%d,%d,%d'',&i,&j,&k);
if(i>50)printf(''%d'',i);
elseif(i>40)printf(''%d'',j);
elesif(i>30)printf(''%d'',k);
elseprintf(''Error'');
}
A)53B)48C)32D)Error
53.设有下列语句
typedefstruct
{intn;
charch[8];
}Stt;
则下面叙述正确的是()。
A)Stt是结构体变量B)Stt是结构类型名
C)typedefstruct是结构体类型
D)swuct是结构体类型名
54.函数strcat(strl,str2)的功能是()
A)将字符串strl连接到字符串str2之后。
B)将字符串str2连接到字符串strl之后。
C)将str2复制到字符串strl中。
D)将strl复制到字符串str2中。
55.若要用fopen函数打开一个新的二进制文件,该文件要既能读又能写,则文件读写方式字符串应是()
A)4B)''r+''C)''wb+''D)"ab"
56.已知:
inta[3][4],*p=a[0];p+=6;那么与*p的值相同的是(B)。
A)*(a+6)B)*(&a[0]+6)
C)*(a[1]+2)D)*(a[0][0]+6)
57.以下程序的输出结果是()(注:
备选答案中,代表空格)
main()
{printf("\n*s1=%15s*","chinabeijing");
printf("\n*s2=%-5s*","chi");
}
A)*s1=chinabeijin*
*s2=chi*
B)*s1=chinabeijing*
*s2=**chi*;
C)*s1=*chinabeijing**s2=chi*;D)*s1=___chinabeijing*
*s2=chi;
58.如下程序运行台m的值为(C)
#include
voidmain()
{intm,n,k;
m=(n=4)+(k=l0-7);
printf("m=%d\n",m);
}
A)4B)3C)7D)14
59.下面程序运行情况是(D).
#include
voidmain()
{
intx=3,y=0,z=0;
if(x=y+z)printf(“****”);
elseprintf(“####”);
}
A)有语法错误不能通过编译B)输出****
C)可以通过编译,但不能通过连接,因而不能运行D)输出####
60.执行下面的程序后,a的值是()
#defineSQR(x)x*x
main()
{inta=10,k=2,m=3;
a/=SQR(m)/SQR(k);
printf(“%d\n”a);
}
A)10B)1C)5D)0
61.在C程序中,同一程序中的各函数之间()。
A)既允许直接递归调用也允许间接递归调用
B)既不允许直接递归调用也不允许间接递归调用
C)允许直接递归调用但不允许间接递归调用
D)功允许间接递归调用但不允许直接递归调用
62.C语言中,以下叙述错误的是()。
A)函数被调用时,系统才为形参分配内存
B)实参和对应形参的数据类型必须一致
C)实参可以是变量、常量或表达式
D)形参可以是变量、常量或表达式
63.C语言中,函数调用时若实参是数组名,则被调函数对应形参()。
A)可以是相应类型简单变量
B)必须是相应类型的指针变量
C)必须是相应类型数组名
D)可以是相应类型的指针变量
64.一个数据类型为void的函数中可以没有return语句,
那么函数被调用时()
A)没有返回值B)返回一个系统默认值
C)返回只有用户临时决定D)返回一个不确定的值
65.有定义:
floaty,*p=&y;,假定变量y在内存中所占地址为100~103。
那么p的值为()。
A)100B)101C)102D)103
66.有定义:
inta[10][10],*p=a[0],j,k;,其中j和k表示数组元素下标并在数组允许范围内,那么能够正确引用元素a[j][k]值的是(C)。
A)*(a[j]+k)B)*((p+j)+kC)*(p[j]+k)D(a+j)+k
二、判断题(正确的选√,错误的选×)
l.在C语言中,变量的初始化都是在编译阶段完成的。
2.如果一个函数只能被本文件中的其他函数所调用,则该函数为外部函数。
3.若x为整型变量、j为实型变量,当执行语句:
x-(int)j;后,j也变为整型变量。
4.递归函数在实现过程中,要使用“堆栈”这种数据结构来保存递归调用过程中的值。
5.在C语言中,所有函数之间都可以相互调用。
6.在同一源文件中,全局变量与局部变量同名,在局部变量作用范围内,全局变量的值等于局部变量的值。
7.C语言是一种面向过程的语言。
8.用C语言编写的程序是一种需要经过编译和连接才能运行的程序。
9.语句for(;;){循环体}和while
(1){循环体}是等价的。
10.如果被定义函数的返回值是整型或字符型,使用前可以不必进行说明。
11.语句while(!
E);中的条件!
E等价于E==0。
12.格式字符%md中的m不能为负。
13.若某自定义函数中无return语句,则该函数一定没有返回值。
14.fclose函数顺利执行关闭操作则返回值为1。
15.C语言的编译系统对宏命令的处理是在对源程序中其他成份正式编译之前进行的。
16.在C语言的源程序中,注释使用越多,编译之后的可执行程序的执行效率越低。
17.如果strcmp(s1,s2)的返回值为一个负数,则表明字符串s1一定小于字符串s2。
18.表达式128>>2的值是32。
19.若有宏定义:
#defineM(x,y,z)x*y+z
则宏引用M(2+3,4+5,6+7)通过宏展开后的表达式应为(2+3)*(4+5)+6+7。
20.C语言程序中,任何英语单词均可以作标识符。
21.一个计算机系统中寄存器数目有限,不能定义任意多个寄存器变量。
22.函数fseek(fp,10L,1)的作用是将fp指向的文件内部指针从当前位置后移10个字节的位置。
23.在C程序中,函数调用不能出现在表达式语句中。
24.表达式~(~1<<3)的值是15。
25.C语言函数必须包含库函数。
26.用语句a=a+b,b=a-b,a=a-b;可以交换a,b两个变量的值。
27.由于计算机的计算精度很高,所以C语言中用程序计算1.0/3*3的结果肯定等于1。
28.一个C程序无论有多少个源程序文件组成,在其中一个源程序文件中定义的全局变量的作用域默认为整个C程序。
29.在一个函数定义中,可以根据需要使用多个return语句。
30.函数返回值的数据类型取决于主调函数传递过来的实参的数据类型。
31.对任一变量一旦被指定为某一确定类型后,该变量在程序运行时所占存储空间的多少和所能参加的运算类型便已确定了。
三、填空题
l.与语句if(a>b)max=a;elsemax=b;功能等价的赋值语句是max=a>b?
a:
b。
2、下列程序的功能是对某班的某科的学生成绩x进行分段统计。
要求将[0,60],[60,70],[70,80],[80,90],[0,100]这五个分数段的人数分别统计在a[5]-a[9]中。
学生成绩采用百分制。
当非法输入时,结束统计。
#include
voidmain()
{floatx;
inti,k;
staticinta[10];
scanf("%f",&x);
k=;
while(k>=0&&k<10)
{if(k<6)k=5;
a[k]=a[k]+1;
scanf("%f",&x);
k=___________________;
}
for(i=5;i<10;i++)
printf("%d%,a[i]);
}
3.下面的函数用以验证命题:
100以内的奇数的平方被8整除,余数均为1,若命题成立,则返回1,否则返回0请填空完成该函数。
intfunc()
{inta,flag=1;
for(a=1;a<100;a+=2)
if(___(a*a)%8==1___________________)
flag=0;
return(flag);
}
4.以下函数creatlist用来建立一个带头节点的单项链表,新产生节点总是插在链表的末尾。
单项链表的头指针作为函数值返回。
函数中以换行符作为链表建立的结束标志。
请填空。
#include
structnode
{chardata;
structnode*next;
};
structnode*creatlist()
{structnode*h,*p,*q;
charch;
h=(structnode*)malloc(sizeof(structnode));
p=q=h;
ch=getchar();
while(_________________)
{p=(structnode*)malloc(sizeof(structnode));
p->data=ch;
q->next=p;
q=p;ch=getchar();
}
p->next='\0';
returnh;
}
5.下述程序将磁盘中的一个文件复制到另一个文件中,文件名来自命令行。
请填空。
voidmain(intargc,char**argv)
{FILE*fin,*fout;
if(argc<3)
{puts("参数丢失1")
return;
}
if((fin=fopen(argv[1],"r"))==NULL||(fout=fopen(argv[2],"w"))==NULL)
{puts("无法打开文件!
");
return;
}
while(___________)
fputc(fgetc(fin),fout);
fclcse(fin);
fclose(fout);
}
6.以下程序是输出Fibonacci数列前20个数,这个数列有如下特点:
第1,2两个数为1,1,从第三个数开始,该数是其前面两个数之和。
#include
voidmain()
{intf[20]={1,1},i;
for(i=2;i<2