第5章选择结构程序设计习题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5章 选择结构程序设计
5-1 比较单分支、双分支、多分支if 语句。
答:(1)多分支if 语句可用多条单分支、双分支if 语句等价实现。
(2)双分支if 语句形式上相当于单分支if 语句扩展else 分支而来。
(3)单分支if 语句可以认为是双分支if 语句缺省else 子句的特殊情况,一条双分支语句可用两条单分支语句实现。
思考:分支结构主要用在哪些情况下?它有哪几种形式?
5-2
, 下列描述哪些是正确的?
(1) if (x<0)y=−1;
else if(x==0) y=0;
else y=1;
(2)if(x>=0)
if(x>0) y = 1 ;
else y = 0 ;
else y = -1 ;
(3) y = -1 ;
if(x!=0)
if(x>0) y = 1 ;
else y = 0 ;
(4)y = 0 ;
if (x>=0)
if(x>0) y = 1 ;
答:(1) 正确 ; (2) 正确 ;(3) 不正确 ;(4) 不正确 ; 思考 : 若将(3)改为: y = -1 ; (4) 改为:y = 0 ;
if(x>=0) /*删除原if(x>=0)*/ if(x>0) y =1 ; if(x>0) y = 1 ;
else y = 0 ; else y = -1 ;
后是否正确 ?
5-3 仔细阅读以下程序 , 指出程序的运行结果 .
⎪⎪⎩⎪⎪⎨⎧>=<-=01
0001x x x y
#include
main()
{ int a , b ;
a =
b = 5 ;
if(a==1)
if(b==5)
{a+=b ;
printf("a=%d\n ",a) ;
}
else
{a-=b ;
printf("a=%d\n",a) ;
}
printf("a+b=%d",a+b) ;
}
解: 结果为: a + b = 10
思考:为何有三个printf 语句,却只有一行输出?如果将第5行去掉或改为if(a==5) , 结果是否一样?
5-3仔细阅读以下程序,指出程序的运行结果。
解:#include
main()
{ int i =1 , j = 0 ,m = 1 ,n =2 ;
switch(i++)
{case 1 : m++ ;n++ ;
case 2 : switch(++j)
{case 1 : m++ ;
case 2 : n++ ;
}
case 3 : m++ ;n++ ;
break ;
case 4 :m++ ;n++ ;
}
printf("m=%d,n=%d" , m ,n) ;
}
解:结果为:m =4 ,n = 5
思考:将switch(i++)改为switch(i)结果有何变化?去掉“break:”语句后,结果有何变化?
5-5 仔细阅读以下程序,指出程序的运行结果。
#include
main()
{ char ch ;
printf("Enter ch: ") ;
scanf("%c",&ch) ;
switch(ch)
{case 'm' : printf("Good morning !\n") ; break ;
case 'n' : printf("Good night!\n ") ; break ;
default : printf("I can not understand!\n") ; break ;
}
printf("All right!\n") ;
}
解:当输入m时结果为:
Enter ch : m
Good morning !
All right !
当输入n时结果为:
Enter ch : n
Good night !
All right !
当输入其它字符时结果为:
Enter ch : k
I can not understand !
All right !
思考:当输入大写的M与N时,将会有什么结果?如果希望输入大写的M,N与输入小写的m、n时结果相同,程序如何修改?
5-6编写程序,求三个数的最小值。进一步考虑求四个数、五个数及更多的数的最小值及最大值.
解:#include
main()
{
int a1 ,a2 ,a3 ,min ;
scanf("%d,%d,%d",&a1,&a2,&a3) ;
min = a1 ;
if(a2 if(a3 printf("最小值为:%d\n",min) ; } 思考:要求出最大值,是否将min改为max就可以了?关键应改什么地方? 5-7 编写程序,解方程ax+b=0 . 解:#include main() { float a,b,x ; scanf("%f,%f",&a,&b) ; if(a==0) if(b==0) printf("x可为任意值!\n") ; else printf("无解!\n") ; else {x=-b/a ; printf("方程的根为:%f\n",x) ; } } 思考:此题与习题2-14的程序有何不同之处?具有了什么功能? 5-8 编写程序,解方程ax2+bx+c=0。要求分别用if语句和switch 语句实现。 解:(1)用if语句实现。 #include #include main() {float a,b,c,d,x,x1,x2 ; printf("请输入方程的三个系数a,b,c :" ) ; scanf("%f,%f,%f",&a,&b ,&c) ;