4.2  条件选择语句

“老师,我这次四级考试过了没有?”

如果老师被问到这个问题,他会如何回答?是的,他会根据不同的条件选择不同的回答:

如果考试成绩大于等于60,那就回答:“恭喜你,你通过了这次考试”;

否则那就回答“很遗憾,你没有通过这次考试”。

这就是现实世界中的条件选择——根据不同的条件做出不同的动作。那么,在C++程序中,我们又该如何表达这种条件选择呢?

4.2.1  if语句:如果……就……

在现实世界中,我们总是用“如果……,就……”的句式来表达条件选择,C++也向我们学习,提供了if(如果)关键字来形成条件选择结构,用以表达现实世界中的条件选择,其语法格式如下:

if ( 条件表达式 )
{语句1;
}
else
{语句2;
}

C++在执行if条件选择语句时,首先会计算其中条件表达式的值,然后根据其值的不同选择执行不同的代码。如果条件表达式的值为true,则直接向下执行语句1;反之,则进入else分支执行语句2。通过使用条件选择语句,可根据条件表达式的不同值而改变程序执行的路径,可以在语句1和语句2中实现不同的功能,从而达到“根据不同的条件执行不同的动作”的目的。if语句的执行过程如图4-1所示。

现在,就可以用if语句来解决上面这个“四级考试过了没有”的现实问题:

// 以考试成绩作为条件
int nScore = 0;
cout<<"请输入考试成绩:"; // 输入考试成绩 cin>>nScore; // 对条件表达式进行计算,判断考试成绩是否符合条件(大于等于60) // 如果nScore的值大于等于60,符合条件,条件表达式的值为true, // 则直接进入if分支执行,输出考试通过的提示 if(nScore >= 85) { // 执行符合条件的动作 cout<<"恭喜你,你通过了这次考试"<<endl; } else // 如果不符合条件,条件表达式的值为false,则进入else分支执行 { // 执行不符合条件的动作 cout<<"很遗憾,你没有通过这次考试"<<endl; }

图4-1  条件选择结构的执行流程

在这里,首先让用户输入考试成绩,然后在if语句的条件表达式中,将其跟一个标准值进行比较,也就是判断考试成绩是否符合条件。如果考试成绩大于等于60,则条件表达式的值为true,这就意味着符合条件,程序会进入if分支执行,输出考试通过的提示语言。反之,如果考试成绩小于60,条件不能满足,条件表达式的值为false,程序则会进入else分支执行,输出考试没有通过的提示语。这样就让程序根据不同的条件(nScore大于等于60与否)做出了不同的动作(输出不同的提示语)。

if语句的形式虽然简单,但是在其使用上有如下几个需要注意的地方。

1. 如果没有必要, if语句中的else分支可以省略

很多时候,我们只关心条件为true时的情况,只对符合条件的情况进行处理,这时就可以省略else分支,仅保留if对条件表达式进行判断以及其后的语句1对符合条件的情况进行处理。例如,我们只对通过考试的人进行提示,而对于没有通过考试的人的,则直接忽略,用if语句表达出来就是:

// 省略else分支,只对符合条件的情况进行处理
if( nScore >= 60 )
{cout<<"恭喜你,你通过了这次考试"; }

2.  if语句可以嵌套以表达多层次的条件判断

在一个if语句中可以嵌套另一个if语句,表示在某个前提条件下做进一步的条件判断,从而表达多层次的条件判断。例如,要比较输入的v1和v2两个数的大小关系,我们需要先判断两者是否相等,在不相等的前提条件下,再继续判断两者之间的大小关系,用嵌套的if语句将其表达出来就是:

cout << "请输入两个整数:" << endl;
int v1, v2; // 获取用户输入的数字 cin >> v1 >> v2; if( v1 != v2 ) // 判断v1和v2是否相等,如果不相等,则继续判断大小 { // 第二级if语句 // 如果不相等,则继续判断v1是否大于v2 if( v1 > v2 ) // 大于  { cout<<" v1 > v2 "<<endl; } else // 小于  { cout<<" v1 < v2 "<<endl; } } else // v1和v2相等 { cout<<" v1 == v2 "<<endl; }

3.  if语句可以并列

如果同一层次的条件有多种情况,就可以使用并列的条件选择语句来实现。其语法格式如下:

