if else语句,C语言if else用法完全攻略
生活中的很多事情都是在满足一定条件下发生的,同样,程序中的“某操作语句”也是在满足一定逻辑条件下才执行的,这种语句称作条件语句,或称为“if 语句”。使用 if 关键字,该“某操作语句”称为“if 体”或“条件语句体”。
显然,if 语句是一种分支结构,当条件满足时,有“执行该操作语句”和“跳过执行该操作语句”的两条分支。 if 语句的格式如下。
当 if 体中的语句多于一条时,要用
if 语句的执行流程图如图 1 所示。由图可见,if 语句有两条执行分支。
图 1
if 分支结构通常用在:在数据有默认值或事件有默认操作的前提下,对特殊情况进行特殊处理的场景。
【例 1】一公园门票正常价格是 80 元,老人(>60岁)或儿童(<10岁)门票半价。输出每个游客的年龄和门票价格。
本题属于票价有默认值,针对特殊群体(老人或儿童)对票价做特殊处理的情况,故可用 if 结构。
1) 定义整型变量 age 表示年龄,price 表示票价,并初始为默认票价 80 元。
2) 输入游客年龄,并进行判断,老人(age>60)、儿童(age<10),两者是逻辑“或”的关系,即:age>60||age<10。老人及儿童票价的特殊处理代码如下。
参考代码:
请输入您的年龄:35
您的年龄:35,票价:80
【运行结果2】游客年龄 6 岁,运行结果如下:
请输入您的年龄:6
您的年龄:6,票价:40
【运行结果3】游客年龄 72 岁,运行结果如下:
请输人您的年龄:72
您的年龄:72,票翁:40
if-else 语句的执行流程:首先判断关键词if后括号内条件表达式的值,如果该表达式的值为逻辑真(非 0),则执行 if 体(语句 A),而不执行 else 体(语句 B),然后继续执行 if-else 之后的其他语句;否则,若该表达式的值为逻辑假(0),则不执行该 if 体(语句 A),而执行 else 体(语句 B),然后继续执行 if-else 之后的其他语句。if-else 语句的执行流程图如图 2 所示。
图 2
由于表达式的值在逻辑上只有真和假,故 if 和 else 在执行流程上是互斥的,执行且只能执行两者中的一个。
【例 2】从键盘任意输入一个整数,求其绝对值并输出。
正整数和零的绝对值是其本身,负整数的绝对值是其相反数,所以求绝对值操作可分为该整数是正或负两种情况考虑,故可使用 if-else 结构实现。
请输入一个整数:3
3的绝对值是:3
【运行结果2】若输入 -5 回车,输出结果如下:
请输入一个整数:-5
-5的绝对值是:5
条件表达式的格式为:
说明:冒号前后对应于两个互斥的操作:语句 1 和语句 2。
条件表达式的执行流程与 if-else 相似:首先判断表达式的值,如果该值为真,则选择执行操作 1;否则,如果表达式的值为逻辑假,则选择执行操作 2。
条件表达式的结果参与运算时,如果表达式的值为真,则取操作 1 的结果作为整个条件表达式的值参与运算;否则,取操作 2 的结果作为整个条件表达式的值参与运算。
条件表达式与 if-else 的等价关系如下。
【例 3】分析以下程序的功能。
若条件表达式 n≥0 的值为真,即 n 非负时,则选择执行操作 1,把其本身 n 赋给 abs,即 abs=n。若 n≥0 为假,即 n<0 为负数,则选择执行操作 2,把 n 取反后赋给 abs,即
abs=-n。
注意:
1)在嵌套结构中会有多个“if”与多个“else”关键词,每一个“else”都应有对应的“if”相配对。原则:“else”与其前面最近的还未配对的“if”相配对。
2)配对的 if-else 语句可以看成一条简单语句。
3)一条 if 语句也可以看成一条简单语句。
【例 4】分析以下程序的运行结果。
【运行结果1】
Input a Integer:5
5 is greater than 0
【运行结果2】
Input a Integer:0
0 is equal to 0
【运行结果3】
Input a Integer:-3
-3 is less than 0
该级联的多分支结构并非新的结构类型,而是 if-else 嵌套结构的变形。
例如,分析如下的代码:
由于该结构中含有 else 关键字,故后面表达式已隐含排除了前面表达式的逻辑。因此,在设计该类结构中,应尽量避免不必要的重复包含,否则失去了使用该级联 else-if 结构实现多分支的意义。
显然,if 语句是一种分支结构,当条件满足时,有“执行该操作语句”和“跳过执行该操作语句”的两条分支。 if 语句的格式如下。
当 if 体中的语句多于一条时,要用
{}
把这些语句括起来形成一条复合语句,如下所示。
if (条件表达式)
{
复合语句A;
}
if (条件表达式)
简单语句A; //if体
if (a>6) //关系表达式,当 a>6 时表达式值为真,执行if体
Statement(s);
if (a||b) //逻辑表达式,只要a、b中有一个为真,结果为真,执行if体
Statement(s);
if (3-6) //算术表达式,只要该表达式的值非0,结果为真,执行if体
Statement(s);
/*关系、逻辑混合表达式,只要age>=60或age<=10其中一项为真,结果为真,执行if体*/
if (age>=60 ||age<=10)
Statement(s);
if 语句的执行流程图如图 1 所示。由图可见,if 语句有两条执行分支。
图 1
【例 1】一公园门票正常价格是 80 元,老人(>60岁)或儿童(<10岁)门票半价。输出每个游客的年龄和门票价格。
本题属于票价有默认值,针对特殊群体(老人或儿童)对票价做特殊处理的情况,故可用 if 结构。
1) 定义整型变量 age 表示年龄,price 表示票价,并初始为默认票价 80 元。
2) 输入游客年龄,并进行判断,老人(age>60)、儿童(age<10),两者是逻辑“或”的关系,即:age>60||age<10。老人及儿童票价的特殊处理代码如下。
if(age>=60||age<=10) price/=2;3)输出年龄及票价。
参考代码:
#include<stdio.h> int main (void) { int age,price=80; printf ("请输入您的年龄:"); scanf ("%d", &age); if (age>=60||age<=10) price/=2; printf("您的年龄:%d,票价:%d\n",age,price); return 0; }【运行结果1】游客年龄 35 岁,运行结果如下:
请输入您的年龄:35
您的年龄:35,票价:80
【运行结果2】游客年龄 6 岁,运行结果如下:
请输入您的年龄:6
您的年龄:6,票价:40
【运行结果3】游客年龄 72 岁,运行结果如下:
请输人您的年龄:72
您的年龄:72,票翁:40
if-else语句
if-else 语句的格式如下。当 if 语句体或 else 语句体中的语句多于一条时,要用{}
把这些语句括起来形成一条复合语句,如下所示。
if(条件表达式)
{
复合语句A; //if体
}
else
{
复合语句B; //else体
}
if(条件表达式)
简单语句A;//if体
else
简单语句B;//else体
if-else 语句的执行流程:首先判断关键词if后括号内条件表达式的值,如果该表达式的值为逻辑真(非 0),则执行 if 体(语句 A),而不执行 else 体(语句 B),然后继续执行 if-else 之后的其他语句;否则,若该表达式的值为逻辑假(0),则不执行该 if 体(语句 A),而执行 else 体(语句 B),然后继续执行 if-else 之后的其他语句。if-else 语句的执行流程图如图 2 所示。
图 2
由于表达式的值在逻辑上只有真和假,故 if 和 else 在执行流程上是互斥的,执行且只能执行两者中的一个。
【例 2】从键盘任意输入一个整数,求其绝对值并输出。
正整数和零的绝对值是其本身,负整数的绝对值是其相反数,所以求绝对值操作可分为该整数是正或负两种情况考虑,故可使用 if-else 结构实现。
#include<stdio.h> int main (void) { int n,abs; printf ("请输入一个整数:"); scanf ("%d",&n); if(n>=0) abs=n; else abs=-n; printf ("%d 的绝对值是:%d\n",n,abs); return 0; }【运行结果1】若输入 3 回车,输出结果如下:
请输入一个整数:3
3的绝对值是:3
【运行结果2】若输入 -5 回车,输出结果如下:
请输入一个整数:-5
-5的绝对值是:5
条件表达式
C 语言中提供了一种称为条件运算符或问号运算符的特殊运算符,该运算符是唯一要求三个操作数的运算符,即三目运算符。该操作符由“问号”和“冒号”两个符号构成,把三个操作数隔开,形成条件表达式。条件表达式的格式为:
表达式?语句1:语句2
条件表达式可实现与 if-else 语句相似的功能,即可根据表达式的值,选择执行两个操作中的其中一个。说明:冒号前后对应于两个互斥的操作:语句 1 和语句 2。
条件表达式的执行流程与 if-else 相似:首先判断表达式的值,如果该值为真,则选择执行操作 1;否则,如果表达式的值为逻辑假,则选择执行操作 2。
条件表达式的结果参与运算时,如果表达式的值为真,则取操作 1 的结果作为整个条件表达式的值参与运算;否则,取操作 2 的结果作为整个条件表达式的值参与运算。
条件表达式与 if-else 的等价关系如下。
if (表达式)
语句1;
else
语句2;
- 条件运算符?:的优先级高于赋值运算符=的优先级。
- 条件运算符的结合性是从右向左。
【例 3】分析以下程序的功能。
#include<stdio.h> int main(void){ int n,abs; printf ("请输入一个整数:"); scanf ("%d",&n); (n>=0)?(abs=n):(abs=-n); printf ("%d 的绝对值是:%d\n",n,abs); return 0; }该程序的功能是:从键盘输入一个整数,使用条件表达式语句,计算其绝对值,若该整数为非负,则其绝对值为其本身;若该整数为负,则其绝对值为其相反数。
若条件表达式 n≥0 的值为真,即 n 非负时,则选择执行操作 1,把其本身 n 赋给 abs,即 abs=n。若 n≥0 为假,即 n<0 为负数,则选择执行操作 2,把 n 取反后赋给 abs,即
abs=-n。
if 语句嵌套
以下情况均属于 if 结构嵌套。- if 语句体中可以含有 if 语句或 if-else 语句。
- if-else 语句中的 if 体或者 else 体中含有 if 语句或 if-else 语句。
注意:
1)在嵌套结构中会有多个“if”与多个“else”关键词,每一个“else”都应有对应的“if”相配对。原则:“else”与其前面最近的还未配对的“if”相配对。
2)配对的 if-else 语句可以看成一条简单语句。
3)一条 if 语句也可以看成一条简单语句。
【例 4】分析以下程序的运行结果。
#include<stdio.h> int main (void) { int n; printf ("Input a Integer:"); scanf ("%d",&n); if(n>=0) { if (n>0) printf ("%d is greater than 0\n",n); else printf ("%d is equal to 0\n",n); } else printf ("%d is less than 0\n",n); return 0; }1) 本题是在 if 体中嵌入if-else语句。先分析外层的 if-else 结构:
if(n>=0) { //该if体中包含:n>0和n=0两种情况 } else //该外层else体中只包含n<0的情况 printf ("%d is less than 0\n",n);2) 分析外层 if 体中嵌套的 if-else 结构。
if (n>=0) { if (n>0) //显式指出n>0情况 printf ("%d is greater than 0\n",n); else printf ("%d is equal to 0\n",n); }外层 if 体中包含 n>0 和 n=0 两种情况,而嵌套 if-else 结构中的 if 体已排除 n>0 情况,故 else 体为 n=0 的情况。
【运行结果1】
Input a Integer:5
5 is greater than 0
【运行结果2】
Input a Integer:0
0 is equal to 0
【运行结果3】
Input a Integer:-3
-3 is less than 0
级联else-if多分支语句
在程序设计中,经常使用级联的 if-else-if 实现多路分支结构。其基本结构如下。
if (条件表达式1)
语句1;
else if (条件表达式2)、
语句2;
...
else if (条件表达式n)
语句n;
else
语句n+1;
该级联的多分支结构并非新的结构类型,而是 if-else 嵌套结构的变形。
例如,分析如下的代码:
if(sc<60) printf ("不及格\n"); else if(sc<85) printf ("合格\n"); else printf ("优秀\n");把上述代码中嵌套的 if 语句与 else 写在同一行,并去掉所有的缩进,即变成如下形式。
if(sc<60) printf ("不及格\n"); else if(sc<85) printf ("合格\n"); else printf ("优秀\n");也就变形成为本节级联的 if-else-if 多分支结构。
由于该结构中含有 else 关键字,故后面表达式已隐含排除了前面表达式的逻辑。因此,在设计该类结构中,应尽量避免不必要的重复包含,否则失去了使用该级联 else-if 结构实现多分支的意义。