c语言中if语句嵌套的作用,if else语句,C语言if else用法完全攻略-程序员宅基地

技术标签: c语言中if语句嵌套的作用  

生活中的很多事情都是在满足一定条件下发生的,同样,程序中的“某操作语句”也是在满足一定逻辑条件下才执行的,这种语句称作条件语句,或称为“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 语句有两条执行分支。

17f2d2e7ece0d37bb2a1e7b0e15bd48c.png

图 1

if 分支结构通常用在:在数据有默认值或事件有默认操作的前提下,对特殊情况进行特殊处理的场景。

【例 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

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 体或 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 所示。

817e068e24df5ea5299238fa5586d444.png

图 2

由于表达式的值在逻辑上只有真和假,故 if 和 else 在执行流程上是互斥的,执行且只能执行两者中的一个。

【例 2】从键盘任意输入一个整数,求其绝对值并输出。

正整数和零的绝对值是其本身,负整数的绝对值是其相反数,所以求绝对值操作可分为该整数是正或负两种情况考虑,故可使用 if-else 结构实现。

#include

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

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

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 多分支结构的执行流程是:从前往后计算各个表达式的值,如果某个表达式的值为真,则执行对应的语句,并终止整个多分支结构的执行。如果上述所有表达式均不成立,即均为逻辑假时,则执行对应的 else 部分。else 部分可以省略,但一般情况下不省略。

该级联的多分支结构并非新的结构类型,而是 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 结构实现多分支的意义。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29290259/article/details/116977191

智能推荐

linux里面ping www.baidu.com ping不通的问题_linux桥接ping不通baidu-程序员宅基地

文章浏览阅读3.2w次,点赞16次,收藏90次。对于这个问题我也是从网上找了很久,终于解决了这个问题。首先遇到这个问题,应该确认虚拟机能不能正常的上网,就需要ping 网关,如果能ping通说明能正常上网,不过首先要用命令route -n来查看自己的网关,如下图:第一行就是默认网关。现在用命令ping 192.168.1.1来看一下结果:然后可以看一下电脑上面百度的ip是多少可以在linux里面ping 这个IP,结果如下:..._linux桥接ping不通baidu

android 横幅弹出权限,有关 android studio notification 横幅弹出的功能没有反应-程序员宅基地

文章浏览阅读512次。小妹在这里已经卡了2-3天了,研究了很多人的文章,除了低版本api 17有成功外,其他的不是channel null 就是没反应 (channel null已解决)拜托各位大大,帮小妹一下,以下是我的程式跟 gradle, 我在这里卡好久又没有人可问(哭)![image](/img/bVcL0Qo)public class MainActivity extends AppCompatActivit..._android 权限申请弹窗 横屏

CNN中padding参数分类_cnn “相同填充”(same padding)-程序员宅基地

文章浏览阅读1.4k次,点赞4次,收藏6次。valid padding(有效填充):完全不使用填充。half/same padding(半填充/相同填充):保证输入和输出的feature map尺寸相同。full padding(全填充):在卷积操作过程中,每个像素在每个方向上被访问的次数相同。arbitrary padding(任意填充):人为设定填充。..._cnn “相同填充”(same padding)

Maven的基础知识,java技术栈-程序员宅基地

文章浏览阅读790次,点赞29次,收藏28次。手绘了下图所示的kafka知识大纲流程图(xmind文件不能上传,导出图片展现),但都可提供源文件给每位爱学习的朋友一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长![外链图片转存中…(img-Qpoc4gOu-1712656009273)][外链图片转存中…(img-bSWbNeGN-1712656009274)]

getFullYear()和getYear()有什么区别_getyear和getfullyear-程序员宅基地

文章浏览阅读469次。Date对象取得年份有getYear和getFullYear两种方法经 测试var d=new Date;alert(d.getYear())在IE中返回 2009,在Firefox中会返回109。经查询手册,getYear在Firefox下返回的是距1900年1月1日的年份,这是一个过时而不被推荐的方法。而alert(d.getFullYear())在IE和FF中都会返回2009。因此,无论何时都应使用getFullYear来替代getYear方法。例如:2016年用 getFullYea_getyear和getfullyear

Unix传奇 (上篇)_unix传奇pdf-程序员宅基地

