c语言习题doc_第1页
c语言习题doc_第2页
c语言习题doc_第3页
c语言习题doc_第4页
c语言习题doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1C语言中,int型数据在计算机内部是由( )表示的。答:int型数据在计算机内部是由16位补码表示的。2下列可以作为C语言用户标识符的是( )。 A) _123 B) a1b2c3 C) int D) 123abc答:A)和B)C语言标识符必须是以英文字母(a到z)、或者下划线_开头的字符串。字符串中只能包含英文字母、下划线和数字(0到9)。但字符串不能是C语言中的32个保留字(例如int,short,long,unsigned,float,char,if,switch,for,while等)。3在语言中,如果下面的变量都是int类型,则输出的结果是( )。 sum=pad=5,pAd=su

2、m+,pAd+,+pAd; printf("%dn",pad);答:输出结果是5。因为C语言是字母大小写敏感的,也就是说区分大小写字母。pad和pAd是两个不同的变量。4以下程序的输出结果是 ( )。 #include<stdio.h> main() printf("%dn",NULL);答:0因为stdio.h头文件中NULL的定义如下:#define NULL 05下面程序的输出是( )。main() int x=10,y=3; printf("%dn",y=x/y);答:3因为两个同类型的数据作算术运算,其结果仍为该

3、类型。即整数除以整数,商仍为整数。10/3的商为3。6下面程序的输出是( )。main() int x=023; printf("%dn",-x);答:18因为023是一个八进制数,表达式-x的值为022,按照%d带符号的十进制数输出,结果为18。注意:023是八进制数;23是十进制数;0x23是十六进制数。7在C语言中,不正确的int类型的常数是( )。A)32768 B)0 C)037 D)0xAF答:A)8执行下面程序中的输出语句后 a的值是( )。main() int a; printf("%dn",(a=3*5,a*4,a+5);答:15因为在

4、计算逗号表达式a=3*5,a*4,a+5时,依次计算下面3个表达式:a=3*5(结果变量a的值为15,该赋值表达式的值也为15)a*4(该算术表达式的值为60)a+5(该算术表达式的值为20,输出函数printf输出20)逗号表达式的值为20,但变量a的值认为15。9以下程序的输出结果是( )。 #include<stdio.h> main() int a=2,c=5; printf("a=%d,b=%dn",a,c); A)a=%2,b=%5 B)a=2,b=5 C)a=%d,b=%d D)a=%d,b=%d答:D)因为%是格式说明符,输出%,其它原样输出。如

5、果输出函数语句改成printf("a=%d,b=%dn",a,c);,那么输出结果为A)。 10以下程序的输出结果是( )。 #include<stdio.h> main() int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf("%d,%dn",a,b); A)6,1 B)2,1 C)6,0 D)2,0答:B)241/100的值为2,2%9的值为2。(-1)&&(-1)的值为1。在逻辑运算中,非0的值为真,真“与”真结果为真,关系和逻辑运算的结果如果为真用“1”表示,如

6、果为假用“0”表示。 11请选出以下语句的输出结果( )。printf("%dn",strlen("t"065xffn");答:5函数strlen的功能是计算字符串长度。那么字符串"t"065xffn"包含多少个字符呢?t是横向跳格字符;”是字符”;065是ASCII码值为八进制数065的字符;xff是ASCII码值为十六进制数0xff的字符;n是换行字符。该字符串共有5个字符。注意:记住常用的转义字符。12下面程序的输出结果是( )。int i = 65536;printf("%dn", i)

7、;答:-1因为int型变量i在C语言中是用16位补码表示的,而65535变成二进制数为,因此i的值为,按照带符号的十进制数%d输出-1,因为11111是-1的补码。13若有说明和语句: int a=5;a+;此处表达式a+的值是( )。答:表达式a+的值是表达式计算后,变量a的值是。14若k为int变量,则以下语句( )。k=8567;printf("|%-06d|n",k);答:|8567 |两个|原样输出,格式符%-06d说明输出变量k的值长度为6且左对齐。15若x 为float型变量,则以下语句( )。x=213.82631;printf("%-4.2fn&

8、quot;,x);答:213.8316若x为double变量,则以下语句( )。x=213.82631;printf("%-6.2en",x);答:2.14e+0217若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97),则执行下列语句ch='a'k=12;printf("%x,%o,",ch,ch,k);printf("k=%dn",k);输出为()。答:61,141,k=%d18若有以下定义:char s=092;则该语句()。A).使s的值包含1个字符 B).定义不合法,s的值不确定