if ( 条件表达式1 )
{语句1;
}
else if ( 条件表达式2 )
{语句2;
}
// … else if ( 条件表达式n ) { 语句n; } else { 语句n+1; }

在执行的时候,会首先计算条件表达式1的值,如果其值为true,则进入其分支执行语句1,然后结束整个并列条件选择语句的执行;如果其值为false,则会继续向下计算条件表达式2的值,同样的,如果其值为true,则进入其分支执行语句2,然后结束整个语句,如果其值为false,则继续向下进行同样的计算过程。直到最后,如果所有的条件分支都无法满足,则进入最后的else分支执行并结束整个语句。例如,我们在前面用嵌套的if语句实现的比较v1和v2的大小比较,实际上是三种相互并列的情况:要么是大于,要么是小于,要么是等于。所以,同样也可以用并列的条件结构来实现:

if(v1 > v2) // 首先判断v1是否大于v2
{cout<<" v1 > v2"<<endl; } else if(v1 < v2) // 如果第一个条件不满足,再判断v1是否小于v2 { cout<<" v1 < v2"<<endl; } else // 如果v1既不大于v2,也不小于v2,那就必然是等于v2 { cout<<" v1 == v2"<<endl; }

这里需要注意的是,并列条件语句在执行的时候,会逐个依次向下计算其中并列的条件表达式,直到某个条件表达式为true,然后才进入其分支执行并结束整个语句。所以,我们总是把满足几率比较高的条件判断放在比较靠前的位置,希望if语句一开始就遇到满足条件的分支,以避免对那些不易满足的条件判断的无用计算。

另外需要注意的是,并列条件选择语句只会执行其中的某一个分支,如果多个条件表达式都为true,则只会执行从上到下遇到的第一个条件表达式为true的分支。例如:

int nScore = 91;
if(nScore >= 60) // 第一个条件表达式为true,进入执行并直接结束整个语句 { cout<<"恭喜你,你通过了这次考试"<<endl; } // 因为第一个分支已经执行并结束了整个语句 // 所以即使第二个条件表达式也为true,但却并不会得到执行 else if(nScore >= 85) { cout<<"厉害,你的成绩是优秀"<<endl; }

所以在使用并列条件选择语句时,应避免条件范围的相互重复覆盖,不要让多个条件表达式同时为true,以免造成程序逻辑上的混乱。

知道更多:用“?:”条件操作符来表达条件判断,简化代码

所谓条件操作符,它可以让一个表达式根据不同的条件拥有不同的值。它是C++中唯一一个三元操作符,其语法格式如下:

条件表达式 ? 表达式1 : 表达式2

跟条件语句类似,在执行的时候,它会首先计算其中的条件表达式的值,如果其值为true,就会接着计算表达式1的值,并将其作为整个表达式的最终结果值。反之,则会计算表达式2的值,同样作为整个表达式的最终结果值。

利用条件操作符,我们可以简便地实现一些比较简单的(要同时对条件成立和不成立的情况都进行处理,且处理的过程比较简单)条件选择的功能,从而达到简化代码的目的。例如,我们要从两个数中选出较大的一个,使用if条件语句进行大小比较,可以实现为:

int a,b;
// 输入a,b…
int m = 0; if(a > b) { m = a; } else { m = b; }

而如果是使用条件操作符,以上的条件选择用一条语句就实现了:

int a,b;
// 输入a,b…
int m = (a>b)?a:b;

在执行“(a>b)?a:b”的时候,同样会先计算“(a>b)”的值,如果a的值比较大,也就是条件表达式的值为true,则会以第二个操作数a作为整个表达式的值,然后赋值给m。这样,m就成了两个数中较大的一个。反过来,如果b的值比较大,则条件表达式的值为false,就会以第三个操作数b作为整个表达式的值,最后赋值给m,此时m仍然是两个数中较大的一个。由此可见,短短的一条语句就实现了原来需要整个if条件语句才能实现的功能。简化代码,就是条件操作符的最主要作用。

原文地址:http://www.cnblogs.com/nihaoCPP/p/4091693.html

转载于:https://www.cnblogs.com/wodehao0808/p/4211087.html