文章浏览阅读182次。Unix传奇(上篇) 陈皓 了解过去,我们才能知其然,更知所以然。总结过去,我们才会知道我们明天该如何去规划,该如何去走。在时间的滚轮中,许许多的东西就像流星一样一闪而逝,而有些东西却能经受着时间的考验散发着经久的魅力,让人津津乐道,流传至今。要知道明天怎么去选择,怎么去做,不是盲目地跟从今天各种各样琳琅满目前沿技术,而应该是去 —— 认认真真地了解和回顾历史。 Unix是目前还在存活的操作系_unix传奇pdf

随便推点

ACwing 哈希算法入门:_ac算法 哈希-程序员宅基地

文章浏览阅读308次。哈希算法:将字符串映射为数字形式,十分巧妙,一般运用为进制数,进制据前人经验,一般为131,1331时重复率很低,由于字符串的数字和会很大,所以一般为了方便,一般定义为unsigned long long,爆掉时,即为对 2^64 取模,可以对于任意子序列的值进行映射为数字进而进行判断入门题目链接:AC代码:#include<bits/stdc++.h>using na..._ac算法 哈希

VS配置Qt和MySQL_在vs中 如何装qt5sqlmysql模块-程序员宅基地

文章浏览阅读952次,点赞13次,收藏27次。由于觉得Qt的编辑界面比较丑,所以想用vs2022的编辑器写Qt加MySQL的项目。_在vs中 如何装qt5sqlmysql模块

【渝粤题库】广东开放大学 互联网营销 形成性考核_画中画广告之所以能有较高的点击率,主要由于它具有以下特点-程序员宅基地

文章浏览阅读1k次。选择题题目:下面的哪个调研内容属于经济环境调研?()题目:()的目的就是加强与客户的沟通,它是是网络媒体也是网络营销的最重要特性。题目:4Ps策略中4P是指产品、价格、顾客和促销。题目:网络市场调研是目前最为先进的市场调研手段,没有任何的缺点或不足之处。题目:市场定位的基本参数有题目:市场需求调研可以掌握()等信息。题目:在开展企业网站建设时应做好以下哪几个工作。()题目:对企业网站首页的优化中,一定要注意下面哪几个方面的优化。()题目:()的主要作用是增进顾客关系,提供顾客服务,提升企业_画中画广告之所以能有较高的点击率,主要由于它具有以下特点

爬虫学习(1):urlopen库使用_urlopen the read operation timed out-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏5次。以爬取CSDN为例子:第一步:导入请求库第二步:打开请求网址第三步:打印源码import urllib.requestresponse=urllib.request.urlopen("https://www.csdn.net/?spm=1011.2124.3001.5359")print(response.read().decode('utf-8'))结果大概就是这个样子:好的,继续,看看打印的是什么类型的:import urllib.requestresponse=urllib.r_urlopen the read operation timed out

分享读取各大主流邮箱通讯录(联系人)、MSN好友列表的的功能【升级版(3.0)】-程序员宅基地

文章浏览阅读304次。修正sina.com/sina.cn邮箱获取不到联系人,并精简修改了其他邮箱代码,以下就是升级版版本的介绍:完整版本,整合了包括读取邮箱通讯录、MSN好友列表的的功能,目前读取邮箱通讯录支持如下邮箱:gmail(Y)、hotmail(Y)、 live(Y)、tom(Y)、yahoo(Y)(有点慢)、 sina(Y)、163(Y)、126(Y)、yeah(Y)、sohu(Y) 读取后可以发送邮件(完..._通讯录 应用读取 邮件 的相关

云计算及虚拟化教程_云计算与虚拟化技术 教改-程序员宅基地

文章浏览阅读213次。云计算及虚拟化教程学习云计算、虚拟化和计算机网络的基本概念。此视频教程共2.0小时,中英双语字幕,画质清晰无水印,源码附件全课程英文名:Cloud Computing and Virtualization An Introduction百度网盘地址:https://pan.baidu.com/s/1lrak60XOGEqMOI6lXYf6TQ?pwd=ns0j课程介绍:https://www.aihorizon.cn/72云计算:概念、定义、云类型和服务部署模型。虚拟化的概念使用 Type-2 Hyperv_云计算与虚拟化技术 教改