【共读Primer】36.[5.3]条件语句 Page156

条件语句,又称为流程控制语句,是变成过程中,代码分支所必须的。

用来表现逻辑结构的分支。

条件语句共有以下几种:

if语句

它的完全展开形式如下:

if (condition) 
    statement
else if(condition)
    statment
else if(condition)
    statment
else
    statment

代码运行过程也很简单。

从上到下判断每一个条件,如果符合条件则执行相应的statment,如果都不符合,则执行最后else部分的statment。

#include <vector>
#include <string>
#include <iostream>
using std::vector;
using std::string;
using std::cin;

int main()
{
    const vector<string> scores = {"F", "D", "C", "B", "A", "A++"};
    string lettergrade;
    int grade = 0;
    cin >> grade;
    // if(grade < 60)
    //     lettergrade = scores[0];
    // else
    //     lettergrade = scores[(grade-50)/10];
    // 
    // if (grade %10 > 7)
    //     lettergrade += "+";
    // else if(grade %10 < 3)
    //     lettergrade += "-";
    
    if(grade < 60) // 成绩不合格则不需要考虑末尾+-号问题
        lettergrade = scores[0];
    else    // 成绩合格需要考虑添加+-号问题
    {
        lettergrade = scores[(grade - 50)/10]; // 转换为字母形式的成绩
        if(grade != 100)    // 不是A++才需要考虑添加+-号问题
            if (grade %10 > 7)
                lettergrade += "+"; // 个位是8、9的成绩添加+
            else if(grade % 10 < 3)
                lettergrade += "-"; // 个位是0、1、2的成绩添加-号
    }
}

上面展示的代码是一个成绩统计分级显示的代码。

我们需要注意的部分有几个,

首先外层的else添加了花括号,这个是用来在一个语句块中添加多条语句。

然后是循环嵌套,在else中再次使用了if else结构,注意缩进。

最后一个问题是,内部嵌套的if中没有else结构,这种结构叫做悬垂else ,一般开发中不建议使用悬垂else

switch语句

switch也是一种条件分支结构,基本形式如下:

#include <vector>
#include <string>
#include <iostream>
using std::vector;
using std::string;
using std::cin;

int main()
{
    unsigned int aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0;
    char ch = '\0';
    switch(cin >> ch)
    {
        case 'a':
            ++aCnt;
            break;
        case 'e':
            ++eCnt;
            break;
        case 'i':
            ++iCnt;
            break;
        case 'o':
            ++oCnt;
            break;
        case 'u':
            ++uCnt;
            break;
        default:
        
            break;
    }
}

上面的代码是一个元音字母统计的部分展示。

在上面的代码中我们需要读懂的有几点

首先,switch后面的括号中表达式被求值后用于比较。

其次,case标签后面跟的必须是整型的常量或常量表达式,并且没有case值之间不能有重复。

再次,上述代码中每个case都配合有一个break,但是这个break不是必须的,我们需要掌握的是从匹配到标签开始直到运行到break或语句块结束,这个switch运行规律。

比如以下这段程序表达了统计所有原因字母的数量,而不单个统计

#include <vector>
#include <string>
#include <iostream>
using std::vector;
using std::string;
using std::cin;

int main()
{
    unsigned int vowelCnt = 0;
    char ch = '\0';
    switch(cin >> ch)
    {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            ++vowelCnt;
            break;
        default:
        
            break;
    }
}

最后,我们需要了解的是default标签,当没有匹配到任何一个case并且有default标签的情况下,则会运行default标签。

 

转载于:https://www.cnblogs.com/ChattyKu/p/9552278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值