第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 仔细阅读以下程序 , 指出程序的运行结果 . 010001xxxy #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 ; ca...