if语句
1. if的概念及使用
if语句的语法形式如下:
1 if(表达式) //根据自己的需要来设定,用来判断真假
2 语句
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是非0,则语句执⾏。
例:输⼊⼀个整数,判断是否为奇数
#include <stdio.h>
int main()
{
int num = 0; //赋值
scanf("%d", &num);
if(num % 2 == 1) //用来判断num除以2的余数是不是等于1
printf("%d 是奇数\n", num); //如果等于1则打印,不等于1就不打印
return 0;
}
2. else
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢?
这⾥就需要if...else...
语句了,语法形式如下:
1 if ( 表达式 )
2 语句1
3 else //如果判断if表达式是假,则else输出为真,如果if是真,则else不起作用
4 语句2
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num % 2 == 1)
printf("%d 是奇数\n", num); //如果if判定为真则直接输出,如果为假则在下面再进行判定
else
printf("%d 是偶数\n", num); //如果if判定为假,则这里输出为真
return 0;
}
3. 分支中包含多条语句
默认在if
和else
语句中都只控制一条语句,比如:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //判定age是否大于等于18
printf("成年了\n"); //if语句默认只控制这一条语句
printf("可以谈恋爱了\n"); //这条不受if语句控制,可以直接打印
return 0;
}
上⾯的代码,你会发现输⼊的值不管是>=18还是⼩于18,“可以谈恋爱了” 都会打印在屏幕上。
这是因为if
语句只能控制⼀条语句,就是printf(" 成年了\n");
, if语句为真,则打印成年了,if语句为假,则不打印,对于printf(" 可以谈恋爱了\n")
; 是独⽴存在的,不管if语句的条件的真假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤{ }
将代码括起来, else后也可以跟上⼤括号。如下:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{ } 控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以交⼥朋友了\n");
}
return 0;
}
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) // if 后使⽤{} 可以控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("成年了\n"); //如果 if 为真则这两条语句都打印
printf("可以交⼥朋友了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n"); //如果 if 为假则打印这两条语句
printf("不可以早恋哦\n");
}
return 0;
}
4. 嵌套if
在if else
语句中, else
可以与另⼀个 if 语句连⽤,构成多重判断。 ⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", num);
if (num == 0)
printf("输入的数字是0\n");
else if(num > 0) //这里的 if 相当于嵌套在else语句中,形成了嵌套结构
printf("输入的数字是正数\n");
else
printf("输入的数字是负数\n");
return 0;
}
上面else if
代码后面的if
就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。
再⽐如:要求输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出不 是整数。
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num > 0)
{
if(num % 2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else
{
printf("输入的数是负数\n");
}
return 0;
}
上面代码的第二个if
就是嵌套在第一个if
语句中的,构成了嵌套的if
语句。
以上就是嵌套的if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
5. 悬空else问题
如果有多个if
和else
,可以记住这样⼀条规则,else
总是跟最接近的if 匹配
。
我们⾸先从下⾯代码开始
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1) //第一个条件就不满足
if(b == 2)
printf("hehe\n");
else //就近原则
printf("haha\n"); //两个都不打印
return 0;
}
很多人,上来就判断 a
是0,不等于1,那就执⾏ else
⼦句,打印haha
但是当你去运⾏代码时,结果为空白。
为什么呢?
这就是悬空 else
的问题,如果有多个 if
和else
,可以记住这样⼀条规则,else
总是跟最接近的 if
匹配。
上⾯的代码排版,让 else
和第⼀个if
语句对⻬,让我们以为else
是和第⼀个if匹配的,当if
语句不成⽴的时候,⾃然想到的就是执⾏ else
⼦句,打印haha
,但实际上else
是和第⼆个if
进⾏匹配的,这样后边的 if...else
语句是嵌套在第⼀个if
语句中的,如果第⼀个if
语句就不成⽴,嵌套 if
和else
就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n"); //第二个if语句和else语句被嵌套在第一个if语句里
else
printf("haha\n");
}
return 0;
}
或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
printf("hehe\n"); //用{}把各个语句隔开,使之相互独立
}
else
{
printf("haha\n");
}
return 0;
}
只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使 ⽤,让代码的可读性更⾼。