第5章选择结构程序设计习题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) ;

相关文档
最新文档