C语言if else语句的用法(图解)
C语言中的选择结构也称为分支结构,选择结构可以用分支语句来实现。分支语句包括 if 语句和 switch 语句:
- if 语句提供一种二分支选择的控制流程,它根据表达式的值来决定执行两个不同情况下的其中一个分支程序段;
- switch 是一种专门进行多分支选择的分支结构控制。
文本我们讲解 if else 语句的用法,关于 switch 的用法,请转到《C语言switch case语句》。
C语言 if 语句
C语言 if 语句的一般语法如下。
if(表达式)
语句;
其中,表达式必须是关系表达式或逻辑表达式,语句可以为简单语句或复合语句,本文后面的内容只要提到“语句”的部分都是指简单语句或复合语句。
if 语句的流程图表示如下:

例如:
if(x>y) printf("%d",x);
这个语句的含义为:如果 x 大于 y,输出 x 的值,否则什么也不做。注意,初学者容易在语句(if)后面误加分号,例如:
if(x>y); x+=y;
这样相当于满足条件执行空语句,下面的 x+=y 语句将被无条件执行。一般情况下,if 条件后面不需要加分号。示例1
输入3个不同的数,按从大到小的顺序输出。第1步:问题分析。
假设3个数分别为 a、b、c。
- 先将 a 与 b 比较,把较大者放在 a 中,较小者放在 b 中。
- 再将 a 与 c 比较,把较大者放在 a 中,较小者放在 c 中,此时,a 为三者中的最大者。
- 最后将 b 与 c 比较,把较大者放在 b 中,较小者放在 c 中,此时 a、b、c 已经按从大到小的顺序排列。
用流程图描述如下:

第2步:编程实现。
#include<stdio.h> int main() { int a,b,c,t; /*t为临时变量*/ printf("请输入 a,b,c:"); scanf("%d%d%d",&a,&b,&c); if(a<b) /*如果a<b,交换a,b的值,通过下面3条语句实现,使a中始终存放较大者*/ { t=a; a=b;b=t; } if(a<c) {t=a;a=c;c=t;} /*若a<c,交换a,c的值,那么a是三者的最大值*/ if(b<c) {t=b,b=c,c=t;} /*再比较b与c的大小,使b为第二大者*/ printf("从大到小输出:\n"); printf("%d\t %d \t%d\n",a,b,c); /*输出排序后的结果*/ }编译、连接、运行程序,根据提示分别输入 a、b、c的值 20、-9、3,按【Enter】键,即可输出 a、b、c 这3个数从大到小排序的结果,如下所示:
请输入 a,b,c:20 -9 3
从大到小输出:
20 3 -9
实现两个变量的交换,通常都要引入第 3 个变量,进行 3 次赋值操作。假设 a 的值为 2,b 的值为 3,交换 a、b 两个变量,需要引入第 3 个变量 t,执行 t=a;a=b;b=t; 才可以。其过程为将 a 的值 2 赋给 t,此时变量 a 与 t 的值都为 2;再将 b 的值赋给 a,a 中的值已经变成了 3;最后将 t 中的值赋给 b,t 中存放的是原来 a 的值即 2,赋给 b 后,b 的值就是 2。
但是如果写成“a=b;b=a;”就错了。因为 b 的值赋给 a 后,a 的值变成了 3,原来的 2 已经不存在了,再执行 b=a,结果两个变量是同值,都是 3。可见这两条语句并不能实现变量的交换。
提示:在 if 语句中,可以包含多个操作语句(如上面的例子),此时必须用“{}”将几条语句括起来作为一个复合语句。
C语言 if else 语句
if 语句的标准形式为 if else,当给定的条件满足时,执行一个语句;当条件不满足时,执行另一个语句。其一般语法格式如下。
if(表达式)
语句 1;
else
语句 2;
下图展示了 if-else 语句的流程。

