目录
引言
C语言作为一种非常常用的编程语言,具有灵活强大的循环和分支结构。循环结构允许我们重复执行一段代码,而分支结构则允许我们根据条件选择执行不同的代码块。这两个结构在编写程序时非常有用,可以帮助我们实现不同的逻辑和控制流程。在本篇文章中,我们将详细介绍C语言中的分支语句中的if。
C语言结构
C语言是一种结构化控制语言,这里的结构即为顺序机构、选择结构、循环结构。
在C语言中,我们可以使用 if 、switch 实现分支结构,使用 for 、 while 、do while 实现循环结构。
1. if 语句
1.1 if
if语句的语法形式是这样的
if(表达式) 语句
表达式成立(为真),则语句执行; 表达式不成立(为假),则语句不执行;
在C语言中,0为真,非0为假;即如果表达式的结果为0,则语句执行;若表达式结果非0,则语句不执行;
例子,输入一个整数,判断是否为奇数:
#include<stdio.h> int main() { int num = 5; if (num % 2 != 0) { printf("%d是奇数", num); } return 0; }
输出结果
1.2 else
如果一个数不是奇数,那么这个数就是偶数了,那么我们如何判断这个数是奇数还是偶数呢?
这里就需要 **if…else…**的语句表示形式了,其具体形式如下:
if(表达式) 语句1 else(表达式) 语句2
例子,输入一个整数,判断他是否为奇数,若为奇数,怎判断为奇数,反之,则判断为偶数;
#include<stdio.h> int main() { int num = 0; scanf("%d", &num); if (num % 2 != 0) printf("%d是奇数", num); else printf("%d是偶数", num); return 0; }
练习:输入一个年龄,如果大于等于18,则输出为成年,反之为未成年:
#include<stdio.h> int main() { int year = 0; printf("请输入年龄:"); scanf("%d", &year); if (year >= 18) printf("是成年\n"); else printf("是未成年\n"); return 0; }
2. 分支中包含多条语句
默认在 if 和 else 语句中默认只控制一条语句。若想要控制多条语句,则用{}
将多条语句括起来。
#include<stdio.h> int main() { int a = 0; int b = 0; int c = 0; printf("请输入a和b:"); scanf("%d%d", &a, &b); if (a >= b) { c = a; a += b; b = c; printf("a=%d\nb=%d", a, b); } else { c = b; b += a; a = c; printf("a=%d\nb=%d", a, b); } return 0; }
输出结果
3. 多重选择 else if
在现实生活中我们常有多种选择,在程序中我们也可以用 else if
来拓展if else 结构来模拟着中情况。
#include<stdio.h> int main() { int age = 0; printf("请输入年龄:"); scanf("%d", &age); if (age < 18) { printf("未成年\n"); } else if (age <= 44) { printf("青年\n"); } else if (age <= 59) { printf("中年\n"); } else if (age <= 89) { printf("老年\n"); } else { printf("老寿星\n"); } return 0; }
输出结果
4. 嵌套if
实际上,else if
是if else
的一种变式。即一个新的if语句嵌套 else语句中;
换一句话说,在if else
语句中,else 可以与另一个 if语句连用,形成多重判断;
int main() { int age = 0; scanf("%d", &age); if (age < 18) { printf("少年\n"); } else { if (age <= 44) { printf("⻘年\n"); } else { if (age <= 59) { printf("中⽼年\n"); } else { if (age <= 89) printf("⽼年\n"); else printf("⽼寿星\n"); } } } return 0; }
有了着中嵌套语法,就可以完成更多复杂的逻辑判断;
5. 悬空else / else与if配对问题
如果有有许多 if 和 else,那么 else 只与最近的else配对;
猜一猜下面代码的结果是什么?
#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
就没机会执行了,最终啥都不打印;
上面代码相当于下面代码
int main() { int a = 0; int b = 2; if (a == 1) { if (b == 2) printf("hehe\n"); else printf("haha\n"); } return 0; }
改正后代码
int main() { int a = 0; int b = 2; if (a == 1) { if (b == 2) printf("hehe\n"); } else { printf("haha\n"); } return 0; }
只要适当带上大括号,代码的逻辑就会变得更加清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高!