你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句
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 = ;
cout<<"请输入考试成绩:";
// 输入考试成绩
cin>>nScore;
// 对条件表达式进行计算,判断考试成绩是否符合条件(大于等于60)
// 如果nScore的值大于等于60,符合条件,条件表达式的值为true,
// 则直接进入if分支执行,输出考试通过的提示
if(nScore >= )
{
// 执行符合条件的动作
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 >= )
{
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的值,如果其值为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 = ;
if(nScore >= ) // 第一个条件表达式为true,进入执行并直接结束整个语句
{
cout<<"恭喜你,你通过了这次考试"<<endl;
}
// 因为第一个分支已经执行并结束了整个语句
// 所以即使第二个条件表达式也为true,但却并不会得到执行
else if(nScore >= )
{
cout<<"厉害,你的成绩是优秀"<<endl;
}
所以在使用并列条件选择语句时,应避免条件范围的相互重复覆盖,不要让多个条件表达式同时为true,以免造成程序逻辑上的混乱。
知道更多:用“?:”条件操作符来表达条件判断,简化代码
所谓条件操作符,它可以让一个表达式根据不同的条件拥有不同的值。它是C++中唯一一个三元操作符,其语法格式如下:
条件表达式 ? 表达式1 : 表达式2
跟条件语句类似,在执行的时候,它会首先计算其中的条件表达式的值,如果其值为true,就会接着计算表达式1的值,并将其作为整个表达式的最终结果值。反之,则会计算表达式2的值,同样作为整个表达式的最终结果值。
利用条件操作符,我们可以简便地实现一些比较简单的(要同时对条件成立和不成立的情况都进行处理,且处理的过程比较简单)条件选择的功能,从而达到简化代码的目的。例如,我们要从两个数中选出较大的一个,使用if条件语句进行大小比较,可以实现为:
int a,b;
// 输入a,b…
int m = ;
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条件语句才能实现的功能。简化代码,就是条件操作符的最主要作用。
你好,C++(19)“老师,我这次四级考试过了没有?”——4.2 条件选择语句的更多相关文章
- 你好,C++(20).4.2.2 表达并列条件选择的switch语句:如果……如果……如果……
4.2.2 表达并列条件选择的switch语句:如果……如果……如果…… 在现实世界中,还有这样一类特殊的条件选择: 如果明天是晴天,我就穿T恤: 如果明天是阴天,我就穿衬衣: 如果明天是雨天,我就 ...
- [19/09/16-星期一] Python的运算符和条件判断语句
一.运算符 (1)算术运算符 + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作) a = 10 + 5 计算 a = 'hello' + ' ' + 'world' 拼串 - ...
- 被迫重构代码,这次我干掉了 if-else
本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近公司貌似融到资了!开始发了疯似的找渠道推广,现在终于明白为啥前一段大肆的招人了,原来是在下一盘大棋,对员工总的来 ...
- C/C++知识点清单01
第一章 C/C++程序基础 一.一般赋值语句: 考察一般赋值语句的概念和方法. 1.程序: #include<stdio.h> int main(void) { ,y,z; x*=(y=z ...
- python基础(二)条件判断、循环、格式化输出
继续上一篇,今天主要总结一下条件判断.循环.格式化输出 一.条件判断 python中条件判断使用if else来判断,多分支的话使用if elif ... else,也就是如果怎么怎么样就怎么怎么样, ...
- DesignPattern(六)行为型模式(下)
状态模式 每个对象都有其对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新 ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- c#设计模式介绍
序号 模式名称 模式描述 应用场景 例子 1 单例模式 (SigletonPattern) 保证一个类仅有一个实例,并提供一个访问它的全局访问点. • 单例类只能有一个实例. • 单例类必须自己创建自 ...
- python设计模式
本节内容 设计模式介绍 设计模式分类 设计模式6大原则 1.设计模式介绍 设计模式(Design Patterns) --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复 ...
随机推荐
- phpcms v9教程 联动搜索在房地产网站开发中的应用
开发简述:使用phpcms v9系统,修改源文件5个,创建模型:楼盘.出售.出租.中介.小区,增加联动菜单:楼盘,增加用户组:房产中介.实现功能:游客发布信息.会员申请中介.楼盘全方位展示.报名团购. ...
- PHPCMSV9 更换域名后,要做的操作
修改/caches/configs/system.php里面所有和域名有关的,把以前的老域名修改为新域名. 进入后台设置-->站点管理,对相应的站点的域名修改为新域名. 点击后台右上角的&quo ...
- 破解tumblr背景音乐
http://sex.tumblr.com/api/read/json?callback=streampadPlayerBlogV2.getAudioResponse&type=audio&a ...
- iOS开发——C篇&函数解析
关于函数,作为一个开发者事必须掌握的知识不管你在那一个领域,所以今天我就来说一说函数. 一:函数的介绍 关于函数,其实笔者在前面都已经演示不少了,其中用的最多的就是main函数,虽然直接说函数可能不太 ...
- d023: 各位数字之和
内容: 求输入的一个整数的各位数字之和 输入说明: 一行一个整数 输出说明: 一个整数 输入样例: 2147483646 输出样例 : 45 #include <stdio.h> int ...
- SVM详解
SVM入门(一)至(三)Refresh 按:之前的文章重新汇编一下,修改了一些错误和不当的说法,一起复习,然后继续SVM之旅. (一)SVM的简介 支持向量机(Support Vector Machi ...
- ui router digest 10 time
refer : https://github.com/angular-ui/ui-router/issues/600 $urlRouterProvider.when("/", &q ...
- HDU5029--Relief grain (树链剖分+线段树 )
题意:n个点构成的无根树,m次操作, 对于操作 x y z, 表示 x 到 y 路径上的 每个点 加一个 z 数字,可重复加.最后输出每个点 加的次数最多的那个数字,如果没有输出0. 赤裸裸的树链剖分 ...
- python游戏编程——跟13岁儿童学编程
python爬虫基本告一段落,琢磨搞点其他的,正好在网上看到一个帖子,一个外国13岁小朋友用python写的下棋程序,内容详细,也有意思,拿来练手. 13岁啊.. 我这年纪还在敲 dir啥的吧 想到原 ...
- 设置MyEclipse的右击新建后面的选项
转自:http://blog.sina.com.cn/s/blog_929b09ac010197g6.html,做了修改 最近发现在MyEclipse右击后,新建后面的菜单选项太少了,新建一个文件,还 ...