if(a>0)
printf("a is positive.\n");
else
printf("a is not positive.\n");
else 部分不能独立存在,即 else 的前面一定有 if,它一定是 if 语句的一部分。
示例2
判断输入的整数是否是 13 的倍数。#include<stdio.h> int main() { int num; printf("请输入一个整数:"); scanf("%d",&num); /* 由用户输入 */ if(num%13==0) /* 如果输入的数是 的倍数,则执行下面的语句 */ printf("%d 是 的倍数 !\n",num); else /* 若输入的数不是 的倍数,则执行下面的语句 */ printf("%d 不是 的倍数 !\n",num); }编译、连接、运行程序,根据提示输入任意一个整数,按【Enter】键,即返回该整数是否为 13 的倍数。如下所示:
请输入一个整数:34
34 不是 的倍数 !
本范例中判定一个整数是否为 13 的倍数的方法是该数被 13 除,如果能除尽(即余数为零),就是 13 的倍数,否则,就不是 13 的倍数。
if 后面“()”内的表达式应该为关系或逻辑表达式,该例中是一个关系表达式,判断两数是否相等。如果在条件括号内只是单一的一个量,则C语言规定:以数值 0 表示“假”,以非 0 值表示“真”。因为在C语言中,没有表示“真”“假”的逻辑量。
C语言 if else 的嵌套形式
前两种形式的 if 语句一般都用于两个分支的情况。现实中的各种条件是很复杂的,在满足一定的条件下,又需要满足其他的条件才能确定相应的动作。因此,C语言提供了 if 语句的嵌套功能,即一个 if 语句能够在另一个 if 语句或 if-else 语句里,这种形式称作 if 语句的嵌套。if 语句嵌套的目的是解决多分支选择问题。嵌套有如下两种形式。
1) 嵌套在 else 分支中,形成 if-else-if 语句
其形式如下:
if (表达式1) 语句1;
else if (表达式2) 语句2;
else if (表达式3) 语句3;
...
else 语句n;

示例3
评价学生的成绩。按分数 score 输出等级:score≥90 为优,80≤score<90 为良,70≤score<80 为中等,60≤score<70 为及格,score<60 为不及格。#include<stdio.h> int main() { int score; printf("请输入成绩:"); scanf("%d",&score); /*由用户输入成绩*/ if(score>=90) /*判断成绩是否大于等于90*/ printf("\n优\n"); else if(score>=80) /*判断成绩是否大于等于80小于90*/ printf("\n良\n"); else if(score>=70) /*判断成绩是否大于等于70小于80*/ printf("\n中\n"); else if(score>=60) /*判断成绩是否大于等于60小于70*/ printf("\n及格\n"); else /*成绩小于60*/ printf("\n不及格\n"); }运行结果:
请输入成绩:67
及格
本范例中有 5 个分数段,所以 5 个输出语句只能有一个得到执行。是从高向低判断的,从 100 分开始判断,先考虑大于等于 90 分的情况,然后是小于 90 分的情况,再考虑大于等于 80 分的情况等,一直将所有的情况分析完毕。
如果我们从最低点 0 处开始判断,即先考虑小于 60 分的情况,再考虑大于等于 60 分的情况,程序分支部分可以改写为:
if(score<60) printf("\n 不及格 \n"); else if(score<70) printf("\n 及格 \n"); else if(score<80) printf("\n 中等 \n"); else if(score<90) printf("\n 良 \n"); else printf("\n 优 \n");注意:一般使用嵌套结构的if语句时,需注意合理地安排给定的条件,即符合给定问题在逻辑功能上的要求,又要增加可读性。
2) 嵌套在 if 分支中
其形式为:
if( 表达式 1)
if( 表达式 2)
语句1;
else
语句2;
else
语句3;

示例4
判断某学生的成绩 score 是否及格,如果及格是否达到优秀(score≥90)。#include<stdio.h> int main() { int score; printf("请输入该学生成绩:"); scanf("%d",&score); /*由用户输入成绩*/ if(score>=60) /*判断成绩是否大于等于60*/ if(score>=90) /*若大于60,是不是还大于等于90*/ printf("\n优秀\n"); else /*大于60,但小于90*/ printf("\n及格\n"); else /*小于60*/ printf("\n不及格\n"); }运行结果:
请输入该学生成绩:98
优秀
本范例中采用的是第 2 种嵌套形式,如果在 if 分支中嵌套的是只有 if 没有 else 的分支结构,就成了下面的情况。
if( 表达式 1)
if( 表达式 2)
语句1;
else
语句2;
if(score>60)
if(score>=90)
printf("\n 优秀 \n");
else
printf("\n 不及格 \n");
if(score>60)
{
if(score>=90)
printf("\n 优秀 \n");
else
printf("\n 不及格 \n");
}
if(score>60)
{
if(score>=90)
printf("\n 优秀 \n");
}
else
printf("\n 不及格 \n");
为了便于书写和阅读,可采用左对齐形式,而分支结构的内部语句部分右缩进两格,即相匹配的“if”和“else”左对齐,上下都在同一列上,这样显得层次清晰。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。