你好,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 = 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条件语句才能实现的功能。简化代码,就是条件操作符的最主要作用。

时间: 2024-08-02 11:26:04

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

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

4.2  条件选择语句 “老师,我这次四级考试过了没有?” 如果老师被问到这个问题,他会如何回答?是的,他会根据不同的条件选择不同的回答: 如果考试成绩大于等于60,那就回答:“恭喜你,你通过了这次考试”: 否则那就回答“很遗憾,你没有通过这次考试”. 这就是现实世界中的条件选择——根据不同的条件做出不同的动作.那么,在C++程序中,我们又该如何表达这种条件选择呢? 4.2.1  if语句:如果……就…… 在现实世界中,我们总是用“如果……,就……”的句式来表达条件选择,C++也向我们学习,提供

大学英语四级考试题型结构

自2013年12月考次起,全国大学英语四.六级考试委员会将对四.六级考试的试卷结构和测试题型作局部调整. 2015年英语四级考试题型包括四大部分:作文.听力理解.阅读理解.翻译. 一.题型结构 大学英语四级和六级的试卷结构.测试内容.测试题型.分值比例和考试时间如下表所示: 试卷结构 测试内容 测试题型 分值比例 考试时间 写作 写作 短文写作 15% 30分钟 听力理解 听力对话 短对话 单选题 8% 30分钟 长对话 单选题 7% 听力短文 短文理解 单选题 10% 短文听写 单词及词组听写

(转载)你好,C++(20).4.2.2 表达并列条件选择的switch语句:如果……如果……如果……

4.2.2  表达并列条件选择的switch语句:如果……如果……如果…… 在现实世界中,还有这样一类特殊的条件选择: 如果明天是晴天,我就穿T恤: 如果明天是阴天,我就穿衬衣: 如果明天是雨天,我就穿外套. 之所以说这是条件选择,是因为它根据不同的情况执行了不同的动作:而之所以说它特殊,是因为这些不同情况(晴天.阴天.雨天)属于同一条件(天气情况).只要是条件判断,我们就可以用if语句将其表达出来,利用前面介绍过的if…else if…并列条件选择语句,我们可以将这个看天穿衣的场景表达如下:

你好,C++(20)如果明天是晴天,我就穿T恤;如果明天是阴天,我就穿衬衣;如果明天是雨天,我就穿外套。——4.2.2 表达并列条件选择的switch语句:如果……如果……如果……

4.2.2  表达并列条件选择的switch语句:如果……如果……如果…… 在现实世界中,还有这样一类特殊的条件选择: 如果明天是晴天,我就穿T恤: 如果明天是阴天,我就穿衬衣: 如果明天是雨天,我就穿外套. 之所以说这是条件选择,是因为它根据不同的情况执行了不同的动作:而之所以说它特殊,是因为这些不同情况(晴天.阴天.雨天)属于同一条件(天气情况).只要是条件判断,我们就可以用if语句将其表达出来,利用前面介绍过的if…else if…并列条件选择语句,我们可以将这个看天穿衣的场景表达如下:

(转载)你好,C++(22) 排排坐,吃果果——4.3.3 for循环:某个范围内…每个都…

你好,C++(22) 排排坐,吃果果——4.3.3 for循环:某个范围内…每个都… 4.3.3  for循环:某个范围内…每个都… 既然while语句和do…while…语句都已经可以满足我们表达循环现象的需要,那为什么C++还要专门提供for语句来表达循环现象呢?在现实世界中,常常有这样一类特殊的循环现象,例如: 在公司100000个员工范围内,每个员工都增加10000元工资; 在从1到100这个范围内,每个数字都累加到总和中. 说这些是循环现象,是因为它们的动作(增加工资.累加)会循环往复

我的第一本C++书,目录

共分三篇十三章.这是总目录,细分到节: 1 /* 2 3 我的第一本C++书(游历C++世界的地图) 4 5 第1篇 叩开c++世界的大门 6 7 8 第1章 c++世界地图 9 1.1 c++是什么 10 1.2 c++的前世今生 11 1.2.1 从b到c 12 1.2.2 从c到c++ 13 1.2.3 从c++到.net framework的cli 14 1.2.4 最新标准c++0x让c++重新焕发活力 15 1.2.5 c++和c#不得不说的那点事儿 16 1.2.6 c++世界的五

两种设计模式的结合案例

摘要 本学期我学习了“设计模式-可复用面向对象软件的基础”这门课程,这次我采用的是命令模式+策略模式两种设计模式结合的案例. 分析的案例为:遥控器控制天花板上的吊扇,它有多种转动速度,当然也允许被关闭.假设吊扇速度:高.中.低 .关闭.采用安全模式+策略设计模式. 报告整体结构为:两种设计模式的分析.理解,类图,实例分析.代码分析,总结. 目录 第一章 命令模式+策略模式 1 1.1 命令模式 1 1.1.1 定义 1 1.1.2 命令模式的结构 1 1.1.3 角色 1 1.1.4 优点 2

设计模式DesignPattern(六)行为型模式(下)

状态模式 每个对象都有其对应的状态,而每个状态又对应一些相应的行为,如果某个对象有多个状态时,那么就会对应很多的行为.那么对这些状态的判断和根据状态完成的行为,就会导致多重条件语句,并且如果添加一种新的状态时,需要更改之前现有的代码.这样的设计显然违背了开闭原则,状态模式正是用来解决这样的问题的. 状态模式——允许一个对象在其内部状态改变时自动改变其行为,对象看起来就像是改变了它的类.具体的结构图如下所示: 示例代码 就以银行账户的状态来实现下状态者模式.银行账户根据余额可分为RedState.

条件判断之if、case语句和文件查找命令

一.脚本编程 1.if语句怎样用 人生面临许多选择,在编程世界里同样也有许多选择.同其他编程语言一样,当我们想写一个功能健壮的脚本时,通过条件判断来选择适合的操作尤为重要.在我们执行某些重要的操作之前,判断当前环境是否适合执行这一操作是非常重要的.我们可以用&&和||来做简单的判断,不过shell有更用的语句.shell有两种常见的条件选择语句if和case.我们先来看一下if该怎样用吧. if语句的单分支语法: if 条件判断 ;then;执行命令:fi [[email protecte