1、if 语句
if语句的语法如下:
if (表达式)
语句;
if语句中表达式成立为真,则语句执行,表达式不成立为假,则语句不执行。表达式可以是常量表达式,也可以是变量表达式。在c语言中,0表示假,非0表示真。
比如:
上面代码两个 if 表达式中,使用了变量a和常量2,所以表达式成立为真,对 if 后面的语句执行打印#include<stdio.h> int main() { int a = 2; if(a) printf("hello world\n"); if(2) printf("hello world\n"); return 0; }
上面代码表达式为0为假,所以 if 后面语句不执行#include<stdio.h> int main() { int a = 0; if(a) printf("hello world\n"); if(0) printf("hello world\n"); return 0; }
if语句执行流程
我们可以通过if语句去判断一个数是奇数还是偶数,例如:输入一个整数,判断是奇数还是偶数
#include<stdio.h> int main() { int num = 0; scanf("%d", &num); if(num % 2 == 1) printf("%d是奇数\n", num); if(num % 2 == 0) printf("%d是偶数\n", num); return 0; }
上面代码判断一个整数是奇数还是偶数用两个if语句有点麻烦,其实还有更简洁的书写形式。
2、if else 语句
if....else....语句了,语法形式如下
if (表达式)
语句1;
else
语句2;
输入一个整数,判断是否为奇数,如果是奇数打印奇数,否则打印偶数
#include<stdio.h> int main() { int num = 0; scanf("%d", &num); if(num % 2 == 1) printf("%d是奇数\n", num); else printf("%d是偶数\n", num); return 0; }
if....else语句执行流程
分支中包含多条语句,默认在 if 和 else 语句中默认都只控制一条语句,比如:
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age>=18) printf("成年了\n"); printf("可以去工作了\n"); return 0; }
上面代码,你会发现输入的值不管是>=18,还是小于18,“可以去工作了”都会打印。这是因为if 表达式为真打印后面第一条语句后,再接着打印第二条语句。当表达式为假的时候只打印第二条语句。
如果用大括号将 if 语句后面两个语句括起来会怎样呢?
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age >= 18) { printf("成年了\n"); printf("可以去工作了\n"); } return 0; }
这时我们可以看到当表达式为真时,if 语句执行大括号内的两条语句,表达式为假时则不执行。所以 if 语句后面跟多条语句的话,那就使用{ }将代码括起来。
同理 else 后跟多条语句也一样。
#include<stdio.h> int main() { int age = 0; scanf("%d", &age); if (age >= 18) { printf("成年了\n"); printf("可以去工作了\n"); } else { printf("未成年\n"); printf("好好学习\n"); } return 0; }
if 语句嵌套的使用,构成多重判断。比如:输入一个整数判断是0,还是正式或者负数。
代码如下:
#include<stdio.h> int main() { int num = 0; scanf("%d", &num); if (num == 0) printf("为%d\n", num); else if (num > 0) printf("%d为正数\n",num); else printf("%d为负数\n",num); return 0; }
这是在 else 中嵌套了一个 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; }
悬空 else,如果有多个 if 和 else, else 总是跟最接近的if匹配。比如下面代码:
#include<stdio.h> int main() { int a = 0; int b = 8; if (a == 6) if (b == 8) printf("yes\n"); else printf("no\n"); return 0; }
可以看到上面代码什么都没打印,因为它默认跟第二个 if 匹配,是嵌套在第一个 if 中的,因为第一个 if 表达式为假,所以没执行后面语句。
代码相当于这样
#include<stdio.h> int main() { int a = 0; int b = 8; if (a == 6) { if (b == 8) printf("yes\n"); else printf("no\n"); } return 0; }
如果我们要 else 和第一个 if 匹配的话,可以这样修改代码:
#include<stdio.h> int main() { int a = 0; int b = 8; if (a == 6) { if (b == 8) printf("yes\n"); } else printf("no\n"); return 0; }
所以我们在写代码的时候,在该用大括号的地方应适当的使用大括号,这样代码的逻辑就会更加的清晰,代码可读性就越高。