'=======================================================================================================
以下文章送给正在学习C语言的网友,希望可以帮到你们。在这里谢谢你们的支持。 祝:你们学习愉快
我的和讯www.eopn.net
蓝蜻蜓生活网
'=======================================================================================================
C语言习题集
习题一
一.填空题
1.C程序是由( )构成的,一个C程序中至少包含( ) 。因此,( ) 是C程序的基本单位。
2.C程序注释是由( ) 和( ) 所界定的文字信息组成的。
3.函数体一般包括( ) 和( ) 。
二.判断题
1.一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。 【 】
2.main函数必须写在一个C程序的最前面。 【 】
3.一个C程序可以包含若干的函数。【 】
4.C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。【 】
5.C程序的注释只能是一行。【 】
6.C程序的注释不能是中文文字信息。【 】
8.可以使用Turbo C来编译和连接一个C程序。【 】
9.可以使用Turbo C来运行一个C程序。【 】
10.可以使用Turbo C来实时调试(即动态调试)一个C程序。【 】
三.简答题
1. 写出一个C程序的基本结构。
2. 简要叙述使用Turbo C 2.0编译和运行一个程序的步骤。
四.编程题
1. 提高题:参照课本例1.1,试编写一个C程序,输出如下信息。(提示:使用键盘上的一些符号)。
2. 提高题:试编写一个C程序,输出如下信息。
试试看,可以输出其他组合图案吗?
习题二
一.选择题
1、合法的字符常量是 。
A) ‘/t’ B) “A” C) ‘a’ D)’/x32’
2、 合法的字符常量是 。
A) ‘/084’ B) ‘/84’ C) ‘ab’ D)’/x43’
3、是C语言提供的合法的数据类型关键字。
A) Float B) signed C) integer D)Char
4、在以下各组标识符中,合法的标识符是。
(1)A)B01 B)table_1 C) 0_t D) k%
(2)A)Fast_ B) void C)pbl D)
(3)A)xy_ B)longdouble C)*p D)CHAR
(4) A) sj B)Int C)_xy D)w_y23
5、属于合法的C语言长整型常量的是 。
A)5876273 B)0L C)2E10 D)(long)5876273
6、下面选项中,不是合法整型常量的是 。
A)160 B)-0xcdg C)-01 D)-0x48a
7、判断int x = 0xaffbc;x的结果是 。
A)赋值非法 B)溢出 C)为affb D)为ffbc
8、下面选项中,均是合法浮点数的是 。
A)+1e+1 B)-.60 C)123e D)-e3
A)5e-9.4 B)12e-4 C)1.2e-.4 D).8e-4
A)03e2 B)-8e5 C)+2e-1 D)5.e-0
9、在C语言中,要求参加运算的数必须时整数的运算符是 。
A)/ B)* C)% D) =
10、在C语言中,字符型数据在内存中以 形式存放。
A)原码 B)BCD码 C)反码 D)ASCII码
11、下列语句中,符合语法的赋值语句是 。
A)a=7+b+c=a+7; B)a=7+b++=a+7;
C)a=(7+b,b++,a+7); D)a=7+b,c=a+7;
12、是非法的C语言转义字符。
A)‘/b’ B) ‘/0xf’ C)‘/037’ D)‘/’’
13、对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中, 是正确的。
A)语法错误 B)f为5.0 C)f为0.0 D)f为2.0
14、与代数式(x*y)/(u*v) 不等价的C语言表达式是。
A)x*y/u*v B)x*y/u/v C)x*y/(u*v) D)x/(u*v)*y
15、在C语言中,数字029是一个。
A)八进制数 B)十六进制数 C)十进制数 D)非法数
16、C语言中整数-8在内存中的存储形式为 。
A)1111111111111000 B)100000000001000
C)000000000001000 D)1111111111110111
17、对于char cx=’ /039’;语句,正确的是。
A)不合法 B)cx的ASCII值是33
C)cx的值为四个字符 D)cx的值为三个字符
18、若int k=7,x=12;则能使值为3的表达式是 。
A)x%=(k%=5) B)x%=(k-k%5)
C)x%=k-k%5 D)(x%=k)-(k%=5)
19、为了计算s=10!(即10的阶乘),则s变量应定义为 。
A)int B)unsigned C)long D)以上三种类型均可
20、以下所列的C语言常量中,错误的是。
A)0xFF B)1.2e0.5 C)2L D)’/72’
21、假定x和y为double型,则表达式x=2,y=x+3/2的值是 。
A)3.500000 B)3 C)2.000000 D)3.000000
22、设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是 。
A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0
C)n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.0
23、以下合法的赋值语句是 。
A)x=y=100 B)d―― C)x+y D)c=int(a+b)
24、下选项中不属于C语言的类型是 。
A)signed short int B)unsigned long int
B)unsigned int D)long short
25、设以下变量均为int类型,则值不等于7的表达式是 。
A)(x=y=6,x+y,x+1) B)(x=y=6,x+y,y+1)
C)(x=6,x+1,y=6,x+y) D)(y=6,y+1,x=y,x+1)
26、在16位C编译系统上,若定义long a;,则能给a赋40000的正确语句是 。
A)a=20000+20000; B)a=4000*10;
C)30000+10000; D)a=4000L*10L;
二.填空题
1.在C语言中(以16位PC机为例),一个char数据在内存中所占字节数为 ,其数值范围为 ;一个int数据在内存中所占字节数为 ,其数值范围为 ;一个long数据在内存中所占字节数为 ,其数值范围为 ;一个float数据在内存中所占字节数为 ,其数值范围为 。
2.C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为 。
3.字符常量使用一对 界定单个字符,而字符串常量使用一对 来界定若干个字符的序列。
4.在C语言中,不同运算符之间运算次序存在 的区别,同一运算符之间运算次序存在 的规则。
5.设x,i,j,k都是int型变量,表达式x=(i=4,j=16,k=32)计算后,x的值为 。
6.设x=2.5,a=7,y=4.7, 则x+a%3*(int)(x+y)%2/4为 。
7.设a=2,b=3,x=3.5,y=2.5,则(float)(a+b)/2+(int)x%(int)y为 。
8.数学式子 的C语言表达式为 。
9.数学式子 的C语言表达式为 。
10.已知:char a=’a’,b=’b’,c=’c’,i;则表达式i=a+b+c的值为 。
11.已知int a=12,n=5;则:表达式运算后a的值各为 。
a+=a
a-=2
a*=2+3
a/=a+a
n%=(n%=2)
a+=a-=a*=a
12.设int a; float f; double i ;则表达式10+’a’+i*f值的数据类型是 。
13.若a为int型变量,则表达式 (a=4*5,a*2) , a+6的值为 。
14.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为 。
15.已知a,b,c是一个十进制数的百位,十位,个位,则该数的表达式是 。
16.定义:double x=3.5,y=3.2;则表达式(int)x*0.5的值是 ,表达式y+=x++的值是 。
17.定义:int m=5, n=3;则表达式m/=n+4的值是 ,表达式m=(m=1,n=2,n-m)的值是 ,表达式m+=m-=(m=1)*(n=2)的值是 。
18.表达式5%(-3)的值是 ,表达式-5%(-3)的值是 。
19.若a是int变量,则执行表达式a=25/3%3后,a的值是 。
20.数学式子 的C语言表达式为: 。
三.判断题
1.在C程序中对用到的所有数据都必须指定其数据类型。【 】
2.一个变量在内存中占据一定的存储单元。【 】
3.一个实型变量的值肯定是精确的。【 】
4.对几个变量在定义时赋初值可以写成:int a=b=c=3;【 】
5.自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或表达式。【 】
6.在C程序的表达式中,为了明确表达式的运算次序,常使用括号“()”。【 】
7.%运算符要求运算数必须是整数。【 】
8.若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数。【 】
9.在C程序中,逗号运算符的优先级最低。【 】
10.C语言不允许混合类型数据间进行运算。【 】
四.简答题
1.为什么C语言的字符型可以进行数值运算?
2.简述‘a’和“a”的区别。
3.程序:int m=12; m=15;为什么整型变量m的值在运算后不是当初的12,而是15?
4.将下面各数用八进制和十六进制数表示:
十进制 32 -1 -32768 2002 -128 0
八进制
十六进制
6.华氏温度F与摄氏温度c的转换公式为:c=(F-32)*5/9 ,则float c, F; c=5/9*(F-32)是其对应的C语言表达式吗?如果不是,为什么?
五.程序阅读题
1.写出以下程序运行的结果。
main ( )
{
char c1=’a’,c2=’b’,c3=’c’,c4=’/101’,c5=’116’;
printf(“a%c b%c/tc%c/tabc/n”,c1,c2,c3);
printf(“/t/b%c %c”,c4,c5);
}
2.写出以下程序运行的结果。
main ( )
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
六.编程题
1.假设m是一个三位数,则写出将m的个位,十位,百位反序而成的三位数(例如:123反序为321)的C语言表达式。
2.已知int x=10,y=12;写出将x和y的值互相交换的表达式。
习题三
一.选择题
1.C语言的程序一行写不下时,可以。
A)用逗号换行 B)用分号换行
C)在任意一空格处换行 D)用回车符换行
2.putchar ( )函数可以向终端输出一个。
A)整型变量表达式值 B)实型变量值
C)字符串 D)字符或字符型变量值
3.执行下列程序片段时输出结果是。
unsigned int a=65535;
printf(“%d”,a);
A)65535 B)-1 C)-32767 D)1
4.执行下列程序片段时输出结果是。
float x=-1023.012
printf(“/n%8.3f,”,x);
printf(“%10.3f”,x);
A)1023.012, -1023.012 B)-1023.012,-1023.012
C)1023.012,-1023.012 D)-1023.012, -1023.012
5.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是 。
int a1,a2; char c1,c2;
scanf(“%d%c%c”,&a1,&a2,&c1,&c2);
A)10A 20B↙ B)10 A 20 B↙
C)10A20B↙ C)10A20 B↙
6.对于下述语句,若将10赋给变量k1和k3,将20赋给变量k2和k4,则应按 方式输入数据。
int k1,k2,k3,k4;
scanf(“%d%d”,&k1,&k2);
scanf(“%d,%d”,&k3,&k4);
A)1020↙ B)10 20↙ C)10,20 ↙
D)10 20↙ 1020↙ 10 20↙ 10,20↙ 10,20↙
7.执行下列程序片段时输出结果是。
int x=13,y=5;
printf(“%d”,x%=(y/=2));
A)3 B)2 C)1 D)0
8.下列程序的输出结果是。
main ( )
{ int x=023;
printf(“%d”,--x);
}
A)17 B)18 C)23 D)24
9.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是。
int a1,a2; char c1,c2;
scanf(“%d%d”,&a1,&a2);
scanf(“%c%c”,&c1,&c2);
A)1020AB↙ B)10 20↙
AB↙
C)10 20 AB↙ D)10 20AB↙
10.执行下列程序片段时输出结果是。
int x=5,y;
y=2+(x+=x++,x+8,++x);
printf(“%d”,y);
A)13 B)14 C)15 D)16
11.若定义x为double型变量,则能正确输入x值的语句是。
A)scanf(“%f”,x); B)scanf(“%f”,&x);
C)scanf(“%lf”,&x); D)scanf(“%5.1f”,&x);
12.若运行时输入:12345678↙,则下列程序运行结果为。
main ( )
{ int a,b;
scanf(“%2d%2d%3d”,&a,&b);
printf(“%d/n”,a+b);
}
A)46 B)579 C)5690 D)出错
13.已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使I的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是。
A)scanf(“%2d%2d%2d”,&i,&j,&k);
B)scanf(“%d_%d_%d”,&i,&j,&k);
C)scanf(“%d,%d,%d”,&i,&j,&k);
D)scanf(“i=%d,j=%d,k=%d”,&i,&j,&k);
14.若int x,y; double z;以下不合法的scanf函数调用语句是 。
A)scanf(“%d%lx,%le”,&x,&y,&z);
B)scanf(“%2d*%d%lf”,&x,&y,&z);
C)scanf(“%x%*d%o”,&x,&y);
D)scanf(“%x%o%6.2f”, &x,&y,&z);
15.有输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量 a的值为1,b的值为3,c的值为2,则正确的数据输入方式是 。
A)132↙ B)1,3,2↙
C)a=1 b=3 c=2↙ D)a=1,b=3,c=2↙
二.填空题
1.一个C程序由若干个 文件组成,而一个这样的文件可以由若干个 和 以及 组成。
2.C语句可以分为 , , , 和 等5种类型。
3.C控制语句有 种。
4.一个表达式要构成一个C语句,必须 。
5.复合语句是用一对 界定的语句块。
6.printf函数和scanf函数的格式说明都使用 字符开始。
7.scanf处理输入数据时,遇到下列情况时该数据认为结束:(1) ,
(2) ,(3) 。
8.已有int i,j; float x;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是 。
9.C语言本身不提供输入输出语句,其输入输出操作是由 来实现的。
10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令: 。
三.程序阅读题
1.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’,问在键盘上如何输入?
main ( )
{ int a,b;
float x,y;
char c1,c2;
scanf(“a=%d b=%d”,&a,&b);
scanf(“ %f %e”,&x,&y);
scanf(“ %c %c”,&c1,&c2);
}
2.写出以下程序的输出结果。
main ( )
{ int y=3,x=3,z=1;
printf(“%d %d/n”,(++x,y++),z+2);
}
3.写出以下程序的输出结果。
main ( )
{ int a=12345;
float b=-198.345, c=6.5;
printf(“a=%4d,b=%-10.2e,c=%6.2f/n”,a,b,c);
}
4.写出以下程序的输出结果。
main ( )
{ int x=-2345;
float y=-12.3;
printf(“%6D,%06.2F”,x,y);
}
5. 写出以下程序的输出结果。
main ( )
{ int a=252;
printf(“a=%o a=%#o/n”,a,a);
printf(“a=%x a=%#x/n”,a,a);
}
6. 写出以下程序的输出结果。
main ( )
{ int x=12; double a=3.1415926;
printf(“%6d##,%-6d##/n”,x,x);
printf(“%14.101f##/n”,a);
}
四.程序填空题
1.下列程序的输出结果是16.00,请填(1)空使程序完整。
main ( )
{ int a=9,b=2;
float x=[ 1 ] , y=1.1 , z;
z=a/2+b*x/y+1/2;
printf(“%5.2f/n”,z);
}
五.编程题
1.已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序来。
2.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
a= 3 b= 4 c= 5
x=1.200000,y=2.400000,z=-3.600000
x+y= 3.60 y+z=-1.20 z+x=-2.40
u= 51274 n= 128765
c1=’a’ or 97(ASCII)
c2=’b’ or 98(ASCII)
3.设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。用scanf输入数据,输出计算结果;输出时要求有文字说明,取小数点后2位数字,请编写程序。
4.编程序:用getchar函数读入两个字符给c1,c2,然后分别用putchar和printf函数输出这两个字符。并思考以下问题:(1)变量c1,c2应定义为字符型或整型?或两者皆可?(2)要求输出C1和C2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3)整型变量与字符型变量是否在任何情况下都可以互相替代?如:
char c1,c2 与 int c1,c2
是否无条件地等价?
习题四
一.选择题
1.逻辑运算符两侧运算对象的数据类型。
A)只能是0或1 B)只能是0或非0正数
C)只能是整型或字符型数据 D)可以是任何类型的数据
2.下列表达式中, 不满足“当x的值为偶数时值为真,为奇数时值为假”的要求。
A)x%2==0 B)!x%2!=0 C)(x/2*2-x)==0 D)!(x%2)
3.以下程序片段。
int x=2,y=3;
printf( );
A)什么都不输出 B)输出为:***x=2
C)输出为:###y=2 D)输出为:###y=3
4.能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是。
A)(x>=1) && (x<=10) && (x>=200) && (x<=210)
B)(x>=1) | | (x<=10) | | (x>=200) | | (x<=210)
C)(x>=1) && (x<=10) | | (x>=200) && (x<=210)
D)(x>=1) | | (x<=10) && (x>=200) | | (x<=210)
5.C语言对嵌套if语句的规定是:else总是与 。
A)其之前最近的if配对 B)第一个if配对
C)缩进位置相同的if配对 D)其之前最近的且尚未配对的if配对
6.设:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b) && (n=c>d)后n的值为 。
A)1 B)2 C)3 D)4
7.下面 是错误的if语句(设int x,a,b;)
A)if (a=b) x++; B)if (a=
C)if (a-b) x++; D)if ( x ) x++;
8.以下程序片段 。
main ( )
{ int x=0,y=0,z=0;
if (x=y+z)
printf(“***”);
else
printf(“###”);
}
A)有语法错误,不能通过编译 B)输出:***
C)可以编译,但不能通过连接,所以不能运行 D)输出:###
9.对下述程序, 是正确的判断。
main ( )
{ int x,y;
scanf(“%d,%d”,&x,&y);
if (x>y)
x=y;y=x;
else
x++;y++;
printf(“%d,%d”,x,y);
}
A)有语法错误,不能通过编译 B)若输入3和4,则输出4和5
C)若输入4和3,则输出3和4 D)若输入4和3,则输出4和5
10.若w=1,x=2,y=3,z=4,则条件表达式w A)4 B)3 C)2 D)1 11.下述表达式中, 可以正确表示x≤0或x≥1的关系。 A)(x>=1) | | (x<=0) B)x>=1 | x<=0 C)x>=1 && x<=0 D)(x>=1) && (x<=0) 12.下述程序的输出结果是。 main ( ) { int a=0,b=0,c=0; if (++a>0 | | ++b>0) ++c; printf(“%d,%d,%d”,a,b,c); } A)0,0,0 B)1,1,1 C)1,0,1 D)0,1,1 13.下述程序的输出结果是 。 main ( ) { int x=-1,y=4,k; k=x++<=0 && !(y--<=0); printf(“%d,%d,%d”,k,x,y); } A)0,0,3 B)0,1,2 C)1,0,3 D)1,1,2 14.以下程序输出结果是 。 main ( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1:switch (y) { case 0 : a++ ; break ; case 1 : b++ ; break ; } case 2:a++; b++; break; case 3:a++; b++; } printf(“a=%d,b=%d”,a,b); } A)a=1,b=0 B)a=2,b=1 C)a=1,b=1 D)a=2,b=2 15.下述程序的输出结果是 。 main ( ) { int a,b,c; int x=5,y=10; a=(--y=x++) ? –y : ++x ; b=y++ ; c=x ; printf(“%d,%d,%d”,a,b,c); } A)6,9,7 B)6,9,6 C)7,9,6 D )7,9,7 16.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是 。 if (a
if (c else if (a if (b else x=3; else x=6; else x=7; A)1 B)2 C)3 D)4 17.在下面的条件语句中(其中S1和S2表示C语言语句),只有 一个在功能上与其他三个语句不等价。 A)if (a) S1; else S2; B)if (a==0) S2; else S1; C)if (a!=0) S1; else S2; D)if (a==0) S1; else S2; 18.若int i=0;执行下列程序后,变量i的正确结果是 。 switch (i) { case 9: i+=1 ; case 10: i+=1 ; case 11: i+=1 ; default : i+=1 ; } A)10 B)11 C)12 D)13 19.若有说明语句int i=5,j=4,k=6;float f;则执行f=(i A)4.0 B)5.0 C)6.0 D)7.0 20.若有定义:int a=3,b=2,c=1;并有表达式:①a%b,②a>b>c,③b&&c+1,④c+=1,则表达式值相等的是 。 A)①和② B)②和③ C)①和③ D)③和④ 二.填空题 1.C语言提供6种关系运算符,按优先级高低它们分别是 , , , , , 等。 2.C语言提供三种逻辑运算符,按优先级高低它们分别是 , , 。 3.设a=3,b=4,c=5,写出下面各逻辑表达式的值。 表达式 表达式运算后的值 a+b>c && b==c !(a>b) && !c || 1 !(a+b) + c –1 && b + c/2 4.写出数学式子 的C语言表达式 。 5.将条件“y能被4整除但不能被100整除,或y能被400整除”写成逻辑表达式 。 6.设x,y,z均为int型变量;写出描述“x,y和z中有两个为负数”的C语言表达式: 。 7.已知A=7.5,B=2,C=3.6,表达式A>B && C>A || AB的值是 。 8.有int x=3,y=-4,z=5;则表达式(x&&y)==(x||z)的值为 。 9.若有x=1,y=2,z=3,则表达式(x 10.执行以下程序段后,a= ,b= ,c= 。 int x=10,y=9 ; int a,b,c ; a = (x--=y++) ? x-- : y++ ; b = x++ ; c = y ; 三.判断题 1.if语句中的表达式不限于逻辑表达式,可以是任意的数值类型。【 】 2.switch语句可以用if语句完全代替。【 】 3.switch语句的case表达式必须是常量表达式。【 】 4.if语句,switch语句可以嵌套,而且嵌套的层数没有限制。【 】 5.条件表达式可以取代if语句,或者用if语句取代条件表达式。【 】 6.switch语句的各个case和default的出现次序不影响执行结果。【 】 7.多个case可以执行相同的程序段。【 】 8.内层break语句可以终止嵌套的switch,使最外层的switch结束。【 】 9.switch语句的case分支可以使用{ }复合语句,多个语句序列。【 】 10.switch语句的表达式与case表达式的类型必须一致。【 】 四.简答题 1.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 2.请将以下语句改成switch语句。 if ((s>0) && (s<=10)) if ((s>=3) && (s<=6)) x=2; else if ((s>1) && (s>8)) x=3; else x=1; else x=0; 五.程序阅读题 1.若运行时输入100↙,写出以下程序的运行结果。 main ( ) { int a ; scanf(“%d”,&a); printf(“%s”,(a%2!=0)?”No”:”Yes”); } 2.写出以下程序的运行结果。 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 1: pritnf(“*”) ; break ; case 2: printf(“#”) ; break ; default : printf(“#”) ; break ; } default : printf(“&”); } printf(“/n”); } 六.程序判断题 1.下面程序将输入的大写字母改写成小写字母输出,其他字符不变;请判断下面程序的正误,如果错误请改正过来。 main ( ) { char c; c = getchar ( ) ; c = (c>=’A’ | | c<=’Z’) ? c-32 : c+32 ; printf(“%c”,c); } 2.下面程序输入两个运算数x,y和一个运算符号op,然后输出该运算结果的值,例如输入3+5↙得到结果8;请判断下面程序的正误,如果错误请改正过来。 main ( ) { float x,y,r; char op ; scanf(“%f%c%f”,&x,&op,&y); switch (op) { case ‘+’ : r=x+y ; case ‘-’ : r=x+y ; case ‘*’ : r=x+y ; case ‘/’ : r=x+y ; } printf(“%f”,r); } 七.程序填空题 1.根据以下函数关系,对输入的每个x值,计算出相应的y值,请填(3)空使程序完整。 main ( ) { int x,c,m; float y; scanf(“%d”,&x); if (【1 】) c=-1; else c=【2 】 ; switch (c) { case –1 : y=0 ; break ; case 0 : y=x ; break ; case 1 : y=10 ; break ; case 2 : case 3 : y=-0.5*x+20 ; break ; default : y=-2 ; } if (【3 】) printf (“y=%f”,y); else printf(“error!”); } 2.以下程序输出x,y,z三个数中的最小值,请填(2)空使程序完整。 main ( ) { int x=4,y=5,z=8 ; int u,v; u = x v = u printf (“%d”,v); } 八.编程题 1.有三个整数a,b,c,由键盘输入,输出其中最大的数。 2.编程输入整数a和b,若 大于100,则输出 百位以上的数字,否则输出两数之和。 4.给出一百分制成绩,要求输出成绩等级’A’,’B’,’C’,’D’,’E’。90分以上为’A’,80-89分为’B’,70-79分为’C’,60-69分为’D’,60分以下为’E’。 5.提高题:给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数是321,应输出123。 习题五 一.选择题 1.下面程序段 int k=2; while (k=0) {printf(“%d”,k);k--;} 则下面描述中正确的是 。 A)while循环执行10次 B)循环是无限循环 C)循环题语句一次也不执行 D)循环体语句执行一次 2.下述程序段中, 与其他程序段的作用不同。 A) k=1; B) k=1; while (1) { Repeat : s+=k ; s+=k ; k=k+1 ; if (++k<=100) if (k>100) break ; goto Repeat } printf(“/n%d”,s) ; printf(“/n%d”,s) ; C)int k,s=0; D) k=1; for (k=1;k<=100;s+=++k); do printf(“/n%d”,s) ; s+=k; while (++k<=100) ; printf(“/n%d”,s) ; 3.以下程序段的循环次数是 。 for (i=2; i==0; ) printf(“%d” , i--) ; A)无限次 B)0次 C)1次 D)2次 4.下面程序的输出结果是 。 main ( ) { char c=’A’; int k=0; do { switch (c++) { case ‘A’ : k++ ; break ; case ‘B’ : k-- ; case ‘C’ : k+=2 ; break ; case ‘D’ : k%=2 ; continue ; case ‘E’ : k*=10 ; break ; default : k/=3 ; } k++; } while (c<’G’) ; printf (“k=%d”,k) ; } A)k=3 B)k=4 C)k=2 D)k=0 5.下面程序的输出结果是 。 main ( ) { int x=9; for (; x>0; x--) { if (x%3==0) { printf(“%d”,--x); continue ; } } } A)741 B)852 C)963 D)875421 6.以下不是死循环的程序段是 。 A) int i=100; B)for ( ; ; ) ; while (1) { i=i%100+1 ; if (i>100) break ; } C) int k=0; D)int s=36; do { ++k; } while (k>=0); while (s) ; --s ; 7.下述程序段的运行结果是 。 int a=1,b=2, c=3, t; while (a
printf(“%d,%d,%d”,a,b,c); A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 8.下面程序的功能是从键盘输入一组字符,从中统计大写字母和小写字母的个数,选择 填空。 main ( ) { int m=0,n=0; char c; while ((【 】) ! ’/n’) { if (c>=’A’ && c<=’Z’) m++; if (c>=’a’ && c<=’z’) n++; } } A)c=getchar( ) B)getchar( ) C)c==getchar( ) D)scanf(“%c”,&c) 9.下述语句执行后,变量k的值是 。 int k=1; while (k++<10); A)10 B)11 C)9 D)无限循环,值不定 10.下面程序的输出结果是 。 main ( ) { int k=0,m=0,i,j; for (i=0; i<2; i++) { for (j=0; j<3; j++) k++ ; k-=j ; } m = i+j ; printf(“k=%d,m=%d”,k,m) ; } A)k=0,m=3 B)k=0,m=5 C)k=1,m=3 D)k=1,m=5 11.下面for循环语句 。 int i,k; for (i=0, k=-1; k=1; i++, k++) printf(“***”); A)判断循环结束的条件非法 B)是无限循环 C)只循环一次 D)一次也不循环 12.语句while (!E); 括号中的表达式!E等价于 。 A)E==0 B)E!=1 C)E!=0 D)E==1 13.以下是死循环的程序段是 。 A) for (i=1; ; ) { if (i++%2==0) continue ; if (i++%3==0) break ; } B) i=32767; do { if (i<0) break ; } while (++i) ; C) for (i=1 ; ;) if (++I<10) continue ; D) i=1 ; while (i--); 14.执行语句for (i=1;i++<4;) ; 后变量i的值是 。 A)3 B)4 C)5 D)不定 15.以下程序段 。 x=-1; do { x=x*x; } while (!x); A)是死循环 B)循环执行2次 C)循环执行1次 D)有语法错误 16.下面程序的功能是在输入的一批正数中求最大者,输入0结束循环,选择 填空。 main ( ) { int a,max=0; scanf(“%d”,&a); while (【 】) { if (max
scanf (“%d”,&a); } printf(“%d”,max); } A)a==0 B)a C)!a==1 D)!a 17.以下不是死循环的语句是 。 A)for (y=9,x=1;x>++y;x=i++) i=x ; B)for ( ; ; x++=i ) ; C)while (1) { x++ ; } D)for (i=10 ; ; i--) sum+=i ; 18.下面程序段的运行结果是 。 x=y=0; while (x<15) y++,x+=++y ; printf(“%d,%d”,y,x); A)20,7 B)6,12 C)20,8 D)8,20 19.以下for循环的执行次数是 。 for (x=0,y=0; (y=123) && (x<4) ; x++) ; A)无限循环 B)循环次数不定 C)4次 D)3次 20.若运行以下程序时,输入2473↙,则程序的运行结果是 。 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”); } A)668977 B)668966 C)66778777 D)6688766 二.填空题 1.C语言三个循环语句分别是 语句, 语句和 语句。 2.至少执行一次循环体的循环语句是 。 3.循环功能最强的循环语句是 。 5.程序段 for (a=1,i=-1; -1
{ a++ ; printf(“%2d”,a); } ; printf(“%2d”,i) ; 的运行结果是 。 三.判断题 1.在while循环中允许使用嵌套循环,但只能是嵌套while循环。【 】 2.在实际编程中,do-while循环完全可以用for循环替换。【 】 3.continue语句只能用于三个循环语句中。【 】 4.在不得已的情况下(例如提高程序运行效率),才使用goto语句。【 】 5.语句标号与C语言标识符的语法规定是完全一样的。【 】 6.for循环的三个表达式可以任意省略,while,do-while也是如此。【 】 7.do-while允许从外部转到循环体内。【 】 8.while的循环控制条件比do-while的循环控制条件严格。【 】 9.do-while循环中,根据情况可以省略while。【 】 10.do-while循环的while后的分号可以省略。【 】 四.程序阅读题 1.写出下面程序运行的结果。 main ( ) { int x,i ; for (i=1 ; i<=100 ; i++) { x=i; if (++x%2==0) if (++x%3==0) if(++x%7==0) printf(“%d ”,x) ; } } 2.写出下面程序运行的结果。 main ( ) { int i,b,k=0 ; for (i=1; i<=5 ; i++) { b=i%2; while (b--=0) k++ ; } printf(“%d,%d”,k,b); } 3.写出下面程序运行的结果。 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(“%d/n”,a); } 4.写出下面程序运行的结果。 main ( ) { int k=1,n=263 ; do { k*= n%10 ; n/=10 ; } while (n) ; printf(“%d/n”,k); } 5.写出下面程序运行的结果。 main ( ) { int i=5 ; do { switch (i%2) { case 4 : i-- ; break ; case 6 : i-- ; continue ; } i-- ; i-- ; printf(“%d”,i); }while (i>0) ; } 6.写出下面程序运行的结果。 main ( ) { int i,j; for (i=0;i<3;i++,i++) { for (j=4 ; j>=0; j--) { if ((j+i)%2) { j-- ; printf(“%d,”,j); continue ; } --i ; j-- ; printf(“%d,”,j) ; } } } 7.写出下面程序运行的结果。 main ( ) { int a=10,y=0 ; do { a+=2 ; y+=a ; if (y>50) break ; } while (a=14) ; printf(“a=%d y=%d/n”,a,y) ; } 8.写出下面程序运行的结果。 main ( ) { int i,j,k=19; while (i=k-1) { k-=3 ; if (k%5==0) { i++ ; continue ; } else if (k<5) break ; i++; } printf(“i=%d,k=%d/n”,i,k); } 9.写出下面程序运行的结果。 main ( ) { int y=2,a=1; while (y--!=-1) do { a*=y ; a++ ; } while (y--) ; printf(“%d,%d/n”,a,y); } 10.写出下面程序运行的结果。 main ( ) { int i,k=0; for (i=1; ; i++) { k++ ; while (k
k++ ; if (k%3==0) goto loop ; } } loop: printf(“%d,%d/n”,i,k); } 六.程序填空题 1.下述程序用“碾转相除法”计算两个整数m和n的最大公约数。该方法的基本思想是计算m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,等等,请填(3)空使程序完整。 main ( ) { int m,n,w; scanf(“%d,%d”,&m,&n); while (n) { w=【1 】; m=【2 】; n=【3 】; } printf(“%d”,m); } 2.下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。 main ( ) { int n,k=1,s=0,m ; for (n=1 ; n<=100 ; n++) { k=1 ; s=0 ; 【1 】; while (【2 】) { k*=m%10; s+=m%10; 【3 】; } if (k>s) printf(“%dd”,n); } } 3.下面程序段的功能是计算1000!的末尾有多少个零,请填(1)空使程序完整。 main ( ) { int i,k; for (k=0,i=5; i<=1000; i+=5) { m = i ; while (【1 】) { k++; m=m/5 ; } } } 4.下面程序接受键盘上的输入,直到按↙键为止,这些字符被原样输出,但若有连续的一个以上的空格时只输出一个空格,请填(3)空使程序完整。 main ( ) { char cx , front=’/0’ ; while (【1 】!=’/n’) { if (cx!=’ ’) putchar(cx) ; if (cx==’ ’) if (【2 】) putchar(【3 】) front=cx ; } 5.下面程序按公式 求和并输出结果,请填(3)空使程序完整。 main ( ) { 【1 】; int k ; for (k=1 ; k<=100 ; k++) s+=k ; for (k=1 ; k<=50 ; k++) s+=k*k ; for (k=1 ; k<=10 ; k++) s+=【2 】; printf(“sum=【3 】”,s); } 七.编程题 1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 2. 输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。 3. 求 (即求1!+2!+3!+…+19!+20!)。 4.有一个分数数列: 求出这个数列前20项之和。 5.提高题:打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方之和等于该数本身。 习题六 一.选择题 1.在C语言中,引用数组元素时,其数组下标的数据类型允许是 。 A)整型常量 B)整型表达式 C)整形常量或整形表达式 C)任何类型的表达式 2.以下对一维整型数组a的正确说明是 。 A)int a(10) ; B)int n=10,a[n]; C)int n; D)#define SIZE 10 scanf(“%d”,&n); int a[SIZE]; int a[n]; 3.若有定义:int a[10],则对数组a元素的正确引用是 。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 4.以下能对一维数组a进行正确初始化的语句是 。 A)int a[10]={0,0,0,0,0}; B)int a[10]={} ; C)int a[ ] = {0} ; D)int a[10]={10*1} ; 5.若有定义:int a[3][4],则对数组a元素的正确引用是 。 A)a[2][4] B)a[1,3] C)a(5) D)a[10-10] 6.以下能对二维数组a进行正确初始化的语句是 。 A)int a[2][]={{1,0,1},{5,2,3}} ; B)int a[][3]={{1,2,3},{4,5,6}} ; C)int a[2][4]={{1,2,3},{4,5},{6}} ; D)int a[][3]={{1,0,1},{},{1,1}} ; 7.以下不能对二维数组a进行正确初始化的语句是 。 A)int a[2][3]={0} ; B)int a[][3]={{1,2},{0}} ; C)int a[2][3]={{1,2},{3,4},{5,6}} ; D)int a[][3]={1,2,3,4,5,6} ; 8.若有说明:int a[3][4]={0};则下面正确的叙述是 。 A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 9.若有说明:int a[][4]={0,0};则下面不正确的叙述是 。 A)数组a的每个元素都可得到初值0 B)二维数组a的第一维大小为1 C)因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1 D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0 10.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为 。(设a[0][0]位于数组的第一个位置上) A)i*m+j B)j*m+i C)i*m+j-1 D)i*m+j+1 11.若有说明:int a[][3]={1,2,3,4,5,6,7};则数组a第一维大小是 。 A)2 B)3 C)4 D)无确定值 12.以下不正确的定义语句是 。 A)double x[5]={2.0,4.0,6.0,8.0,10.0}; B)int y[5]={0,1,3,5,7,9} ; C)char c1[ ]={‘1’,’2’,’3’,’4’,’5’} ; D)char c2[ ]={‘/x10’,’/xa’,’/x8’} ; 13.下面程序段的输出结果是 。 int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k<3;k++) printf(“%d”,a[k][2-k]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7 14.下面是对s的初始化,其中不正确的是 。 A)char s[5]={“abc”}; B)char s[5]={‘a’,’b’,’c’}; C)char s[5]=” ”; D)char s[5]=”abcdef”; 15.下面程序段的输出结果是 。 char c[5]={‘a’,’b’,’/0’,’c’,’/0’} printf(“%s”,c); A)’a’’b’ B)ab C)ab c D)abc 16.若有程序段: int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k<3;k++) printf(“%d”,a[k][2-k]); 则以下叙述正确的是 。 A)a与b数组完全相同 B)a与b长度相同 C)a和b中都存放字符串 D)a数组比b数组长度长 17.有两个字符数组a,b,则以下正确的输入语句是 。 A)gets(a,b); B)scanf(“%s%s”,a,b); C)scanf(“%s%s”,&a,&b); D)gets(“a”),gets(“b”); 18.下面程序段的输出结果是 。 char a[7]=”abcdef”; char b[4]=”ABC”; strcpy(a,b); printf(“%c”,a[5]); A) B)/0 C)e D)f 19.下面程序段的输出结果是 。 char c[ ]=”/t/v///0will/n”; printf(“%d”,strlen(c)); A)14 B)3 C) 9 D)6 20.判断字符串a和b是否相等,应当使用 。 A)if (a==b) B)if (a=b) C)if (strcpy(a,b)) D) if (strcmp(a,b)) 21.判断字符串a是否大于b,应当使用 。 A)if (a>b) B)if (strcmp(a,b)) C)if (strcmp(b,a)>0) D)if (strcmp(a,b)>0) 22.下面叙述正确的是 。 A)两个字符串所包含的字符个数相同时,才能比较字符串 B)字符个数多的字符串比字符个数少的字符串大 C)字符串”STOP ”与”STOP”相等 D)字符串”That”小于字符串”The” 23.下面有关字符数组的描述中错误的是 。 A)字符数组可以存放字符串 B)字符串可以整体输入,输出 C)可以在赋值语句中通过赋值运算对字符数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进行比较 24.下面程序的输出结果是 。 main ( ) { char ch[7]=”12ab56”; int i,s=0; for (i=0;ch[i]>’0’&&ch[i]<=’9’;i+=2) s=10*s+ch[i]-‘0’; printf(“%d/n”,s); } A)1 B)1256 C)12ab56 D)ab 25.下面程序的输出结果是 。 main ( ) { char str[ ]=”SSWLIA” , C; int k; for (k=2;(c=str[k])!=’/0’;k++) { switch (c) { case ‘I’ : ++k; break ; case ‘L’: continue; default : putchar(c) ; continue ; } putchar(‘*’); } } A)SSW B)SW* C)SW*A D)SW 二.填空题 1.在C语言中,二维数组的元素在内存中的存放顺序是 。 2.若有定义:double x[3][5],则x数组中行下标的下限为 ,列下标的下限为 。 3.若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]的值为 ,a[2][1]得到的值为 。 4.字符串”ab/n//012//”的长度是 。 5.下面程序段的运行结果是 。 char x[ ]=”the teacher”; int i=0; while (x[++i]!=’/0’) if (x[i-1]==’t’) printf(“%c”,x[i]); 6.欲为字符串S1输入”Hello World!”,其语句是 。 7.欲将字符串S1复制到字符串S2中,其语句是 。 8.如果在程序中调用了strcat函数,则需要预处理命令 。如果调用了gets函数,则需要预处理命令 。 9.C语言数组的下标总是从 开始,不可以为负数;构成数组各个元素具有相同的 。 10.字符串是以 为结束标志的一维字符数组。有定义:char a[]=””;则a数组的长度是 。 三.程序阅读题 1.写出下面程序的运行结果。 main ( ) { int a[6][6],i,j ; for (i=1; i<6 ; i++) for (j=1 ; j<6 ; j++) a[i][j]=(i/j)*(j/i) ; for (i=1;i<6 ; i++) { for (j=1 ; j<6 ; j++) printf(“%2d”,a[i][j]) ; printf(“/n”); } } 2.写出下面程序的运行结果。 main ( ) { int i=0; char a[ ]=”abm”, b[ ]=”aqid”, c[10]; while (a[i]!=’/0’ && b[i]!=’/0’) { if (a[i]>=b[i]) c[i]=a[i]-32 ; else c[i]=b[i]-32 ; i++; } c[i]=’/0’; puts(c); } 3.当运行下面程序时,从键盘上输入AabD↙,则写出下面程序的运行结果。 main ( ) { char s[80]; int i=0; gets(s); while (s[i]!=’/0’) { if (s[i]<=’z’ && s[i]>=’a’) s[i]=’z’+’a’-s[i] ; i++; } puts(s); } 4.写出下面程序的运行结果。 main ( ) { int i,c; char s[2][5]={“8980”,”9198”}; for (i=3; i>=0 ; i--) { c=s[0][i]+s[1][i]-2*’0’; s[0][j] = c % 10 + ‘/0’ ; } for (i=0; i<=1; i++) puts(s[i]); } 5.当运行下面程序时,从键盘上输入7 4 8 9 1 5↙,则写出下面程序的运行结果。 main ( ) { int a[6],i,j,k,m; for (i=0 ; i<6 ; i++) scanf (“%d”,&a[i]); for (i=5 ; i>=0; i--) { k=a[5]; for (j=4; j>=0; j--) a[j+1]=a[j] ; a[0]=k; for (m=0 ; m<6 ; m++) printf(“%d ”,a[m]); printf(“/n”); } } 四.程序判断题 1.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。 main ( ) { int a[3]={3*0} ; int i; for (i=0; i<4; i++) scanf(“%d”,&a[i]); for (i=0; i<4; i++) printf(“%d”,a[i]); } 2.下面程序为数组输入数据并输出结果;判断下面程序的正误,如果错误请改正过来。 main ( ) { int a[3]={1,2,3} , i; scanf(“%d%d%d”,&a); for (i=0; i<3; i++) printf(“%d”,a[i]); } 3.下面程序的功能是:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如,当s中的字符串为:“ABCDE”时则t中的字符串应为:“EDCBAABCDE”;判断下面程序的正误,如果错误请改正过来。 main ( ) { char s[80],t[200]; int i,sl ; gets(s); sl = strlen(s); for (i=0; i for (i=0; i puts(t); } 4.下面程序的功能是:将n各无序整数从小到大排序;判断下面程序的正误,如果错误请改正过来。 main ( ) { int a[100], i, j, p, t, n=20 ; for (j = 0; j for (j = 0;j { p = j; for ( i=j+1; i if (a[p]>a[i]) t=i; if (p!=j) { t = a[j]; a[j] = a[p]; a[p]=t; } } for ( j = 0; j } 5.下面程序的功能是:统计子字符串substr在字符串str中出现的次数。例如,若字符串为aaas lkaaas,子字符串为as,则应输出2;判断下面程序的正误,如果错误请改正过来。 main ( ) { char substr[80],str[80]; int i,j,k,num=0; gets(substr); gets(str); for (i = 0, str[i], i++) for (j=i,k=0;substr[k]==str[j];k++,j++) if (substr[k+1]!=’/0’) { num++; break; } printf(“num=%d”, num); } 五.程序填空题 1.下面程序可求出矩阵a的主对角线上的元素之和,请填(2)空使程序完整。 main ( ) { int a[3][3]={1,3,5,7,9,11,13,15,17} , sum=0, i, j ; for (i=0 ; i<3 ; i++) for (j=0 ; j<3 ; j++) if (【1 】) sum=sum+【2 】; printf(“sum=%d”,sum); } 2.下面程序将十进制整数base转换成n进制,请填(3)空使程序完整。 main ( ) { int i,base,n,j,num[20] ; scanf(“%d”,&n); scanf(“%d”,base) ; do { i++; num[i]=【1 】; n=【2 】; } while (n!=0); for (【3 】) ; printf(“%d”,num[j]) ; } 3.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填(3)空使程序完整。 main ( ) { int a[10],max,min,i,j,k ; for (i=0; i<10; i++) scanf(“%d”,&a[i]); max=min=a[0]; for (i=0; i<10; i++) {