C 语言练习题总汇
一、 单选题:
【顺序结构程序设计】
1.己知int k,m=1;执行语句k=-m++;后k 的值是( A )。(提示:负号与自加运算符同级,结合方向从右向左)
A)-1 B) 0 C)1 D)2
2.若有定义int x=4;则执行语句 x + = x * = x + 1;后,x 的值为( C )。
A)5 B)20 C)40 D) 无答案
3.若有定义:float a=3.0,b=4.0,c=5.0;则表达式 1/2*(a+b+c)的值为( C )。
A)6.0 B)6 C)0.0 D)无答案
4.以下程序段的输出结果是( C )。(提示:a 当约束过严时,约束失效。按自由格式输出。 )
int a=1234;
printf("%2d\n",a);
A)12 B)34 C)1234 D)提示出错,无结果
5. 下列程序段的输出结果是(C )。
int a=1234;
float b=123.456;
double c=12345.54321;
printf ("%2d,%3.2f,%4.1f",a ,b ,c );
A) 无输出 B)12, 123.46, 12345.5 C)1234,123.46,12345.5 D)1234,123.45, 1234.5
6. 设x, y均为整型变量,且x=8, y=5,则以下语句的输出结果是(D )。
printf ("%d,%d\n",x--,++y);
A)8,5 B)7,5 C) 7,6 D) 8,6
7. 以下程序的输出结果是( A )。
int main()
{ int a=20,b=10;
printf("%d,%%d\n",a+b,a-b ); }
A) 30,%d B)30,10 C)30,%10 D)以上答案均不正确 (%%d中第一个%后面的表示字符)
8.下列程序的运行结果是(A )。
int main()
{ float x=2.5;
int y;
y=(int )x ;
printf("x=%f,y=%d",x ,y ); }
A) x=2.500000,y=2 B)x=2.5,y=2 C)x=2,y=2 D) x=2.500000,y=2.000000
9. 以下程序的输出结果是(A )。
int main()
{ char c=‘z ’;
printf("%c",c-25);}
A)a B)z C)z-25 D)y (字母共有26个,而z 是最后一个)
10.下面程序的输出结果是(C )。
int main( )
{ double d=3.2 ;
int x=1.2, y ;
y=(x+3.8)/5.0 ;
printf("%d\n",d*y);}
A) 3 B) 3.2 C)0 D) 3.07
11. 下面程序的输出结果是( C )。(提示:输出时无定界符)
int main()
{ int k=17;
printf("%d,%o,%x\n",k ,k ,k) ;}
A)17,17,17 B)17,021,0x11 C)17,21,11 D)17,0x11,021
12.下列程序执行后的输出结果是(C )。
int main()
{ char x =OxFFFF;
printf("%d\n",x--);}
A)-32767 B)FFFE C)-1 D)=-32768
13.printf("a\pe\"hi\"y\\\bou\n");的输出结果是(C )。
A)a\pe\"hi\"y\\\bou B)a\pe\"hi\"y\bou
C)re"hi"you D)ape"hi"y\bou
14.有定义语句:int x,y;若要通过scanf("%d,%d",&x,&y);语句使变量x 得到数值11,变量y 得到数值12,下面四组输入形式中错误的是(A )。
A)1112 B)11,12
C)11,12 D)11,12
15.有以下程序段:
int m=0,n=0;
char c=‘a";
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若从键盘上输入:10A10 ,则输出结果是(A )。
A)10,A,10 B)16,a,10 C)10,a,0 D)10,A,0
16. 若变量已正确说明为int 类型,要通过语句scanf("%d %d %d ",&a,&b,&c);给a 赋值1,b 赋值2,c 赋值3,不
正确的输入形式是(B )。
A) 123 B)1,2,3 C)123 D)123
17.a, b,c被定义为int 型变量,若从键盘给a, b,c输入数据,正确的输入语句是(D)
A)input a,b,c; B)read("%d%d%d",&a,&b,&c); C)scanf("%d%d%d",a,b,c); D)scanf("%d%d%d",&a,&b,&c);
18.已知a,b,c 为int 型变量,若从键盘输入:1,2,3,使a 的值为1,b 的值为2,c 的值为3, 以下选项中正
确的输入语句是(B )。
A)scanf("%2d,%2d,%2d",a,b,c); B)scanf("%d,%d,%d",&a,&b,&c);
C)scanf("%d %d %d",&a,&b,&c); D)scanf("i=%dj=%d,k=%d",&a,&b,&c);
19. 执行下程序时输入:123456789,输出结果是( D )。
int main()
{char s;
int c,i ;
scanf("%c",&c);
scanf("%d",&i);
scanf ("%c",&s);
printf ("%c,%d,%c\n",c ,i ,s );}
A)123,456,789 B)1,456,789 C)1,23,456,789 D) 1,23,
20. 已定义c 为字符型变量,则下列语句中正确的是( C )。
A )c='97 ' B)c=“97 “ C)c=97 D)c=“a ”
21. 以下程序的功能是:给r 输入数据后计算半径为r 的圆面积s 。程序在编译时出错。
#include
void main()
{
int r;
float s;
scanf("%d",&r);
s=p*r*r;
printf("s=%f\n",s);
}
出错的原因是( )。
A )注释语句书写位置错误
B )存放圆半径的变量r 不应该定义为整型
C )输出语句中格式描述符非法
D )计算圆面积的赋值语句中使用了非法变量
答案:D
22. 有以下程序
#include
void main( )
{
int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m);
}
程序运行后的输出结果是( )。
A )12353514 B)12353513 C)12343514 D)12343513
答案:A
23. 数字字符0的ASCII 值为48,若有以下程序
#include
void main( )
{
char a="1",b="2";
printf("%c,",b++);
printf("%d\n",b-a);
}
程序运行后的输出结果是______。
A )3,2 B)50,2 C)2,2 D)2,50
答案:C
24. 有以下程序
#include
void main( )
{
char c1="1",c2="2";
c1=getchar( ); c2=getchar( ); putchar(c1); putchar(c2);
}
当运行时输入:a 后,以下叙述正确的是______。
A )变量c1被赋予字符a ,c2被赋予回车符
B )程序将等待用户输入第2个字符
C )变量c1被赋予字符a ,c2中仍是原有字符2
D )变量c1被赋予字符a ,c2中将无确定值
答案:A
25.
【选择结构程序设计】
1. 有变量说明语句int a,b ,c;,顺序执行下面语句:
a=b=c=1;
++a||++b&&++c;
那么,变量b 的值应是( B )
A .2 B.1 C.0 D.3
2. 有变量说明int a=3;,则表达式a1的运算结果和a 的值应该是( B )
A .0和2 B.0和3 C.1和2 D.1和3
3. 设int a=3,b=4,c=5;,下列表达式的值不为1的是( A )。
A )a+b>c&&b==c B)a||b+c&&b-c
C )!(a>b)&&!c||1 D)!(a+b)+c-1&&b+c/2
4.#include
int main( )
{
int a,b,c;
a=10;b=50;c=30;
if(a>b) a=b;b=c;c=a;
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
}
程序的输出结果是( C )。
A.a=10, b=50, c=10 B. a=10, b=50, c=30
C.a=10, b=30, c=10 D. a=50, b=30, c=50
5. 若整型变量a 、b 、c 、d 中的值依次为:1、4、3、2。则条件表达式a
(A )1 (B )2 (C )3 (D )4
6. 若x 和y 代表整型数,以下表达式中不能正确表示数学关系|x-y|
A )abs(x-y)-10&&x-y10 D)(x-y)*(x-y)
7. 若有定义:int a=7;f1oat x=2.5,y =4.7;则表达式x+a%3*(int)(x+y)%2/4的值是( A )。
A ) 2.5 B) 2.7 C) 3.5 D) 4.7
8. 若有定义和语句:
int s ,p ;
s=p=5; p=s++,++p,p+2,p++; 则执行语句后 p的值是( C )
A)9 B)8 C)7 D)6
9. 若有定义:int a,b ;则表达式 a=4,b=3,a+b+2,a++,a+b+2的值为( C )。
A) 12 B)11 C)10 D)无答案
10. 己知int k=10 , m=3,n;则下列语句的输出结果是( B )。
printf("%d\n",n=(k%m,k/m));
A) 2 B)3 C)4 D)5
11. 设x 和y 均为int 型变量,则以下语句:x+=y; y=x-y; x-=y; 的功能是( )。
A ) 把x 和y 按从大到小排列 B) 把x 和y 按从小到大排列
C) 无确定结果 D) 交换x 和y 中的值
答案:D
12. 设int i=2,j=3,k=4,a=4,b=5,c=3;,则执行表达式(a=ik)&&(c=i,j,k)后,c 值是( )。
A )0 B)1 C)2 D)3
答案:D
13. 若x 、a 、b 、c 均 为int 型变量,则执行表达式x= (a = 4, b = 8, c = 12)后,x 的值为_______。
A )4 B)8 C)12 D)24
答案:C
14. 以下程序的输出结果是_______。
#include
void main()
{
int a=-1, b=4, k;
k = ( ++a
printf ("%d%d%d \n", k, a, b );
}
A )104 B)103 C)003 D)004
答案:D
15. 下列运算符中,结合方向为自左向右的是( )。
(A )?: (B ), (C )+ = (D )+ +
答案:(B )
16. 下列运算符中优先级最高的是( )
A )! B)% C)- = D)&&
答案:(A )
17. 有以下程序
#include
void main( )
{
int m=3,n=4,x;
x=-m++;
x=x+8/++n;
printf("%d\n",x);
}
程序运行后的输出结果是( )。
A )3 B)5 C)-1 D)-2
答案:D
18.
【循环结构练习题】
1. 下面有关for 循环的正确描述是( )
A .for 循环只能用于循环次数已经确定的情况
B .for 循环是先执行循环体语句,后判定表达式
C .在for 循环中,不能用peak 语句跳出循环体
D .for 循环体语句中,可以包含多条语句,但要用花括号括起来
答案:D
2. 对于for(表达式1;; 表达式3) 可理解为( )
A .for(表达式1:1;表达式3)
B .for(表达式1;1;表达式3)
C .for(表达式1;表达式1;表达式3)
D .for(表达式1;表达式3;表达式3)
答案:B
3. 以下正确的描述是( )。
A .continue 语句的作用是结束整个循环的执行
B .只能在循环体内和switch 语句体内使用peak 语句
C .在循环体内使用peak 语句或continue 语句的作用相同
D .从多层循环嵌套中退出时,只能使用goto 语句
答案:B
4. 下面程序段不是死循环的是( )。
A .int I=100; B.for ( ; ; );
while(1)
{ I=I%100+1;
if(I>100) peak;}
C .int k=0; D.int s=36;
do{- -k; } while(s);
while(k>=0); --s;
答案:C
5. 以下能正确计算1*2*3*„„*10的程序是( )。
A .do{i=1;s=1; B.do{i=1;s=0;
s=s*i; s=s*i;
i++; i++;
}while(i
C .i=1;s=1; D.i=1;s=0;
do{ s=s*i; do{ s=s*i;
i++; i++;
}while(i
答案:C
6. 下面程序的运行结果是( )。
#include
int main( )
{ int y=10;
do{y--;}
while(--y);
printf("%d\n",y--);}
A .-1 B.1 C.8 D.0
答案:D
7. 下面程序的运行结果是( )。
#include
int main()
{ int num=0;
while(num
{num++;
printf("%d\n",num);
}
}
A .1 B.1 2 C.1 2 3 D.1 2 3 4
答案:C
8. 若运行以下程序时,从键盘输入3.6 2.4(表示回车),则下面程序的运行结果是( )#include
#include
void main( )
{ float x,y,z;
scanf(“%f%f”,&x,&y);
z=x/y;
while(1)
{ if(fabs(z)>1.0)
{ x=y;y=z;z=x/y;} 。
else
peak;
}
printf(“%f\n”,y);
}
A .1.500000 B.1.600000 C.2.000000 D.2.400000
答案:B
9. 有以下程序:
#include
void main( )
{
int i=0,s=0;
for(; ;)
{
if(i==3||i==5)continue;
if(i==6) peak;
i++;
s+=i;
};
printf("%d\n",s);
}
程序运行后的输出结果是( )。
A )10 B)13 C)21 D)程序进入死循环
答案:D
10. 若有程序段:
for (m=1;m
{
scanf("%d",&y);
if(y
printf("%3d",m);
}
正确的描述是( )。
A )当y=0时什么也不输出
C )printf 函数永远也不执行 D)最多允许输出100个非负整数
答案:D
11. 下列程序的运行结果是( )。
# include “stdio.h”
void main( )
{ int i=23;
do{++i;}
while(i);
printf(“%d”,i);
}
A )23 B)24 C)死循环 D)无任何结果
答案:C
12.
二、填空题
【顺序结构程序设计】
1.有以下程序:
int main()
{ int m,n ,p ;
scanf("m=%dn=%dp=%d",&m,&n ,&p);
printf ("%d%d%d\n",m ,n ,p );}
若想从键盘上输入数据,使变量m 中的值为123, n中的值为456, p中的值为789, 则正确的输入是 m=123n=456p=789。
2. 以下程序段的输出结果是 28 。
int main()
{ int a=2,b=3,c=4;
a*=16 +(b++)-(++c);
printf ("%d",a );}
3.以下程序段的输出结果是 5 。
int x=17,y=26;
printf ("%d",y/=(x%=6));
4.下列程序的输出结果为 12 。
int main()
{ int x=3,y=5;
printf("%d",x= (x--)*(--y) );}
5. 若有以下程序:
int main()
{ char a;
a=‘H ’-‘A ’+‘0’; (‘0’, ’o ’)
printf("%c, %d\n",a,a ); }
执行后的输出结果是 7,55 。
6. 以下程序段的输出结果是 261 。
void main()
{ int a=177;
printf("%o\n",a ); }
7. 以下程序的输出结果是 0 (-32767~32767int) 。
void main( )
{ unsigned short a=65536; int b;
printf("%d\n",b=a); }
提示:当unsigned short和int 均占2个字节时。
8. 输入“12345,xyz ”,下列程序输出的结果是
int main( )
{ int x;char y;
scanf (“%3d%3c”,&x,&y);
printf (“%d,%c”,x,y);}
答案:123,4
9. 以下程序的运行结果是 。
#include
void main( )
{
int i=8,j=9,m,n;
m=++i;
n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
}
答案:9,10,9,9
10. 下列程序的输出结果是 。
#include
void main( )
{
int a = 3 , b = 14 , c = 5 ;
c = c + a *a + b % 5 * 10 ;
printf("%o\n" , c );
}
答案:66
11. 阅读程序,并按给定的输出格式将程序运行结果写在“运行结果:”之后
#include
void main( )
{
int a, b, c;
a = (b = (c = 3) * 5)*5;
printf ("a=%d, b=%d, c=%d \n", a, b, c);
}
运行结果是:
答案:运行结果是:a = 75, b = 15, c = 3
12.
【选择结构程序设计】
1. 以下程序运行的结果是 。
#include
void main( )
{
int a,b,c;
a=1;b=2;c=3;a=b--
printf("%d,%d",a,b);
}
答案:1,1
2. 以下程序的运行结果是 。
#include
void main( )
{
int a,b,c;
a=b=c=1;
if (a++||++b) c++;
printf("%d,%d,%d\n",a,b,c);
}
答案:2,1,2
3. 以下程序的输出结果是 。
#include
void main( )
{
int k, i=0, j=2;
k = i++&&j++;
printf ("%d,%d,%d\n", i, j, k);
}
答案:1,2,0
4.
【循环结构程序设计】
1. 若运行以下程序时,从键盘输入ADescriptor ,则下面程序的运行结果是 v0=12,v1=4,v2=12 。 #include
void main( )
{char c;
int v0=0,v1=0,v2=0;
do{
switch(c=getchar())
{case ’a ’:case ’A ’:
case ’e ’:case ’E ’:
case ’i ’:case ’I ’:
case ’o ’:case ’O ’:
case ’u ’:case ’U ’:v1+=1;
default :v0+=1;v2+=1;}
}while(c!=’\n’);
printf(“v0=%d,v1=%d,v2=%d\n”,v0,v1,v2);
}
2. 下面程序的运行结果是 8,-2 。
#include
void main( )
{ int i,b,k=0;
for(i=1;i
{ b=i%2;
while(b- ->=0) k++;
}
printf(“%d,%d”,k,b);
}
3. 下面程序的运行结果是 8,22 。
#include
void main( )
{ int a,b;
for (a=1,b=1;a
{ if(b>=20) peak;
if(b%3==1) {b+=3; continue;}
b-=5;
}
printf(“%d,%d\n”,a,b);
}
4. 下面程序的运行结果是 x=8 。
#include
void main( )
{ int i,j,x=0;
for (i=0;i
{ x++;
for(j=0;j
{ if(j%2) continue;
x++;
}
x++;
}
printf(“x=%d\n”,x);
}
5. 下面程序的运行结果是 *#*#*#$ 。
#include
void main( )
{ int i;
for (i=1;i
{ if(i%2) printf(“*”);
else continue;
printf(“#”);
}
printf(“$\n”);
}
6. 下面程序的运行结果是 4 。
#include
void main()
{
int i,j,a=0;
for(i=0;i
{ for (j=0; j
{ if (j%2) peak;
a++;
}
a++;
}
printf(“%d\n”,a);
}
7. 有以下程序, 若从键盘输入:247,则程序的输出结果是 。
#include
void main( )
{
int c;
while ((c=getchar())!="\n")
{
switch (c-"2")
{
case 0:
case 1: putchar(c+4);
case 2: putchar(c+4);peak;
case 3: putchar(c+3);
default:putchar(c+2);peak;
}
}
}
答案:6689
8.
三、程序填空题
1. 下面程序的功能是将小写字母变成对应的大写字母后的第二个字母,其中y 变成A ,z 变成B ,请在空白处填入正确内容。
#include
void main( )
{
char c;
while((c=getchar())!=’\n’)
{ if(c>=’a’&&c
if (c>’Z’&&c
}
printf(“%c”,c);
}
}
答案:c-=30,c-=26。
2. 下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m 和小写字母的个数 n,并输出m ,n 中的较大数,请在 内填入正确内容。
#include
void main( )
{
int m=0,n=0;
char c;
while(( )!=’\n’)
{ if(c>=’A’&&c
if(c>=’a’&&c
}
printf(“%d\n”,m
}
[解答]:c=getchar( ),n :m 。
3. 从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。请在 内填入正确内容。
#include
void main( )
{
float x, amax, amin;
scanf(“%f”,&x);
amax=x;
amin=x; while( )
{
if(x>amax)
amax=x; if( )
amin=x;
scanf(“%f”,&x);
}
printf("amax=%f\namin=%f\n",amax, amin);
}
[解答]:x>=0,x
4. 求算式xyz+yzz=532中x , y, z的值(其中xyz 和yzz 分别表示一个三位数)。请在 内填入正确内容。 #include
void main( )
{
int x,y,z,i,result=532; for(x=1; ;x++) for(y=1; ;y++) for(z=0; ;z++)
{
i=100*x+10*y+z+100*y+10*z+z; if( )
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
}
[解答]:x