main( ) {
int x,y;
scanf(―%d‖,&x);
if ( 错误!未找到引用源。 x>2&&x<=10 ) x>2&&x<=10
y=x*(x+2);
else if ( 错误!未找到引用源。x>-1&&x<=2 ) x>-1&&x<=2
y=2*x;
else if (x<= -1)
y=x-1;
else y= -1;
if (y!=-1)
printf(―%d‖,y);
else
printf(―error‖);
}
7. 根据以下函数关系,对输入的每个x值,计算出相应的y值。
x y x<0 0<=x<10 10<=x<20 20<=x<40 0 x 10 -0.5x+20 main( ) {
int x,c,m;
float y;
scanf(―%d‖,&x);
if( 错误!未找到引用源。 x<0 ) x<0
c=-1;
else
c= 错误!未找到引用源。 x/10 ; x/10
switch(c) {
case –1: y=0; break;
case0 : y=x; break; case1 : y=10;break; case2 :
case3 : y=-0.5*x+20;break; default : y= -2; }
16
if( 错误!未找到引用源。 y>=0或x<40 ) x<40
printf(―y=%f‖,y);
else
printf(―error\\n‖);
}
8. 下面程序根据以下函数关系,对输入的每个x值,计算相应的y值。
x y
x=a或x=-a 0
-a
#include ―math.h‖
main( ) {
int x,a;
float y;
scanf(―%d %d‖,&x,&a);
if( x= =a||x= =-a 错误!未找到引用源。 ) (x= =a)||(x= =-a)
y=0;
else if( 错误!未找到引用源。 ) (x>-a)&&(x
y=sqrt(a*a-x*x); else y=x;
printf(―%f‖,y); }
9. 以下程序的功能是计算一元二次方程ax2?bx?c?0的根,完成下面程序内容。
#include ―math.h‖ main( ) {
float a,b,c,t,disc,twoa,term1,term2;
printf(―enter a,b,c:‖);
scanf(―%f %f %f ‖,&a,&b,&c);
if( 错误!未找到引用源。 a= =0 ) a= =0
if ( b= = 0) printf(―no answer due to input error \\n‖); else printf(―the single root is %f \\n‖,c/b); else
{ disc=b*b-4*a*c; twoa=2*a; term1= -b/twoa; t=abs(disc);
17
term2=sqrt(t)/twoa; if( 错误!未找到引用源。 disc<0或b*b-4*a*c<0 ) disc<0
printf(―complex root \\n real part=%f imag part=%f\\n‖,term1,term2);
else printf(―real root\\n root1=%f root2=%f\\n‖,term1+term2,term1-term2);
}
}
10. 以下程序的功能是判断输入的年份是否是闰年。 main( ) {
int y,f;
scanf(―%d‖,&y); if(y@0= =0)
f=1;
else if( y%4==0&&y0!==0 错误!未找到引用源。 ) (y%4= =0)&&(y0!=0)
f=1;
else
错误!未找到引用源。 f=0 ; f=0
if(f)
printf(―%d is‖,y);
else
printf(―%d is not‖,y);
printf(―a leap year\\n‖)
}
四、编程题
1. 编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为‘+’,‘-’,‘*’,‘/’(用switch语句实现)。
2. 试编程判断输入的正数是否既是5又是7的倍数。若是,则输出yes,否则输出no。
第五章 循环控制
一、单项选择题
1. C语言中while与do—while语句的主要区别是( A )。A
A)do—while的循环体至少无条件执行一次 B)do—while允许从外部转到循环体内 C)do—while的循环体不能是复合语句
D)while的循环控制条件比do—while的循环控制条件严格 2. C语言中( D )。D
A)不能使用do while语句构成的循环;
18
B)do while语句构成的循环必须用break语句才能退出;
C)do while语句构成的循环,当while语句中的表达式值为非零时结束循环;
D)do while语句构成的循环,当while语句中的表达式值为零时结束循环; 3. 设有程序段
int k=10;
while (k=0) k=k-1;
则下面描述中正确的是( C )。C
A)while循环执行10次 B)循环是无限循环
C)循环体语句一次也不执行 D)循环体语句执行一次 4. 语句while(!e);中的表达式!E等价于( A )。A
A)E= =0 B)E!=1 C)E!=0 D)E= =1 5. 假定a和b为int型变量,则执行以下语句后b的值为( D )。
D
a=1;b=10;
a b b=b-a a++ b<0 b— do
1 10 9 2 8 { b- =a;a++; }
while (b--<0);
A)9 B)-2 C)-1 D)8 5.
6. 下面程序的输出结果为( C )。 C
main( ) {
int x=5;
do
x x=x-4 --x !(--x) printf(\
5 1 0 T while(!(--x));
0 -4 -5 F }
A)1 B)1 C)1 D)死循环 0 - 4 7. 设有程序段
t=0;
while (printf(―+‖)) {
t++;
if(t<3) break; }
下面描述正确的是( B )。B A)其中循环控制表达式与0等价 B)其中循环控制表达式与‘0’等价 C)其中循环控制表达式是不合法的 D)以上说法都不对 8. 以下程序段( C )。C
19
x x=x*x !x -1 1 0 x=-1; do {
x=x*x; }while(!x);
A)是死循环 B)循环执行两次 C)循环执行一次 D)有语法错误 9. 下面程序段的运行结果是( D )。D int x=0,y=0; x y y++ ++y x=x+y while(x<15) 0 0 1 2 2 { 2 2 3 4 6 y++; 6 4 5 6 12 x+=++y; 12 6 7 8 20 }
printf(―%d,%d‖,y,x);
A)20,7 B)6,12 C)20,8 D)8,20 10. 若有如下语句
int x=3; do {
printf(―%d\\n‖,x- =2); }while(!(--x));
则下面程序段( B )。B
A)输出的是1 B)输出的是1和-2 C)输出的是3和0 D)是死循环 11. 下面程序的运行结果是( D )。D
#include
y y-- --y y-- {
int y=10; do {
y--; }while(--y);
printf(―%d\\n‖,y--); }
A)-1 B)1 C)8 D)0 12. 下列程序段不是死循环的是( A )。A
A) k=0; B) i=100; C)s=3379; D)for (; ;);
do while(1) while(s++%2+s%2) { { s++;
++k; i=i0+1; }while (k>=0); if(i>100) break;
}
13. 以下有WHILE构成的循环执行的次数是( A )。A
int ks=0;
20