C语言习题及参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言习题及参考答案
C语言习题集
习题一
一.填空题
1.C程序是由(函数)构成的,一个C程序中至少包含(main 函数)。
因此,( 函数) 是C程序的基本单位。
2.C程序注释是由( /*) 和( */ ) 所界定的文字信息组成的。
3.函数体一般包括( 变量声明) 和( 语句) 。
二.判断题
1.一个C程序的执行总是从该程序的main函数开始,在main 函数最后结束。
【错】
2.main函数必须写在一个C程序的最前面。
【错】
3.一个C程序可以包含若干的函数。
【对】
4.C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。
但是可以增加程序的可读性。
【对】5.C程序的注释只能是一行。
【错】
6.C程序的注释不能是中文文字信息。
【错】
8.可以使用Visual C++ 6.来编译和连接一个C程序。
【对】
9.可以使用Visual C++ 6.来运行一个C程序。
【对】
10.可以使用Visual C++ 6.来实时调试(即动态调试)一个C程序。
【对】三.简答题
1.写出一个C程序的基本结构。
2.简要叙述使用Visual C++ 6.0编译和运行一个程序的步骤。
四.编程题
1.提高题:参照课本例1.1,试编写一个C程序,输出如下信息。
(提示:使用键盘上的一些符号)。
2.提高题:试编写一个C程序,输出如下信息。
**********************
*** @ @ ***
*** @ ***
**********************
试试看,可以输出其他组合图案吗?
习题二
一.选择题
1、合法的字符常量是(ACD)。
A)…\t?B) “A” C)…a?D)?\x32?
2、合法的字符常量是( D) 。
A)…\084?B) …\84? C)…ab?D)?\x43?
3、(B)是C语言提供的合法的数据类型关键字。
A)Float B)signed C)integer D)Char
4、在以下各组标识符中,合法的标识符是((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语言长整型常量的是(BD)。
A)5876273 B)0L C)2E10 D)(long)5876273
6、下面选项中,不是合法整型常量的是(B )。
A)160 B)-0xcdg C)-01 D)-0x48a
7、判断int x = 0xaffbc;x的结果是(D)。
A)赋值非法B)溢出C)为affb D)为affbc
8、下面选项中,均是合法浮点数的是(B)。
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语言中,要求参加运算的数必须时整数的运算符是(C)。
A)/ B)* C)% D) =
10、在C语言中,字符型数据在内存中以(D)形式存放。
A)原码B)BCD码C)反码D)ASCII码
11、下列语句中,符合语法的赋值语句是(C)。
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语言转义字符(B )。
A)…\b?B)…\0xf? C)…\037? D)… \??
13、对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中,( B )是正确的。
A)语法错误B)f为5.0 C)f为0.0 D)f为2.0
14、与代数式(x*y)/(u*v) 不等价的C语言表达式是(A )。
A)x*y/u*v B)x*y/u/v C)x*y/(u*v) D)x/(u*v)*y
15、在C语言中,数字029是一个(D)。
A)八进制数B)十六进制数C)十进制数D)非法数
16、C语言中整数-8在内存中的存储形式为(A)。
A)1111111111111000 B)100000000001000
C)000000000001000 D)1111111111110111
17、对于char cx=? \039?;语句,正确的是(A )。
注:在VC++环境是正确的。
这里强调的是ANSI C。
A)不合法B)cx的ASCII值是33
C)cx的值为四个字符D)cx的值为三个字符
18、若int k=7,x=12;则能使值为3的表达式是(D)。
A)x%=(k%=5) B)x%=(k-k%5)
C)x%=k-k%5 D)(x%=k)-(k%=5)
19、为了计算s=10!(即10的阶乘),则s变量应定义为(C)。
A)int B)unsigned C)long D)以上三种类型均可
20、以下所列的C语言常量中,错误的是(B)。
A)0xFF B)1.2e0.5 C)2L D)?\72?
21、假定x和y为double型,则表达式x=2,y=x+3/2的值是(D)。
A)3.500000 B)3 C)2.000000 D)3.000000
22、设变量n为float型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是(D)。
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)。
A)x=y=100;B)d―― ;C)x+y ;D)c=int(a+b);
24、下选项中不属于C语言的类型是(D)。
A)signed short int B)unsigned long int
B)unsigned int D)long short
25、设以下变量均为int类型,则值不等于7的表达式是(C)。
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的正确语句是(D )。
A)a=20000+20000;B)a=4000*10;
C)30000+10000;D)a=4000L*10L;
二.填空题
1.在C语言中(以16位PC机为例),一个char数据在内存中所占字节数为1,其数值范围为-128~127 ;一个int数据在内存中所占字节数为2,其数值范围为-32768~32767 ;一个long数据在内存中所占字节数为4,其数值范围为-2147483648~2147483647;一个float
数据在内存中所占字节数为 4 ,其数值范围为 1038 。
2.C 语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符必须为字母。
3.字符常量使用一对单引号界定单个字符,而字符串常量使用一对双引号来界定若干个字符的序列。
4.在C 语言中,不同运算符之间运算次序存在优先级的区别,同一运算符之间运算次序存在结合性的规则。
5.设x,i,j,k 都是int 型变量,表达式x=(i=4,j=16,k=32)计算后,x 的值为 32 。
6.设x=2.5,a=7,y=4.7, 则x+a%3*(int)(x+y)%2/4为 2 。
7.设a=2,b=3,x=3.5,y=2.5,则(float)(a+b)/2+(int)x%(int)y 为
3.5 。
8.数学式子的C 语言表达式为 (a*a+b) /(a+5*b) 。
9.已知:char a=?a?,b=?b?,c=?c?,i;则表达式i=a+b+c 的值为38 。
10.已知int a=12,n=5;则:表达式运算后a 的值各为。
a+=a 24 a-=2 10 a*=2+3 60 a/=a+a 0 n%=(n%=2) 0 a+=a-=a*=a 0
12.设int a; float f; double i ;则表达式10+?a?+i*f 值的数据类型是 double 。
13.若a 为int 型变量,则表达式 (a=4*5,a*2) , a+6的值为 26 。
14.假设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为10 。
15.已知a,b,c 是一个十进制数的百位,十位,个位,则该数的表达式是 100*a+10*b+c 。
16.定义:double x=3.5,y=3.2;则表达式(int)x*0.5的值是1.500000 ,表达式y+=x++的值是 6.700000 。
17.定义:int m=5, n=3;则表达式m/=n+4的值是5 ,表达式m=(m=1,n=2,n-m)的值是 1 ,表达式m+=m-=(m=1)*(n=2)的值是-2 。
18.表达式5%(-3)的值是 2 ,表达式-5%(-3)的值是 -2 。
19.若a 是int 变量,则执行表达式a=25/3%3后,a 的值是 1 。
20.数学式子的C 语言表达式为: 3*a*b/(a+b*b) 。
三.判断题
1.在C 程序中对用到的所有数据都必须指定其数据类型。
【对】
a 2+b
a+5b 3ab
a+b 2
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”的区别。
.程序: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);
}
运行结果:
aa bb cc abc
A 6
2.写出以下程序运行的结果。
main ( )
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
运行结果:
9,11,9,10
六.编程题
1.假设m是一个三位数,则写出将m的个位,十位,百位反序而成的三位数(例如:123反序为321)的C语言表达式。
2.已知int x=10,y=12;写出将x和y的值互相交换的表达式。
习题三
一.选择题
1.C语言的程序一行写不下时,可以(C)。
A)用逗号换行B)用分号换行
C)在任意一空格处换行D)用回车符换行
2.putchar ( )函数可以向终端输出一个(D)。
A)整型变量表达式值B)实型变量值
C)字符串D)字符或字符型变量值
3.执行下列程序片段时输出结果是(A)。
unsigned int a=65535;
printf(“%d”,a);
A)65535 B)-1 C)-32767 D)1
4.执行下列程序片段时输出结果是(B)。
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,当从第一列开始输入数据时,正确的数据输入方式是(C)。
int a1,a2; char c1,c2;
scanf(“%d%c%d %c”,&a1, &c1 ,&a2,&c2);
A)10 A20 B↙B)10 A 20 B↙
C)10A20B↙C)10 A 20B↙
6.对于下述语句,若将10赋给变量k1和k3,将20赋给变量k2和k4,则应按(D)方式输入数据。
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.执行下列程序片段时输出结果是(D)。
int x=13,y=5;
printf(“%d”,x%=(y/=2));
A)3 B)2 C)1 D)0
8.下列程序的输出结果是(B)。
main ( )
{ int x=023;
printf(“%d”,--x);
}
A)17 B)18 C)23 D)24
9.已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是(D)。
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.执行下列程序片段时输出结果是(B)。
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值的语句是(C)。
A)scanf(“%f”,x); B)scanf(“%f”,&x);
C)scanf(“%lf”,&x); D)scanf(“%5.1f”,&x);
12.若运行时输入:12345678↙,则下列程序运行结果为(D)。
void 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,以下选项中正确的输入语句是(C)。
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函数调用语句是(D)。
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,则正确的数据输入方式是(D)。
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控制语句有9种。
4.一个表达式要构成一个C语句,必须以; 结束。
5.复合语句是用一对{ } 界定的语句块。
6.printf函数和scanf函数的格式说明都使用%字符开始。
7.scanf处理输入数据时,遇到下列情况时该数据认为结束:(1)回车,(2)非法字符,(3)空白字符或Tab 。
8.已有int i,j; float x;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是scanf(“%d %d %f”,&i,&j,&x);。
9.C语言本身不提供输入输出语句,其输入输出操作是由函数来实现的。
10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令:#include 。
三.程序阅读题
1.用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=?A?,c2=?a?,问在键盘上如何输入?
void 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);
}
运行结果:
a=3 b=6 8.5 71.82Aa
2.写出以下程序的输出结果。
main ( )
{ int y=3,x=3,z=1;
printf(“%d %d\n”,(++x,y++),z+2);
}
运行结果:
3 3
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); }
运行结果:
a=12345,b=-1.98e+002,c= 6.50
4.写出以下程序的输出结果。
main ( )
{ int x=-2345;
float y=-12.3;
printf(“%6d,%06.2f”,x,y);
}
运行结果:
-2345,-12.30
5. 写出以下程序的输出结果。
main ( )
{ int a=252;
printf(“a=%o a=%#o\n”,a,a);
printf(“a=%x a=%#x\n”,a,a);
}
运行结果:
a=374 a=0374
a=fc a=0xfc
6. 写出以下程序的输出结果。
main ( )
{ int x=12; double a=3.1415926;
printf(“%6d##,%-6d##\n”,x,x);
printf(“%14.1f##\n”,a);
}
运行结果:
12##,12 ##
3.1##
四.程序填空题
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】: 6.6
五.编程题
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)。
A)只能是0或1 B)只能是0或非0正数
C)只能是整型或字符型数据D)可以是任何类型的数据
2.下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”的要求(B)。
A)x%2==0 B)!x%2!=0 C)(x/2*2-x)==0 D)!(x%2)
3.以下程序片段(A)。
int x=2,y=3;
printf( );
A)什么都不输出B)输出为:***x=2
C)输出为:###y=2 D)输出为:###y=3
4.能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是(C)。
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总是与(D)。
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的值为(B)。
A)1 B)2 C)3 D)4
7.下面( B )是错误的if语句(设int x,a,b;)
A)if (a=b) x++; B)if (a=<="">
C)if (a-b) x++; D)if ( x ) x++;
8.以下程序片段(D)。
main ( )
{ int x=0,y=0,z=0;
if (x=y+z)
printf(“***”);
else
printf(“###”);
}
A)有语法错误,不能通过编译B)输出:***
C)可以编译,但不能通过连接,所以不能运行D)输出:###
9.对下述程序,( A)是正确的判断。
main ( )
{ int x,y;
scan f(“%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<="" p="" w="" y="" y
11.下述表达式中,(A)可以正确表示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.下述程序的输出结果是(C)。
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.下述程序的输出结果是(C)。
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 )1,0,3 D)1,1,2
14.以下程序输出结果是(B)。
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++;
}
p rintf(“a=%d,b=%d”,a,b);
}
A)a=1,b=0 )a=2,b=1 C)a=1,b=1 D)a=2,b=2
15.下述程序的输出结果是(-5,5,6 )。
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的值是(B)。
if (a<b)< p="">
if (c
else
if (a<c)< p="">
if (b
else x=3;
else x=6;
else x=7;
A)1 B)2 C)3 D)4
17.在下面的条件语句中(其中S1和S2表示C语言语句),只有一个在功能上与其他三个语句不等价(D)。
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=10;执行下列程序后,变量i的正确结果是(D)。
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<j&&i<k)?i:(j<k)?j:k;语句后,f的值为(a)。
< p=""> 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,则表达式值相等的是(C)。
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整除”写成逻辑表达式y%4==0 && y%100!=0 || y%400==0 。
6.设x,y,z均为int型变量;写出描述“x,y和z中有两个为负数”的C语言表达式:(x<0&&y<0 && z>0)| (x>0&&y<0 && z<) || (x<0 &&y>0& z<0)。
7.已知A=7.5,B=2,C=3.6,表达式A>B && C>A || A B的值是0 。
8.有int x=3,y=-4,z=5;则表达式(x&&y)==(x||z)的值为1。
9.若有x=1,y=2,z=3,则表达式(x< p="">
10.执行以下程序段后,a= 10,b= 9,c= 11。
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 ;
scan f(“%d”,&a);
printf(“%s”,(a%2!=0)?”No”:”Yes”);
}
运行结果:
Yes
2.写出以下程序的运行结果。
void main ( ) //题目已经修改
{ int a=1,b=2,c=5;
switch (a) {
case 1:switch (b) {
case 1: printf(“@”); break ;
case 2: printf(“!”); break ;
}
case 0:switch (c) {
case 1: prin tf(“*”) ; break ;
case 2: printf(“#”) ; break ;
default : print f(“#”) ; break ;
}
default : printf(“&”);
}
printf(“\n”);
}
运行结果:
!#&
六.程序判断题
1.下面程序将输入的大写字母改写成小写字母输出,其他字符不变;请判断下面程序的正误,如果错误请改正过来。
main ( )
{ char c;
c = getchar ( ) ;
c = (c>=?A? | | c<=?Z?) ? c-32 : c+32 ;
printf(“%c”,c);
}
c = (c>=’A’ | | c<=’Z’) ? c-32 : c+32 ;错误
应该改为:c = (c>=’A’ && c<=’Z’) ? c-32 : c+32 ;
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);
}
各个case后面少break;
七.程序填空题
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】x:y
【2】u:z
八.编程题
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;
whi le (k=0) {printf(“%d”,k);k--;}
则下面描述中正确的是(C)。
A)while循环执行10次B)循环是无限循环
C)循环题语句一次也不执行D)循环体语句执行一次2.下述程序段中,(C)与其他程序段的作用不同。
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.以下程序段的循环次数是(B)。
for (i=2; i==0; ) printf(“%d” , i--) ;
A)无限次B)0次C)1次D)2次4.下面程序的输出结果是(B)。
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 ;
}
<>
</j&&i<k)?i:(j<k)?j:k;语句后,f的值为(a)。
<>
</c)<> </b)<>。