在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结构
而不是第一个


赞一个
赞一个啦