. .
1.C语言中,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.在C语言中,如果下面的变量都是int类型,则输出的结果是( )。 sum=pad=5,pAd=sum++,pAd++,++pAd; printf(\答:输出结果是5。
因为C语言是字母大小写敏感的,也就是说区分大小写字母。pad和pAd是两个不同的变量。 4.以下程序的输出结果是 ( )。 #include
printf(\} 答:0
因为stdio.h头文件中NULL的定义如下: #define NULL 0
5.下面程序的输出是( )。 main()
{ int x=10,y=3;
printf(\} 答:3
因为两个同类型的数据作算术运算,其结果仍为该类型。即整数除以整数,商仍为整数。 10/3的商为3。
6.下面程序的输出是( )。 main()
{ int x=023;
printf(\}
答: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(\}
答:15
. . .
. .
因为在计算逗号表达式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
{int a=2,c=5;
printf(\ }
A)a=%2,b=%5 B)a=2,b=5 C)a=%%d,b=%%d D)a=%d,b=%d 答:D)
因为%%是格式说明符,输出%,其它原样输出。
如果输出函数语句改成printf(\那么输出结果为A)。 10.以下程序的输出结果是( )。 #include
{ int a,b,d=241; a=d/100%9; b=(-1)&&(-1);
printf(\ }
A)6,1 B)2,1 C)6,0 D)2,0 答:B)
241/100的值为2,2%9的值为2。
(-1)&&(-1)的值为1。在逻辑运算中,非0的值为真,真“与”真结果为真,关系和逻辑运算的结果如果为真用“1”表示,如果为假用“0”表示。 11.请选出以下语句的输出结果( )。 printf(\答:5
函数strlen的功能是计算字符串长度。那么字符串\包含多少个字符呢? \\t是横向跳格字符;\\”是字符”;\\065是ASCII码值为八进制数065的字符;\\xff是ASCII码值为十六进制数0xff的字符;\\n是换行字符。该字符串共有5个字符。 注意:记住常用的转义字符。
12.下面程序的输出结果是( )。 int i = 65536; printf(\答:-1
因为int型变量i在C语言中是用16位补码表示的,而65535变成二进制数为11111,因此i的值为11111,按照带符号的十进制数%d输出-1,因为11111是-1的补码。 13.若有说明和语句: int a=5; a++;
此处表达式a++的值是( )。 答:5
表达式a++的值是5表达式计算后,变量a的值是6。
. . .
. .
14.若k为int变量,则以下语句( )。 k=8567;
printf(\,k); 答:|8567 |
两个|原样输出,格式符%-06d说明输出变量k的值长度为6且左对齐。 15.若x 为float型变量,则以下语句( )。 x=213.82631;
printf(\,x); 答:213.83
16.若x为double变量,则以下语句( )。 x=213.82631;
printf(\答:2.14e+02
17.若ch为char型变量,k为int型变量(已知字符a的ASCII十进制代码为97),则执行下列语句
ch='a'; k=12;
printf(\printf(\输出为()。 答:61,141,k=%d 18.若有以下定义: char s=’\\092’; 则该语句()。
A).使s的值包含1个字符 B).定义不合法,s的值不确定 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
int i=010,j=10;
printf(\ }
A)11,10 B)9,10 C)010,9 D)10,9 答: B)
010是八进制数。
21.已知字母A的ASCII码为65,以下程序的输出结果是( )。 #include
. . .
. .
main( ) {
char c1='A',c2='Y';
printf(\ }
答:65,89 22.以下语句
int a=110,b=017;
printf(\%x,%d\\n\,a++,++b); 输出结果是( ) 答:6e,16
110的十六进制数为6e,八进制数017加1为020,等于十进制数16。 23.以下程序 main()
{ int i=3,j=2,a,b,c;
a=(--i==j++)?--i:++j; b=i++; c=j;
printf(\%d,%d,%d\\n\,a,b,c); }
输出结果是( ) 答:1,1,3
24.请读程序 #include
int a; float b, c;
scanf(\ printf(\}
若运行时从键盘上输入9876543210
25.请读程序片段(字符串没有空格字符): printf(\上面程序的输出结果是( )。 答:9
字符串中包含9个字符,分别是A S T \\n 0 1 2 \\1 \\\\。 26.以下程序的输出结果是( ) main()
{ int i=-1;
printf(\%d,%u\\n\,i,i); }
答:-1,65535
1.判断型 char 变量 c1 是否为小写字母的正确表达式为( )。 A) 'a'<=c1<='z' B) (c1>=a)&&(c1<=z)
. . . )。
. .
C) ('a'>=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(\} 答:2
首先计算m=a>b,因为关系运算符>优先级高于赋值运算符=,a>b的结果为假(0),赋值后m的值为0。因为C语言计算逻辑表达式0&&(n=c>d)时,已经知道结果为0,因此n=c>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(\}
答: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.程序的运行结果是( )。 main() {
int m=5;
if(m++>5)printf(\ else printf(\} 答:6
因为表达式m++>5的值为假,m的值为6,执行语句printf(\时输出6,m的值又变为5。 6.程序的运行结果是( )。
. . .
. .
main() {
int a=100,x=10,y=20,m=5,n=0; if(x if(n)a=10; a=-1; printf(\} 答:-1 在if嵌套中,else总是与它上面最近的if结合,因此本程序变为: if(x { if(y!=m) a=1; else if(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(\} 答:1 因为运算符?的结合性是自右至左。因此首先计算c 9.已知A=7.5,B=2,C=3.6,表达式 A>B&&C>A||!AB 的值是( )。 答:0 10.当 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 的值为假即0。 11.程序的运行结果是( )。 main() . . . . . { int x,y,z; x=1;y=2;z=3; x=y--<=x||x+y!=z; printf(\} 答:1,1 因为关系运算符优先级高于逻辑运算符,因此首先计算y--<=x,结果表达式的值为假(0),y的值为1;再计算x+y!=z,结果为真(1),x的值为真(1)。 12.以下程序 main() { int i=0,j=0,k=6; if((++i>0)||(++j>0))k++; printf(”%d,%d,%d\\n”,i,j,k); } 输出结果是( ) 答:1,0,7 首先计算++i>0,结果表达式的值为真,变量i的值为1。在计算1||(++j>0)时,因为结果为真(1), C语言不再计算表达式(++j>0)了。因为if( )中的逻辑表达式值为真,因此计算k++,结果k值7。 13.程序的运行结果是( )。 main() { int a=2,b=7,c=5; switch(a>0) { case 1:switch(b<0) {case 1:printf(\ case 2:printf(\ } case 0:switch(c==5) {case 0:printf(\ case 1:printf(\ default:printf(\ } default:printf(\ }printf(\} 答:#& 因为表达式a>0的值为真(1),计算case 1:后面的语句 switch(b<0) {case 1:printf(\ case 2:printf(\ } 由于表达式b<0的值为假(0),因此本语句执行结束。又由于本语句后面无break语句,因此继续执行 switch(c==5) . . . . . {case 0:printf(\ case 1:printf(\ default:printf(\ } 结果输出 # ,由于上面的语句后面也无break语句,因此继续执行语句 printf(\输出 & 。 14.下面程序的输出是( )。 main() {int a=-1,b=4,k; k=(a++<=0)&&(!(b--<=0)); printf(\} 答:1 0 3 关系表达式a++<=0的值为真(即1),因为首先判断-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) -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 if(b!=15) if(!ok1) x=1; else if (ok2) x=10; x=-1; printf(\} 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)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.设a=6,b=-8,c=3,以下逻辑表达式的值为( )。 'd'&&(a>b)&&(b>c)&&(a-c) 答:0 19.若执行下面的程序时从键盘上输入3和4,则输出是( )。 main() { int a,b,s; scanf(\ s=a; if(a printf(\} 答:16 20.下面的程序 main() {int x=3,y=0,z=0; if(x=y+z)printf(\ else printf(\答:#### 21.两次运行下面的程序,如果从键盘上分别输入6和4,则输出的结果是( main () {int x; scanf(\ if (x++>5)printf(\ else printf(\} 答:7 5 22.假定所有变量均已正确说明,下列程序段运行后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(\ . . . )。 . . else printf(\答:if (a<=b) { x=1; printf(\ } else { y=2; printf(\ } 1.下面程序段的运行结果是( )。 x=y=0; while(x<15) y++,x+=++y; printf(\答:8,20 y++,x+=++y;是一个逗号表达式语句,首先计算y++,然后计算x+=++y。 2.程序的运行结果是( )。 #include int c=0; while(c<=2) { c++; printf(\ } } 答:1 2 3 3.输入 2473 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(\} 答:668977 第一次函数getchar()从键盘读取字符2,变量c的值为字符2,因此c-'2'的值为0,执行case 0:后面的语句putchar(c+4);和putchar(c+4); 执行break;语句后,switch语句执行结束。此次输出字符66。 4.下面程序段输出结果为( )。 . . . . . int x=3; do{ printf(\答:1 -2 5.不是无限循环的语句为( )。 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;y<10;) y=((x=3*y,x+1),x-1); printf(\答:x=15,y=14 执行完第1次循环后x=3 y=2 执行完第2次循环后x=6 y=5 执行完第3次循环后x=15 y=14 7.程序的运行结果是( )。 #include 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(\} 答:8 8.下面程序段不是无限循环的是( )。 A) int i=100; while(1) {i=i0+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--; if (!y) {printf(\ 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.程序的运行结果是( )。 #include {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=4 第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=4 11.程序的运行结果是( )。 main() { int t=1; fun(fun(t)); } fun(int h) { static int a[3]={1,2,3}; int k; for(k=0;k<3;k++) a[k]+=a[k]-h; for(k=0;k<3;k++) printf(\ printf(\ . . . . . return(a[h]); } 答: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(\} 答:4 13.求两个正整数的最大公约数,填空。 #include int r,m,n; scanf(\ if(m while(r) {m=n;n=r;r= (2) ;} /*填空*/ printf(\} 答:(1) { r=m; m=n; n=r;} (2) m%n 辗转相除法求两个正整数的最大公约数。 14.程序的运行结果是( )。 #include 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=1,y=20 15.程序的运行结果是( )。 main() { . . . . . int x=10,y=10,i; for(i=0;x>8;y=++i) printf(\} 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 int i,t=1,s=0; for(i=1;i<=101;i+=2) { (1) ; s=s+t; (2) ;} /*填空*/ printf(\} 答:(1) t=t*i (2) t=-t 17.程序的运行结果是( )。 #include int i,k=0; for(i=1; ;i++) { k++; while(k if(k%3==0) goto loop; } } loop:printf(\} 答:2,3 18.以下程序是利用互减法求三个自然数的最大公约数,请填空。 #include <stdio.h> main() { int a,b,i; printf(\:\; scanf(\%d\,&a); for(i=1;i<3;i++) {printf(\:\; scanf(\%d\,&b); a=gcd(a,b); } printf(\%d\\n\,a); } . . . . . int gcd(int x,int y) {if(x>y) (1) ; /*填空*/ else if(x<y= (2) ; /*填空*/ else return x; } 答:(1) gcd(x-y,y) (2) gcd(x,y-x) 19.以下程序通过命令行参数将命令行中给出的若干个字符串连接起来并输出到屏幕上。程序文件名为p9.c, 执行该程序的命令是: p9 abcd 97 12 请填空并写出输出结果。 / * p9.c * / #include<stdio.h> char *hx(char *sl,char *s2) {char *temp; temp=sl; while(*sl) sl++; while(*s2) { (1) ; /*填空*/ sl++; s2++; } *sl=’\\0’; return temp; } main(int argc,char *argv[]) { int i; for (i=1; (2) ;i++) /*填空*/ hs(argv[i], (3) ); /*填空*/ printf(\%s\\n\,argv[1]); } 答:(1) *s1=*s2 (2) i 程序的输出结果为 abcd9712 20.请写出以下程序的运行结果( )。 # include<stdio.h> main() { char **pd; static char *d[]={\,\,\,\,\}; pd=d; . . . . . while( **pd!=NULL) printf(\%s\\n\,*pd++); } 答:up down left right 21.若i为整型变量,i=0; while (i=0)i++; 则以上循环 A)执行10次 B)执行1次 C)一次也不执行 D)无限循环 答:C) 因为i=0是赋值表达式,其值为0即假,而非条件表达式i==0。 22.下面的程序中有错误的是( )。(每行程序前面的数字是行号)。 1 #include 4 float a[3]={0.0}; 5 int i; 6 for(i=0;i<3;i++)scanf(\ 7 for (i=1;i<3;i++) a[0]=a[0]+a[i]); 8 printf(\9 } 答:第6行 因为数组元素a[i]是浮点型变量,因此不能用%d作为格式编辑符,应该用格式编辑符%f。 23.下列程序执行后的结果是( )。 int a,y; a=10;y=0; do { a+=2;y+=a; printf(\ 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=26 C)a=12 y=12 a=14 y=44 答:B) 注意a=14是赋值表达式,其值为14(表示真),而非条件表达式a==14。 24.下面程序的功能是: 计算1 到 10 之间的奇数之和及偶数之和,请填空。 #include \main() { int a,b,c,i; a=c=0; for(i=0;i<=10;i+=2) { a+=i; _____(1)_ _; /*填空*/ c+=b; } . . . . . printf(\偶数之和=%d\\n\ printf(\奇数之和=%d\\n\} 答:(1) b=i+1 25.下面程序的功能是:输出 100 以能被 3 整除且个位数为 6 的所有整数,请填空。 #include \main() { int i,j; for(i=0; _____(1) _; i++) /*填空*/ {j=i*10+6; if( _ __(2) __ )continue; /*填空*/ printf(\ } } 答:(1) i<=9 (2) j%3!=0 26.C语言中( )。 A)没有-while 语句构成的循环 B)do-while 语句构成的循环必须用break 语句才能结束循环 C)do-while 语句构成的循环,当while 语句中的表达式值为非零时结束循环 D)do-while 语句构成的循环,当 while语句中的表达式值为零时结束循环 答:D) 27.请读程序: #include float x, y, z; scanf(\ z = x / y; while(1) { if (fabs(z) > 1.0) { x = y; y = z; z = x / y;} else break; } printf(\} 若运行时从键盘上输入3.6 2.4 30.定义如下变量: int n=10; 则下列循环的输出结果是( ) while(n>7) { n--; printf(\ . . . . . } 答:9 8 7 32.下面程序的输出是( )。 main() { int x=3,y=6,a=0; while (x++!=(y-=1)) { a+=1; if(y printf(\} 答:x=5,y=4,a=1 33.下面程序的输出是( )。 main() { int x=2; while(x--); printf(\ } 答:-1 循环while(x--);的循环体为一条空语句。当x为0时,循环结束,执行x—后,x的值为-1。 34.以下循环体的执行次数是( )。 main() { int i,j; for(i=0,j=1;i<=j+1;i+=2,j--)printf(\A)3 B)2 C)1 D)0 答:C) 36.下列程序执行后的结果是( )。 main() { int i,j,m=0,n=0; for(i=0;i<2;i++) for(j=0;j<2,j++) if(j>=i)m=1;n++; printf(\答:1 语句n++;并不在循环体。循环体仅包含语句if(j>=i)m=1;。 . . .