9、C).使s的值包含4个字符 D).使s的值包含3个字符 答:B)因为字符092中的092应该是八进制数,但八进制数中不可能出现9。19执行以下语句后,输出结果是( )。 int a 1; printf("d,d",a,a+);答:2,1因为C语言中函数的实参计算顺序是从右至左。即首先计算 a+,然后计算a。20以下程序的输出结果是( )。 #include<stdio.h> main () int i=010,j=10; printf("%d,%dn",+i,j-); )11,10 )9,10 )010,9 )10,9答: B)010是八进制

10、数。21已知字母的ASCII码为65,以下程序的输出结果是( )。#include <stdio.h> main( ) char c1='A',c2='Y' printf("%d,%dn",c1,c2); 答:65,8922以下语句int a110,b017;printf("x,dn",a,b);输出结果是( )答:6e,16110的十六进制数为6e,八进制数017加1为020,等于十进制数16。23以下程序main() int i3,j2,a,b,c; a(ij)?i:j; bi; cj; printf(&q

11、uot;d,d,dn",a,b,c); 输出结果是( )答:1,1,324请读程序 #include <stdio.h>main()int a; float b, c;scanf("%2d%3f%4f", &a, &b, &c);printf("na=%d,b=%f,c=%f",a,b,c);若运行时从键盘上输入9876543210<CR>(<CR>表示回车),则上面程序的输出结果是( )。答:a=98,b=765.000000,c=4321.00000025请读程序片段(字符串内没有

12、空格字符): printf("%dn",strlen("ASTn0121");上面程序的输出结果是( )。答:9字符串中包含9个字符,分别是A S T n 0 1 2 1 。26以下程序的输出结果是( )main() int i1;printf("d,un",i,i); 答:-1,655351判断型 char 变量 c1 是否为小写字母的正确表达式为( )。A) 'a'<=c1<='z'B) (c1>=a)&&(c1<=z)C) ('a'>=

13、c1)|('z'>=c1)D) (c1>='a')&&(c1<='z')答:D)2程序的运行结果是( )。main() int a=1,b=2,c=3,d=4,m=2,n=2; (m=a>b)&&(n=c>d); printf("%d",n);答:2首先计算m=a>b,因为关系运算符>优先级高于赋值运算符=,a>b的结果为假(0),赋值后m的值为0。因为C语言计算逻辑表达式0&&(n=c>d)时,已经知道结果为0,因此n=c&

14、gt;d就不计算了。N的值仍为2。3执行以下语句后 a 的值为( );b 的值为( )。int a,b,c;a=b=c=1;+a|+b&&+c;答:a的值为2;b的值为1。4程序的运行结果是( )。main() int x=10,y=20,z=30; if(x>y) z=x;x=y;y=z; printf("%d,%d,%d",x,y,z); 答:20,30,30因为if(x>y)z=x;x=y;y=z;是三条语句,即:if(x>y)z=x;x=y;y=z;而不是: if(x>y) z=x;x=y;y=z; 5程序的运行结果是( )。

15、main() int m=5; if(m+>5)printf("%dn",m); else printf("%dn",m-);答:6因为表达式m+>5的值为假,m的值为6,执行语句printf("%dn",m-);时输出6,m的值又变为5。6程序的运行结果是( )。main() int a=100,x=10,y=20,m=5,n=0; if(x<y) if(y!=m) a=1; else if(n)a=10; a=-1; printf("%dn",a);答:-1在if嵌套中,else总是与它上面最

16、近的if结合,因此本程序变为:if(x<y) if(y!=m) a=1; elseif(n) a=10; a=-1; 最后变量a的值为-1。7若有条件表达式 (exp)?a+:b-; 则以下表达式中能完全等价于表达式(exp)的是( )A) (exp=0) B) (exp!=0)C) (exp=1) d) (exp!=1)答:B)因为表达式(exp)的意义是:当变量exp的值为0时表示假;当变量exp的值为非0时表示真。因此它与(exp!=0)等价。8程序的运行结果是( )。main() int k=4,a=3,b=2,c=1; printf("%dn",k<a

17、?k:c<b?c:a);答:1因为运算符?的结合性是自右至左。因此首先计算c<b?c:a,结果为1,然后计算k<a?k:1,结果仍为1。9已知A=7.5,B=2,C=3.6,表达式A>B&&C>A|!A<B&&!C>B 的值是( )。答:010当 m=2,n=1,a=1,b=2,c=3 时,执行完d=(m=a!=b)&&(n=b>c) 后,n=( ),m=( )。答:n=0,m=1因为首先计算关系运算a!=b,结果为真即1,再计算赋值运算m=1;再计算b>c,结果为假即0,赋值n=0;最后d