(转载)你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句...相关推荐

  1. 大学英语四级考试必读必备

    文章目录: 一:真题 二:考试时间普及 三:四级考试流程 四:英语四级题型分值分布 五:常用资源 1.web 2.ap 六:Learning video 1.全套 2.听力 3.语法 4.单词 5.阅 ...

  2. 计算机四级考什么好一点,怎样通过计算机四级考试(强力推荐)

    怎样通过计算机四级考试(强力推荐) 第四,在一篇论述文章中要有个中心,还要有一些分支性论点.如果每段中的原理主题句都说得非常明确,让人觉得思路也非常清晰,那么,评卷老师就容易评高分.因此,原理分论点和 ...

  3. 计算机四级考试操作系统单元题,计算机四级考试操作系统单选练习

    计算机四级考试操作系统单选练习 关于基础,我们不能不巩固好,只有底子好,才能获得高分.下面是小编为大家搜集整理出来的有关于计算机四级考试操作系统单选练习,希望可以帮助到大家! 操作系统单选题 1下列选 ...

  4. 每个家庭将有一台计算机英语,2011年6月英语四级考试模拟试题及答案9

    2011年6月英语四级考试模拟试题及答案9 来源:中华考试网   2011-06-14   [大 中 小] KEY Part I Global Warming In these times, peop ...

  5. python四级考试_四级英语考试如何准备呢?

    这个回答已帮助不少同学顺利过级,其中不乏500+.600+的,说明实用性已被验证,备考6月四级考试的同学可放心使用! 其实呀,很多同学没过四级,不是因为自身实力不够,而是因为考试流程不合理,而自己考前 ...

  6. Python处理大学英语四级考试数据(Excel文件)案例一则

    推荐图书: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷,7月第3次印刷 京东购买链接:https://i ...

  7. 2016版excel_Python处理大学英语四级考试数据(Excel文件)案例一则

    推荐图书:<Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),清华大学出版社,2020年6月第1次印刷,7月第3次印刷 京东购买链接:https://it ...

  8. python四级考试_利用Python来教你通过英语四六级!成功率95%!太牛了!

    现在是考试季吧,风华正茂的青年才俊们应该已经在图书馆占好了座位,开始备战 12 月份的英语四六级考试了吧!想当年,pk 哥四级考试前也在图书馆待了一阵子,后来四级考了 450 分惊险过关,六级考试第一 ...

  9. 07年12月大学英语四级考试B卷答案(新东方版)

    2007年12月22日四级考试听力部分答案(B卷) 1-7 CBDADBC 8. changes in the visa process 9. take their knowledge and ski ...

最新文章

  1. 使用C# 3.0编译器编译 Asp.Net 项目代码
  2. 笑死,别再黑程序员了好吗? | 每日趣闻
  3. XMPP文件传输协议笔记
  4. 滴滴高管今年集体不拿年终奖 员工奖励力度缩减一半
  5. 分布式事务的解决方案
  6. VC++连MySQL小记
  7. 自制操作系统学习笔记(3)-INT 0x10软中断显示字符串
  8. (常用API)正则表达式的概念和作用
  9. Windows server 2008R2 DHCP服务器
  10. nvml.dll 英伟达公司提供的动态库用途
  11. mysql8用户管理
  12. [Leetcode][第133题][JAVA][克隆图][DFS][BFS][深拷贝]
  13. 中resource文件夹的作用_冲突与碰撞:OpenStack中的虚拟机和裸机
  14. telnet服务下载 Linux,linux telnet服务安装包
  15. 2021年中国独立眼科超声系统市场趋势报告、技术动态创新及2027年市场预测
  16. php markdown 电子书_PHP Markdown转PDF解决方案
  17. VS2008下编译C++程序,找不到 stdint.h,原因及解决方案
  18. Django+MySQLDB配置
  19. C#学习笔记之线程 - 使用线程
  20. swift. 扩展类添加属性_IOS_Swift中用到extension的一些基本的扩展功能讲解,现有的类,结构或枚举类型的 - phpStudy...

热门文章

  1. 智能指针——weak_ptr
  2. Python3 注释
  3. java 用户日志_2020年阿里巴巴最全Java、架构师、大数据、算法PPT技术栈图册
  4. spring 中 Hibernate 事务和JDBC事务嵌套问题
  5. JAVA的内省机制(introspector)与反射机制(reflection)
  6. Index of Test
  7. [UE4]给Widget增加参数,Pre Construct和Construct的区别
  8. Time Series Analysis
  9. UnityShader之Shader格式篇【Shader资料1】
  10. 【开源】.Net Api开放接口文档网站