if else语句C语言if else用法完全攻略.docx
《if else语句C语言if else用法完全攻略.docx》由会员分享,可在线阅读,更多相关《if else语句C语言if else用法完全攻略.docx(9页珍藏版)》请在冰豆网上搜索。
ifelse语句C语言ifelse用法完全攻略
ifelse语句,C语言ifelse用法完全攻略
生活中的很多事情都是在满足一定条件下发生的,同样,程序中的“某操作语句”也是在满足一定逻辑条件下才执行的,这种语句称作条件语句,或称为“if语句”。
使用if关键字,该“某操作语句”称为“if体”或“条件语句体”。
显然,if语句是一种分支结构,当条件满足时,有“执行该操作语句”和“跳过执行该操作语句”的两条分支。
if语句的格式如下。
当if体中的语句多于一条时,要用 {} 把这些语句括起来形成一条复合语句,如下所示。
if(条件表达式)
{
复合语句A;
}
当if体为一条简单语句时,可以省略{},即:
if(条件表达式)
简单语句A;//if体
该条件表达式可以是关系表达式、逻辑表达式、算术表达式或混合表达式等。
只要其值为真或非零均执行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语句的执行流程:
首先判断关键词if后括号内条件表达式的值,如果该表达式的值为逻辑真(非0),则执行if体,接着执行if体后的其他语句;否则,若该表达式的值为逻辑假(0),则不执行该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。
老人及儿童票价的特殊处理代码如下。
1.if(age>=60||age<=10)
2.price/=2;
3)输出年龄及票价。
参考代码:
1.#include
2.intmain(void)
3.{
4.intage,price=80;
5.printf("请输入您的年龄:
");
6.scanf("%d",&age);
7.if(age>=60||age<=10)
8.price/=2;
9.printf("您的年龄:
%d,票价:
%d\n",age,price);
10.return0;
11.}
【运行结果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体或else体为一条简单语句时,可以省略{},即:
if(条件表达式)
简单语句A;//if体
else
简单语句B;//else体
同if语句一样,条件表达式可以是关系表达式、逻辑表达式、算术表达式或混合表达式等。
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结构实现。
1.#include
2.intmain(void)
3.{
4.intn,abs;
5.printf("请输入一个整数:
");
6.scanf("%d",&n);
7.if(n>=0)
8.abs=n;
9.else
10.abs=-n;
11.printf("%d的绝对值是:
%d\n",n,abs);
12.return0;
13.}
【运行结果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】分析以下程序的功能。
1.#include
2.intmain(void){
3.intn,abs;
4.printf("请输入一个整数:
");
5.scanf("%d",&n);
6.(n>=0)?
(abs=n):
(abs=-n);
7.printf("%d的绝对值是:
%d\n",n,abs);
8.return0;
9.}
该程序的功能是:
从键盘输入一个整数,使用条件表达式语句,计算其绝对值,若该整数为非负,则其绝对值为其本身;若该整数为负,则其绝对值为其相反数。
若条件表达式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】分析以下程序的运行结果。
1.#include
2.intmain(void)
3.{
4.intn;
5.printf("InputaInteger:
");
6.scanf("%d",&n);
7.if(n>=0)
8.{
9.if(n>0)
10.printf("%disgreaterthan0\n",n);
11.else
12.printf("%disequalto0\n",n);
13.}
14.else
15.printf("%dislessthan0\n",n);
16.return0;
17.}
1)本题是在if体中嵌入if-else语句。
先分析外层的if-else结构:
1.if(n>=0)
2.{
3.//该if体中包含:
n>0和n=0两种情况
4.}
5.else//该外层else体中只包含n<0的情况
6.printf("%dislessthan0\n",n);
2)分析外层if体中嵌套的if-else结构。
1.if(n>=0)
2.{
3.if(n>0)//显式指出n>0情况
4.printf("%disgreaterthan0\n",n);
5.else
6.printf("%disequalto0\n",n);
7.}
外层if体中包含n>0和n=0两种情况,而嵌套if-else结构中的if体已排除n>0情况,故else体为n=0的情况。
【运行结果1】
InputaInteger:
5
5isgreaterthan0
【运行结果2】
InputaInteger:
0
0isequalto0
【运行结果3】
InputaInteger:
-3
-3islessthan0
级联else-if多分支语句
在程序设计中,经常使用级联的if-else-if实现多路分支结构。
其基本结构如下。
if(条件表达式1)
语句1;
elseif(条件表达式2)、
语句2;
...
elseif(条件表达式n)
语句n;
else
语句n+1;
该级联的if-else-if多分支结构的执行流程是:
从前往后计算各个表达式的值,如果某个表达式的值为真,则执行对应的语句,并终止整个多分支结构的执行。
如果上述所有表达式均不成立,即均为逻辑假时,则执行对应的else部分。
else部分可以省略,但一般情况下不省略。
该级联的多分支结构并非新的结构类型,而是if-else嵌套结构的变形。
例如,分析如下的代码:
1.if(sc<60)
2.printf("不及格\n");
3.else
4.if(sc<85)
5.printf("合格\n");
6.else
7.printf("优秀\n");
把上述代码中嵌套的if语句与else写在同一行,并去掉所有的缩进,即变成如下形式。
1.if(sc<60)
2.printf("不及格\n");
3.elseif(sc<85)
4.printf("合格\n");
5.else
6.printf("优秀\n");
也就变形成为本节级联的if-else-if多分支结构。
由于该结构中含有else关键字,故后面表达式已隐含排除了前面表达式的逻辑。
因此,在设计该类结构中,应尽量避免不必要的重复包含,否则失去了使用该级联else-if结构实现多分支的意义。