18、的值为假即0。11程序的运行结果是( )。main() int x,y,z; x=1;y=2;z=3; x=y-<=x|x+y!=z; printf("%d,%d",x,y);答:1,1因为关系运算符优先级高于逻辑运算符,因此首先计算y-<=x,结果表达式的值为假(0),y的值为1;再计算x+y!=z,结果为真(1),x的值为真(1)。12以下程序main() int i0,j0,k6; if(i0)|(j0)k; printf(”d,d,dn”,i,j,k); 输出结果是( )答:1,0,7首先计算i0,结果表达式的值为真,变量i的值为1。在计算1|(j0)时

19、,因为结果为真(1), C语言不再计算表达式(j0)了。因为if( )中的逻辑表达式值为真,因此计算k+,结果k值7。13程序的运行结果是( )。main() int a=2,b=7,c=5; switch(a>0) case 1:switch(b<0) case 1:printf("");break; case 2:printf("!");break; case 0:switch(c=5) case 0:printf("*");break; case 1:printf("#");break; defa

20、ult:printf("?");break; default:printf("&"); printf("n");答:#&因为表达式a>0的值为真(1),计算case 1:后面的语句switch(b<0) case 1:printf("");break; case 2:printf("!");break; 由于表达式b<0的值为假(0),因此本语句执行结束。又由于本语句后面无break语句,因此继续执行switch(c=5) case 0:printf("

21、;*");break; case 1:printf("#");break; default:printf("?");break; 结果输出 # ,由于上面的语句后面也无break语句,因此继续执行语句printf("&");输出 & 。14下面程序的输出是( )。main()int a=-1,b=4,k;k=(a+<=0)&&(!(b-<=0);printf("%d%d%dn",k,a,b);答:1 0 3关系表达式a+<=0的值为真(即1),因为首先判断

22、-1<=0,然后执行a+,变量a的值为0;关系表达式!(b-<=0) 的值为真(即1),因为首先判断4<=0, 然后执行b-,变量b的值为3,最后执行逻辑非运算!;逻辑表达式(a+<=0)&&(!(b-<=0)的值为真(即1),执行赋值运算后,变量k的值为1。15下面的程序片段所表示的数学函数关系是( )。y=-1; if (x!=0) if(x>0)y=1; else y=0;A)y= -1 (x<0) B)y= 1 (x<0) C)y= 0 (x<0) D)y=-1 (x<0) 0 (x=0) -1 (x=0) -

23、1 (x=0) 1 (x=0) 1 (x>0) 0 (x>0) 1 (x>0) 0 (x>0)答:C)16下面程序的输出是( )。main() int x=100,a=10,b=20,ok1=5,ok2=0;if(a<b) if(b!=15) if(!ok1) x=1; else if (ok2) x=10; x=-1; printf("%n",x);A)-1 B)0 C)1 D)下面定的值答:A)因为语句x=-1;并不在if语句之中。17与 y=(x>0?1:x<0?-1:0)功能相同的if语句是( )。 a) if(x>0

24、)y=1; b) if(x)else if(x<0)y=-1; if(x>0)y=1;else y=0; else y=-1;c)y=-1; d) y=0;if(x) if(x>0) if(x>0)y=1; if(x>0)y=1;else if(x=0)y=0; else y=-1;else y=-1;答:A)18设a6,b8,c3,以下逻辑表达式的值为( )。 'd'(ab)(bc)(ac)答:0 19若执行下面的程序时从键盘上输入3和4,则输出是( )。 main() int a,b,s; scanf("%d%d",&

25、;a,&b); s=a; if(a<b)s=b; s=s*s; printf("%dn",s);答:1620下面的程序main()int x=3,y=0,z=0; if(x=y+z)printf("*"); else printf("#");答:#21两次运行下面的程序,如果从键盘上分别输入和,则输出的结果是( )。main ()int x; scanf("%d",&x); if (x+>5)printf("%d",x); else printf("%dn&

