上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
4.3.2 if语句的嵌套
当if语句子句又是if语句时,就构成了if语句的嵌套。if语句既可以嵌套在then子句中,也可以嵌套在else子句中。可以有如下形式的嵌套:
① if(表达式) if语句; ② if(表达式) if语句; else if语句;
嵌套的if语句可能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。
if语句嵌套时,else子句与if的匹配原则是与在它上面、距它最近且尚未匹配的if配对。为明确匹配关系,避免匹配错误,强烈建议:将内嵌的if语句,一律用大括号括起来。
另外,还要注意if语句的嵌套的层数不宜太多。在实际编程时,应适当控制嵌套层数(一般为2~3层)。
【例4.6】 用嵌套的if语句改写例4.4的程序:判断一个年份是否闰年。
这里只给出源程序,请读者对照例4.4的程序进行分析。程序如下:
1 #include<stdio.h> 2 void main() 3 { 4 int year,leap=0; /* leap预置为0,非闰年 */ 5 printf("Please input the year:"); 6 scanf("%d",&year); 7 if(year%100!=0) 8 { if(year%4==0)leap=1; 9 } 10 else 11 { if(year%400==0)leap=1; 12 } 13 if(leap)printf("%d is a leap year.\n",year); 14 else printf("%d is not a leap year.\n",year); 15 }
请大家试一试,如果去掉第8~9行的大括号“{}”,会是什么结果?去掉第11~12行的“{}”又会怎样呢?
【例4.7】 根据平面上一点M (x, y)的坐标判断点M所在的象限。
分析:将x和y的值分别与0进行比较,即可判断出点M (x, y)所处的象限。在这里,不考虑坐标轴上的点,认为它们可以处于任意象限。
程序如下:
1 #include<stdio.h> 2 void main() 3 { 4 float x,y; 5 printf("input x,y:"); 6 scanf("%f,%f",&x,&y); 7 if(x)0) 8 if(y)0)printf("在第一象限\n"); 9 else printf("在第四象限\n"); 10 else 11 if(y)0)printf("在第二象限\n"); 12 else printf("在第三象限\n"); 13 }