C语言在线测试习题.docx
- 文档编号:29797006
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:43
- 大小:33.33KB
C语言在线测试习题.docx
《C语言在线测试习题.docx》由会员分享,可在线阅读,更多相关《C语言在线测试习题.docx(43页珍藏版)》请在冰豆网上搜索。
C语言在线测试习题
第一章C语言概述
填空题
1一个C语言的源程序至少应包括一个()函数答案:
主、main
2在C语言程序中,输出操作是由库函数()来完成的答案:
printf
3在C语言程序中,输出语句printf中经常出现的"\n"是[1]符。
答案:
换行
4C语言源程序的语句分隔符是()。
答案:
分号
5在C语言程序中,键盘的输入操作是由库函数[1]来完成的。
答案:
scanf
第二章数据类型运算符表达式
填空题
问题1表达式“3.5+1/2+56%10”的计算结果是[1]答案:
9.5
解释:
1/2=0(这里是两个整型数相除,其结果也为整型,故为零),56%10=6(取余运算)
故3.5+1/2+56%10=3.5+0+6=9.5。
问题2若k为int型且值为12,则表达式“k%=k”的值[1]。
答案:
0
解释:
k%=k->k=k%k(k%=k的原型),故k=0。
问题3设y是int型,则y为奇数的关系表达式是[1]。
答案:
(y%2)==1、y%2==1、(y%2)!
=0、y%2!
=0
问题4‘\72’在内存中占[1]个字节,“\72”在内存中占[2]个字节。
答案:
一、1二、2
解释:
“72”为字符串,可以分解为’\72’、‘\0’两个字符,故占2个字节。
问题5把a1,a2定义成长整型变量的定义语句是[1]。
正确答案:
longinta1,a2;、longa1,a2;
问题6已有定义:
intx=10,y=3,z;则表达式:
z=(x%y,x/y)的值是[1]。
正确答案:
3
问题7在C语言中,表达式5>3&&2||8<4-!
0的值为[1]。
正确答案:
1
解释:
5>3&&2,运算符&&左右两端均为真,故5>3&&2=1;8<4-!
0–>8<4-1为假;表达式5>3&&2||8<4-!
0可化简为1||0,其值为真,故(5>3&&2||8<4-!
0)=1。
选择题
问题1增1减1运算只能作用于()。
A.常量
B.变量
C.表达式
D.函数
正确答案:
B.变量
问题2C语言中运算对象必须是整型的运算符是()。
A.%
B.*
C./
D.&
正确答案:
A.%
问题3设a、b、c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是()
A.‘a’&&‘b’
B.a<=b
C.(a+c)&&(b-c)
D.!
((a
c||1)
正确答案:
D.!
((a
c||1)
解释:
’a’‘b’为字符,其值不为零,逻辑&运算(a&&b)只有两个均为真时才为真,此时值为1,而只要a、b不为零时,a、b均为真,故’a’&&’b’=1;a<=b(a=3,b=4)为真,其值为1;(a+c)&&(b-c)与选项A同理,不解释;逻辑||运算(a||b)只要a、b不同时为零其值就为真,(a
c||1为真的,但前面加上逻辑非(!
)就变为假了,故其值为0。
问题4能正确表示a≥10或a≤0的关系表达式是()
A.a>=10ora<=0
B.a>=10anda<=0
C.a>=10&&a<=0
D.a>=10||a<=0
正确答案:
D.a>=10||a<=0
问题5下列选项中,合法的字符常量是()
A."4"
B.'d'
C.'ab'
D."A"
正确答案:
B.'d'
解释:
选项A、D为字符串,不合题意;选项C:
'ab'非法。
问题6若变量c为char类型,能正确判断出c为小写字母的表达式是()
A.‘a’<=c<=‘z’
B.(c>=‘a’)||(c<=‘z’)
C.c>=aandc<=z
D.(c>=‘a’)&&(c<=‘z’)
正确答案:
D.(c>=‘a’)&&(c<=‘z’)
问题7C语言中基本的数据类型包括()
A.整型、浮点型(实型)、数组类型
B.整型、浮点型(实型)、字符型
C.整型、字符型、指针类型
D.整型、结构体类型、共用体类型
正确答案:
B.整型、浮点型(实型)、字符型
第三章顺序程序设计
填空题
问题1“printf("%f",(int)(2.5*3.0)/3);”的输出结果是[1]。
正确答案:
2.000000
解释:
(2.5*3.0)/3运算出来的结果是2.5,但(int)的作用是将(2.5*3.0)/3的运算结果强制转化为整型,故(int)(2.5*3.0)/3的运算结果为2而不是2.5。
另外要注意以%f这样的格式输出时输出的结果的小数点后还有6位数的,故printf("%f",(int)(2.5*3.0)/3)得输出结果为2.000000。
问题2若有定义intx=0;则执行:
x=3+5,x*5;语句后,变量x的值为[1]。
正确答案:
8
解释:
”,”属于都好运算符,计算机运行用逗号运算符组成的表达式是从左到右计算各个表达式的值。
如,x=3+5,x*5表达式先运算3+5并把值赋给x,此时x=8,再运算x*5=40但此时不会把值赋给x,所以最终x的值为8。
.
问题3若x为int型变量,则执行以下语句后,x的值为:
[1]
x=7;
x+=x-=x+x;
正确答案:
-14
解释:
这里主要理解复合赋值运算符+=、-=,如x+=a表示x=x+a,-=运算符同理。
赋值符“=”是左结合的,因此运算时应从右到左运算。
x+=x-=x+x;先运算x-=x+x->x=-7,再运算x+=x->x=-14。
问题4若已有定义intc1=1,c2=2,c3;执行语句:
c3=1.0/c2*c1;后,c3的值为[1]
正确答案:
0
解释:
这里要注意发生的格式变换,1.0/c2因为被除数为整型会将运算出来的数的格式变换为整型,故1.0/c2=1.0/2=0。
问题5printf函数中用到格式符%mf,如果要输出一个float型数据,整数按原样输出,小数部分保留2位小数,则m的值应为[1]
正确答案:
.2、0.2
问题6下面程序的输出结果是[1]。
voidmain()
{charx='b',y='o',z='y';
putchar(x);putchar(y);putchar(z);
}
正确答案:
boy
问题7下面程序的输出结果是[1]。
voidmain()
{inta=0;'
a+=(a=8);
printf("%d\n",a);
}
正确答案:
16
解释:
a+=(a=8);要注意运算的先后性,()的运算等级最高,先运算故a+=(a=8);->a+=8->a=16。
运算符的等级高低请查看附录。
选择题
问题1以下选项中,合法的赋值语句是()
A.a+b=2;
B.i+1;
C.a=a+1=5;
D.y=(int)x+4;
正确答案:
D.y=(int)x+4;
问题2若有以下定义语句:
charc1='b',c2='e';则执行语句printf("%d,%c\n",c2-c1,c2-'a'+'A');后的输出结果是().
A.2,M
B.3,E
C.2,E
D.3,M
正确答案:
B.3,E
解释:
程序中的字符是可以用ASCII码来表示的,如:
c1=’b’=98,c2=’e’=101,故c2-c1=3,c2-‘a’+’A’=69,69对应的字符为’E’。
同时这里要注意输出的控制符。
问题3putchar函数可以向终端输出一个()
A.整型变量表达式值
B.实型变量值
C.字符串
D.字符或字符型变量值
正确答案:
D.字符或字符型变量值
问题4下面scanf函数使用错误的是()。
A.scanf("%d",&a);
B.scanf("%c%d",m,n);
C.scanf("%s",s);
D.scanf("%f,%d",&x,&y);
正确答案:
B.scanf("%c%d",m,n);
解释:
用scanf向变量输入数据时,只有输入字符串才不用在变量前地址操作符&,其它的一定要加,否则就会出错。
问题5若变量已经正确定义,要将a、b两个数交换,不正确的语句是()。
A.a=a+b,b=a-b,a=a-b;
B.a=b,b=a;
C.t=a,a=b,b=t;
D.t=b;b=a;a=t;
正确答案:
B.a=b,b=a;
问题6以下程序的输出结果是()
#include
voidmain()
{inta,b,c=246;
a=c/100%9;
b=(-1)&&(-1);
printf("%d,%d\n",a,b);
}
A.2,1
B.3,2
C.3,-1
D.2,-1
正确答案:
A.2,1
第四章分支程序设计
填空题
问题1下列程序,若从键盘输入m,输出结果为_____[1]_______若输入M,则输出结果是_____[2]_______
#include<stdio.h>
main()
{charch;
printf(“Inputacharator:
\n”);
scanf(‘%c”,&ch);
if(‘a’<=ch&&ch<=’z’)ch=ch-32;
printf(“%c\n”,ch);
}
正确答案:
一、M二、M
解释:
上述程序运行是先向ch变量输入一个字符,当输入的字符为小写字母时,该程序会把该字符变换为大写字母(大小写字母的ASCII码相差32,如’a’=97,’A’=65),其它的字符按原样输出。
问题2得10分,满分10分
在C语言中,逻辑运算符中____[1]______的优先级高于算术运算符。
若已知a=2,b=3,则表达式!
a+b的值为_____[2]_______
正确答案:
一、!
、逻辑非二、3
选择题
问题1设a=1,b=2,c=3,d=4,则表达式a<b?
b:
c<d?
a:
d的结果为()。
A.1
B.2
C.3
D.4
正确答案:
B.2
解释:
条件运算符?
:
是左结合的,因此我们先算c<d?
a:
d->z再算a<b?
b:
z。
条件运算符是算的:
如a>b?
c:
d,如果条件a>b成立,其值就为c,否则为d。
c<d?
a:
d->z=a=1,a<b?
b:
z–>a<b?
b:
a->值为b=2。
问题2以下程序输出的结果为()。
main()
{inta=2,b=-1,c=2;
if(a<b)
if(b<0)c=0;
elsec+=1;
printf(“%d\n”,c);
}
A.0
B.1
C.2
D.3
正确答案:
C.2
解释:
该题考察的是嵌套if…else的匹配问题。
这里第一个if是不跟下面的else匹配的,该else是跟第二个if匹配的。
程序运行是先判断a
而c的值是没有改变过的,所以程序输出的值就是c的原值2。
问题3表示关系的数学表达式x<y<z改写为C语言表达式是()。
A.y>x&&y B.x C.x D.x 正确答案: A.y>x&&y 问题4若执行以下程序时从键盘输入5,则输出结果为()。 main() {intx; scanf(“%d”,&x); if(x++<5)printf(“%d\n”,x); elseprintf(“%d\n”,x--); } A.7 B.6 C.5 D.4 正确答案: B.6 解释: 该题考察的是两种自增自减的区别,i++、i—是先赋值再自增减,++i、--i是先自增减再赋值。 我们从键盘输入5->x=5,故x++<5–>5<5为假。 执行完if(x++<5),x的值为6,再执行语句printf(“%d\n”,x--);x—也是先赋值的,故将没有自减前x=6的值先输出再执行自减x=x-1。 所以程序运行的结果就为6。 第五章循环程序设计 填空题 问题1 下列for循环执行[1]次. for(x=0,y=0;(y! =99)&&x<4;x++); 正确答案: 4 解释: 这里的for循环要同时满足条件y! =99和x<4,显然程序运行4次后,x=4已经不再满足循环的条件,此时循环结束。 问题2设有说明"inty=10;",则执行完以下语句后,输出y的值为[1] do{y--; }while(--y); printf("%d\n",y--); 正确答案: 0 解释: while循环结束的条件是判定的条件为假,既—y=0,而—y是先减后赋的,故跳出循环时y的值为y=0,y—是先赋后减的,所以程序输出的结果为0。 问题3以下程序可以实现从键盘输入一串数字,然后以相反的顺序将它们输出,如输入1234;输出4321,请填空。 main() {intnumber,right; printf("enteryounumber: \n"); scanf("%d",&number); do {right=[1]; printf("%d",right); number=[2]; }while(number! =0); printf("\n"); } 正确答案: 一、number%10二、number/10 问题4以下程序的功能是实现从键盘输入一组字符,统计出大写字母的个数m和小写字 母的个数n,并输出m、n中的较大者,请填空。 main() {intm=0,n=0; charc; while((c=getchar()[1])! ='\n') {if(c>='A'&&c<='Z',)m++; if(c>='a'&&c<='z')n++; } printf("%d\n",m n: m[2]); } 正确答案: 一、c=getchar()二、n: m 选择题 问题1C语言中while和do-while循环的主要区别是(). A.do-while的循环体至少无条件执行一次 B.while的循环控制条件比do-while的循环控制条件严格 C.do-while的循环体不能是复合语句 D.do-while允许从外部转到循环体内 正确答案: A.do-while的循环体至少无条件执行一次 问题2以下程序段的输出结果是()。 intx=23; do{ printf("%d",x--); }while(! x); A.输出321 B.输出23 C.不输出任何内容 D.死循环 正确答案: B.输出23 解释: do-while的循环体至少无条件执行一次,既无条件执行语句printf("%d",x--);一次。 执行后x=22! =0,而循环的判定条件为! x,逻辑非令到非0的数都变为0。 故循环执行一次后就终止了。 程序只输出了一次,输出的值为x的初值23。 问题3以下程序的输出结果是()。 main() {inti=5; for(;i<=15;i++) {if(i%4==0)printf("%d",i); elsecontinue;} } A.61014 B.5913 C.812 D.711 正确答案: C.812 解释: 循环的判定条件if(i%4==0)printf("%d",i);elsecontinue;表示该程序只输出能被4整除的数。 循环是从i=5运行到i=15的,在[5,15]中能被4整除的只有8和12。 问题4若i、j已定义为整型,则以下程序段中循环体的执行次数是()。 for(i=5;i;i--) for(j=0;j<4;j++) {循环体语句) A.30 B.25 C.20 D.24 正确答案: C.20 解释: 该程序外循环执行了5次,内循环执行了4,故循环共执行了5*4=20次。 问题5以下叙述正确的是()。 A.do-while语句构成的循环不能用其他语句构成的循环代替 B.用do-while语句构成循环时,在while后的表达式为0时结束循环 C.用do-while语句构成循环时,在while后的表达式为非0时结束循环 D.do-while语句构成的循环只能用break语句退出 正确答案: B.用do-while语句构成循环时,在while后的表达式为0时结束循环 第六章数组 填空题 问题1程序读入20个整数,统计非负数个数,并计算非负数之和。 #include main() { inti,a[20],s,count; s=count=0; for(i=0;i<20;i++) scanf("%d",&a[i]); for(i=0;i<20;i++) {if(a[i]<0)[1]; s+=a[i]; count++; } printf("s=%d\tcount=%d\n",s,count); } 正确答案: continue 问题2下面程序输入一个字符串,输出其中所出现过的大写英文字母.如输入字符串“UKSDYckjsjsjJSJJD”;应输出“UKSDYJ”。 按程序功能填空。 #include #include main() {chara[80],b[26]; inti,j,k=0; gets(a); for(i=0;a[i]! ='\0';i++) if(a[i]>='A'&&a[i]<='Z') {for(j=0;j if(b[j]==a[i])break; if(j==k) {b[k]=a[i];k++;} } b[k]='\0'; for(i=0;[1];i++) printf("%c",b[i]); printf("\n"); } 正确答案: *(b+i)! ='\0'、b[i]! ='\0'、b[i]! =0 问题3下面程序用“顺序查找法”查找数组a中是否存在某一关键数,请填空。 main() {inta[8]={25,57,48,37,12,92,86,33}; inti,x; scanf(“%d”,&x); for(i=0;i<8;i++) if(x==a[i]) {printf(“Found! Theindexis: %d\n”,++i); [1]; } if(i==8)printf(”Can’tfound! ”); } 正确答案: break 问题4以下程序的功能: 输入30个人的年龄(不大于30岁),统计18岁、19岁、……、25岁各有多少人。 填空使程序正确。 main() {inti,n,age,a[30]={0}; for(i=0;i<30;i++) {scanf("%d",&age); [1]; } printf("agenumber\n"); for([2];i<=25;i++) printf("%5d%6d\n",i,a[i]); } 正确答案: 一、a[age]++、a[age]=a[age]+1、a[age]+=1、++a[age]、a[age]++;、a[age]=a[age]+1;、a[age]+=1;、++a[age];二、i=18 问题5以下程序的功能: 把两个按升序排列的数组合并成一个按升序排列的数组。 填空使程序正确。 main() {inti=0,j=0,k=0,a[3]={5,9,19},b[5]={12,24,26,37,48},c[10]; while(i<3&&j<5) if(a[i]>b[j]){c[k]=[1];k++;j++;} else{c[k]=[2];k++;i++;} while(i<3&&j>=5){c[k]=a[i];k++;i++;} while(j<5&&i>=3){c[k]=b[j];k++;j++;} for(i=0;i } 正确答案: 一、b[j]二、a[i] 选择题 问题1对以下说明语句的正确理解是()。 inta[10]={6,7,8,9,10}; A.将5个初值依次赋给a[0]至a[4] B.将5个初值依次赋给a[1]至a[5] C.将5个初值依次赋给a[6]至a[10] D.因为数组长度与初值的个数不相同,所以此语句不正确 正确答案: A.将5个初值依次赋给a[0]至a[4] 问题2若有说明“inta[3][4]={0};”则下面正确的叙述是() A.数组a中每个元素均可得到初值0 B.数组a中各元素都可得到初值,但其值不一定为0 C.只有元素: a[0][0]可得到初值0 D.此说明语句不正确 正确答案: A.数组a中每个元素均可得到初值0 问题3若有说明: inta[3][4];则对a数组元素的正确引用是()。 A.a (2) (1) B.a[1+1][0] C.a[1,3] D.a[2][4] 正确答案: B.a[1+1][0] 问题4对字符数组s赋值,不合法的一个是()。 A.chars[]="Beijing"; B.chars[20];s="Beijing"; C.chars[20]={"beijing"}; D.chars[20]={'B','e','i','j','i','n','g'}; 正确答案: B.chars[20];s="Beijing"; 问题5以下程序段的功能是()。 main() {intj,k,e,t,a[]={4,0,6,2,64,1}; for(j=0;j<5;j++) {t=j; for(k=j;k<6;k++)if(a[k]>a[t])t=k; e=a[t];a[t]=a[j];a[j]=e; } for(k=0;k<6;k++) printf("%5d",a[k]); } A.对数组进行选择法排序(升序) B.对数组进行选择法排序(降序) C.对数组进行气泡法排序(降序) D.对数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 在线 测试 习题