26、quot;,x-);答:7 522假定所有变量均已正确说明,下列程序段运行后x值是( )。 a=b=c=0;x=35; if (!a) x-; else if(b);if (c) x=3; else x=4;答:4该程序:a=b=c=0;x=35;if (!a) x-; else if(b);if (c) x=3; else x=4;23以下两条if 语句合并成一条if 语句为( )。if (a<=b) x=1;else y=2;if (a>b) printf("*y=%dn",y);else printf("#x=%dn",x);答:if

27、(a<=b) x=1; printf("#x=%dn",x); else y=2; printf("*y=%dn",y); 1下面程序段的运行结果是( )。x=y=0;while(x<15) y+,x+=+y;printf("%d,%d",y,x);答:8,20y+,x+=+y;是一个逗号表达式语句,首先计算y+,然后计算x+=+y。2程序的运行结果是( )。#include<stdio.h>main() int c=0; while(c<=2) c+; printf("%dn",c)

28、; 答:1233输入 2473<CR> ,下面程序的运行结果是( )。#include<stdio.h>main() int c; while(c=getchar()!='n') switch(c-'2') case 0: case 1:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); default:putchar(c+2);break; printf("n");答:668977第一次函数getchar()从键盘读取字符2,变量c的值为字符2,

29、因此c-'2'的值为0,执行case 0:后面的语句putchar(c+4);和putchar(c+4); 执行break;语句后,switch语句执行结束。此次输出字符66。4下面程序段输出结果为( )。int x=3;do printf("%dn",x-=2); while(!(-x);答:1 -25不是无限循环的语句为( )。A) for(y=0,x=1;x>+y;x=i+)i=x;B) for( ; ;x+=i);C) while(1)x+;D) for(i=10; ;i-) sum+=i;答:A)6下面程序段的运行结果是( )。for(y=1

30、;y<10;) y=(x=3*y,x+1),x-1);printf("x=%d,y=%d",x,y);答:x=15,y=14执行完第1次循环后x=3 y=2执行完第2次循环后x=6 y=5执行完第3次循环后x=15 y=147程序的运行结果是( )。#include<stdio.h>main() int a,b; for(a=1,b=1;a<=100;a+) if(b>=20) break; if(b%3=1) b+=3; continue; b-=5; printf("%dn",a);答:88下面程序段不是无限循环的是(

31、)。A) int i=100; while(1) i=i%100+1; if(i>100)break; B) for( ; ; );C) int k=0; do+k; while(k>=0);D) int s=36; while(s);-s;答:C)i值只能是从1到100之间变化,i>100永远是假,因此break永远也不会被执行。for循环语句的第2个表达式没有,意味着永远为真。每次循环k的值加1,当k的值为32767时,再执行+k,k的值变为-32768,循环结束。因为语句s并不在循环中,while(s);永远执行一个空语句。9下面程序段( )。x=3;do y=x-;

32、if (!y) printf("*");continue; printf("#"); while(1<=x<=2);A)输出# B)输出#*C)无限循环 D)含有不合法的控制表达式答:C)第一次循环执行y=x-;后x和y的值分别为2和3,因此输出1个#。执行1<=x<=2时由于逻辑运算符<=的结合性是从左至右,因此首先计算1<=x,结果为真(即1),然后计算1<=2,结果仍为真,再次执行循环。可以看出无论1<=x为真(即1)或者为假(即0),1<=x<=2的值始终为真,因此循环为无限循环。10程

33、序的运行结果是( )。#include<stdio.h>main()int k=0;char c='A' do switch(c+) case 'A':k+;break; case 'B':k-; case 'C':k+=2;break; case 'D':k=k%2;continue; case 'E':k=k*10;break; default:k=k/3; k+; while(c<'G'); printf("k=%dn",k);答:k=4第

