C程序设计语言
上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  }