在3.1中我们简单的学习了if的使用
在程序中使用if流程语句可以改变运行的流程
但是在很多情况下,仅仅只在一种情况下改变流程是不够的
例如我们可能需要在满足某一个条件下,继续判断其它条件,并执行对应操作。
假如我们需要一个判断闰年的程序
我们知道,闰年的判断法则是在不能被100整除的年份里,能被4整除为闰年;能被100整除的年份里(即整百年),能被400整除才是闰年
例如2000和2004均为闰年,2100和2010均不是闰年
这样我们便涉及到了多次判断的问题
完成这个功能的程序如下:注(leap year即为闰年)
#include <stdio.h> #include <stdlib.h> int main() { int year = 0; printf("Please input the year you want to judge:");//输入需要判断的年份 scanf("%d", &year); if(year % 100) //如果不能被100整除,那么表达式的值不为0,即为真 { //不能被100整除的时候直接判断 if(year % 4) { printf("The year %04d is not a leap year!\n", year);//不是闰年 } else printf("The year %04d is a leap year!\n", year);//是闰年 } else { //否则说明是“整百年”,使用400判断 if(year % 400) { printf("The year %04d is not a leap year!\n", year); } else { printf("The year %04d is a leap year!\n", year); } } return 0; }
运行程序后
现在我们来分析程序
第10行的if将年份能否被100整除分为两种情况
对输入的年份进行%求余操作时,如果余数不为0,也就是真的时候,表示无法被100整除
此时,我们在if的结构内进行处理
直接判断年份能否被4整除,原理同上
同样,在else中也类似
注意第18行
这里的else并没有写大括号,因为在后面只跟有1个语句时大括号是可以省略的
这意味着我们可以写成这样
#include <stdio.h> #include <stdlib.h> int main() { int year = 0; printf("Please input the year you want to judge:");//输入需要判断的年份 scanf("%d", &year); if(year % 100) //如果不能被100整除,那么表达式的值不为0,即为真 { //不能被100整除的时候直接判断 if(year % 4) printf("The year %04d is not a leap year!\n", year);//不是闰年 else printf("The year %04d is a leap year!\n", year);//是闰年 } else { //否则说明是“整百年”,使用400判断 if(year % 400) printf("The year %04d is not a leap year!\n", year); else printf("The year %04d is a leap year!\n", year); } return 0; }
同样,因为if-else属于一个完整的结构
因此最外层的if-else的大括号同样可以省略
于是乎程序就成了这样(仅给出if-else部分)
if(year % 100) //如果不能被100整除,那么表达式的值不为0,即为真 //不能被100整除的时候直接判断 if(year % 4) printf("The year %04d is not a leap year!\n", year);//不是闰年 else printf("The year %04d is a leap year!\n", year);//是闰年 else //否则说明是“整百年”,使用400判断 if(year % 400) printf("The year %04d is not a leap year!\n", year); else printf("The year %04d is a leap year!\n", year);
不用怀疑,将此代码复制并且覆盖掉前面的代码,结果是完全一样的
于是乎这样又涉及到了一个else和哪一个if配对的问题
c语言中规定else永远和最近的未配对的if配对
这就是说,如果一个像下面的程序
if(xxx) if(xxx) xxx; else xxx;
尽管这里的else缩进和第一个if相同,但是由于以上的规定,它和第二个if组成if-else结构
而不是第一个
赞一个
赞一个啦