34、1次循环执行前c=A,k=0,循环执行后 c=B,k=2第2次循环执行后 c=C,k=4第3次循环执行后 c=D,k=7第4次循环执行后 c=E,k=1第5次循环执行后 c=F,k=11第6次循环执行后 c=G,k=411程序的运行结果是( )。main() int t=1; fun(fun(t);fun(int h) static int a3=1,2,3; int k; for(k=0;k<3;k+) ak+=ak-h; for(k=0;k<3;k+) printf("%d,",ak); printf("n"); return(ah);答

35、:1,3,5,-1,3,7,12程序的运行结果是( )。main() int i,j,a=0; for( i=0;i<2;i+) for(j=0;j<4;j+) if(j%2) break; a+; a+; printf("%dn",a);答:413求两个正整数的最大公约数,填空。#include<stdio.h>main() int r,m,n; scanf("%d%d",&m,&n); if(m<n) (1) ; /*填空*/ r=m%n; while(r) m=n;n=r;r= (2) ; /*填空*/

36、 printf("%dn",n);答:(1) r=m; m=n; n=r;(2) m%n辗转相除法求两个正整数的最大公约数。14程序的运行结果是( )。#include<stdio.h>main() int i,x,y; i=x=y=0; do+i; if(i%2!=0)x=x+i;i+; y=y+i+; while(i<=7); printf("x=%d,y=%dn",x,y);答:x=1,y=2015程序的运行结果是( )。main() int x=10,y=10,i; for(i=0;x>8;y=+i) printf(&qu

37、ot;%d,%d,",x-,y);A) 10,1,9,2,B) 9,8,7,6,C) 10,9,9,0,D) 10,10,9,1,答:D)16下面程序的功能是计算 1-3+5-7+.-99+101 的值,请填空。#include<stdio.h>main() int i,t=1,s=0; for(i=1;i<=101;i+=2) (1) ; s=s+t; (2) ; /*填空*/ printf("%dn",s);答:(1) t=t*i (2) t=-t17程序的运行结果是( )。#include<stdio.h>main() int

38、i,k=0; for(i=1; ;i+) k+; while(k<i*i) k+; if(k%3=0) goto loop; loop:printf("%d,%d",i,k);答:2,318以下程序是利用互减法求三个自然数的最大公约数,请填空。 #include stdio.h main() int a,b,i; printf("Enter the first number to a:"); scanf("d",a); for(i1;i3;i) printf("Enter next number:"); sc

39、anf("d",b); agcd(a,b); printf("The greatest common divisor isdn",a); int gcd(int x,int y) if(xy) (1) ; /*填空*/ else if(xy (2) ; /*填空*/ else return x; 答:(1) gcd(x-y,y) (2) gcd(x,y-x)19以下程序通过命令行参数将命令行中给出的若干个字符串连接起来并输出到屏幕上。程序文件名为p9.c, 执行该程序的命令是: p9 abcd 97 12 请填空并写出输出结果。 / * p9.c * /

40、 #includestdio.h char *hx(char *sl,char *s2) char *temp; tempsl; while(*sl) sl; while(*s2) (1) ; /*填空*/ sl; s2; *sl0; return temp; main(int argc,char *argv) int i; for (i1;(2) ;i) /*填空*/ hs(argvi,(3) ); /*填空*/ printf("sn",argv1); 答:(1) *s1=*s2(2) i<argc-1(3) argvi+1程序的输出结果为 abcd971220请写

41、出以下程序的运行结果( )。 # includestdio.h main() char *pd; static char *d"up","down","left","right",""; pdd; while( *pd!NULL) printf("sn",*pd);答:up down left right21若i为整型变量,i0;while (i0)i;则以上循环A)执行10次 B)执行1次C)一次也不执行 D)无限循环答:C)因为i=0是赋值表达式,其值为0即假,而非条件表

42、达式i=0。 22下面的程序中有错误的是( )。(每行程序前面的数字是行号)。 1 #include<stdio.h> 2 main() 3 4 float a3=0.0; 5 int i; 6 for(i=0;i<3;i+)scanf("%d",&ai); 7 for (i=1;i<3;i+) a0=a0+ai); 8 printf("%fn",a0);9 答:第6行因为数组元素ai是浮点型变量,因此不能用%d作为格式编辑符,应该用格式编辑符%f。23下列程序执行后的结果是( )。 int a,y; a=10;y=0; do a+=2;y+=a; printf("a=%d y=%dn",a,y); if(y>20)break; while(a=14);A)a=12 y=12 B)a=12 y=12 a=14 y=16 a=16 y=28 a=16 y=20 D)a=12 y=12 a=18 y=24 a=14 y=26C)a=12 y=12 a=14 y=44答:B)注意a=14是赋值表达式,其值为14(表示真),而非条件表达式a=14。24下面程序的功能是: 计算1 到 10 之间的奇数之和及偶数之和,请填空。#incl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论