小白学C++ L9 if语句和switch语句

if 语句

语法:

if (成立条件表达式) {
当条件成立时需要执行的语句
}

  • 成立条件表达式:用圆括号包裹,一般是关系表达式或者逻辑表达式,比如:a<b, a<b && b<c
  • 如果条件成立(成立条件表达式的值为“1或True”),则执行语句;
  • 执行语句可以是一行代码,也可以是多行代码
    • 如果执行语句是多行代码,需要用大括号包裹;
    • 执行语句相比其他语句向右移动一些,就是缩进

if … else

if … else 用法:用来控制程序在指定条件下做事情A,否则做另外去做事情B。
在这里插入图片描述
语法:

if (成立条件表达式) {
当条件成立时需要执行的语句
} else {
当条件不成立时需要执行的语句
}

if… else if

if … else if 用法:有些时候,我们会遇到大于两个分支的复杂情况。这时候,我们需要用到 if … else if 语句,保证在多种情况下,不同条件成立时可以做不同的事情(如下图):
在这里插入图片描述
语法:

if (成立条件表达式1) {
当条件1成立时需要执行的语句
} else if (成立条件表达式2) {
条件1不成立但是条件2成立时需要执行的语句
} else {
当条件1和2都不成立时需要执行的语句
}

  • 成立条件表达式:关系或者逻辑表达式;
  • 最后的一个else:可以没有,你可以选择在条件1和条件2都不成立时,不做任何事情。

if … else if 延伸用法:如果情况需要分成不只三种,我们也可以在else后面再接if、else、if、else,依次判断每个条件是否成立,成立就执行对应的操作,否则就判断下一个条件是否成立:

if (成立条件表达式1) {
当条件1成立时需要执行的语句
} else if (成立条件表达式2) {
否则,当条件2成立时需要执行的语句
} else if (成立条件表达式3) {
否则,当条件3成立时需要执行的语句
} … else if (成立条件表达式n) {
否则,当条件n成立时需要执行的语句
} else {
当上述所有条件都不成立时需要执行的语句
}

练习:

#include <iostream>
using namespace std;
int main() {
    int age;
    cin >> age;

    if (age < 5)
        cout << "免票" << endl; 
    else if (age <= 12)
        cout << "7折票" << endl;
    else if (age >= 60)
        cout << "5折票" << endl;
    else
        cout << "全票" << endl;
    
    return 0;
}

if 语句嵌套

if 语句嵌套:对于条件成立或者不成立的情况下需要执行的语句里,再嵌入if语句表示新的分支。
用法:

  • 对于最外层的分支,每个分支需要执行的语句都可以再嵌入分支
  • 嵌入的这个分支可以以任何形式出现,可以是if,可以是if ... else,也可以是if ... else if
    举例:假设在条件1成立时,我们要通过条件2再进行分支,就可以这样写:

if (成立条件表达式1) {
if (成立条件表达式2) {
当条件1和2都成立时需要执行的语句
}
} else {
当条件1不成立时需要执行的语句
}

  • 注意点1:如果省略大括号,else默认会匹配到最近的那一个if
    举例:如果不加上大括号的话,下面程序会把最后的else和第二个if匹配起来,表达的就不是我们之前说的意思了。

if (成立条件表达式1)
if (成立条件表达式2) {
当条件1和2都成立时需要执行的语句
}
else {
当条件1不成立时需要执行的语句
}

  • 注意点2:if语句的嵌套会出现很多的大括号和缩进,所以为了代码的可读性,尽量避免非必要的多重if语句嵌套。
    练习:
#include <iostream>
using namespace std;

int main() {
    int age; 
    cin >> age; 

    double bill;
    cin >> bill;

    if (age >= 18) {
        cout <<  "允许进入" << endl;
        if (bill > 200) 
            cout  << "进门左转" << endl;
    }
    else {
        cout <<  "禁止进入" << endl; 
    }
    
    return 0;
}

判断是否为闰年:

#include <bits/stdc++.h>
using namespace std; 

int main() {
    int a;
    cin >> a;
    if (a % 4 == 0) {
        if (a % 100 == 0 && a % 400 != 0)
            cout << "no";
        else
            cout << "yes";
    }
    else
        cout << "no";
    return 0;
}

switch 语句

switch用于表示这样的分支结构:根据某个变量不同的值进行不同的操作。

语法:

switch (变量名) {
case 变量可能的情况1: 执行语句1; break;
case 变量可能的情况2: 执行语句2; break;

// 可以有任意数量的 case 语句
default: 执行语句n;
}

  • switch 后面的变量名:整型变量(比如int或者char),或者值为整型的表达式
  • 在一个switch中可以有任意数量的case语句。
  • 每个case后跟一个变量可能的值和一个冒号。这个变量可能的值必须与switch中的变量具有相同的数据类型,而且是一个常量,比如1,2,3或者‘A’,‘B’,‘C’或者‘1’,‘2’,‘3’等等。
  • 当switch后面的变量等于case后的常量时,case后跟的所有语句将被执行,直到遇到break语句为止。

break(难点):

  • 当遇到 break 语句时,switch 终止,控制流将跳转到整个 switch 语句后的下一行。
  • case后可以没有break, 如果某个case后没有break语句,程序就会接着往下执行。
    • 举个例子,假设 执行语句1之后没有 break,那么如果变量名 == 变量可能的情况1时,程序会执行执行语句1,然后接着执行 执行语句2,直到碰到break

default:一个switch语句可以有一个可选的default情况,出现在switch的结尾。default情况可用于上面所有case都不为真时执行。

#include <iostream>
using namespace std;
int main() {
    // 输入一个字符代表自己的名字
    char opt;
    cin >> opt;

    switch (opt) {
        // 如果opt=='6',执行完两句cout后,遇见break,就会跳出整个switch
        case '6': 
            cout << "主人你好!" << endl;
            cout << "今天你想吃什么" << endl;
            break;
        case '1': 
            cout << "小一你好!" << endl;
            cout << "今天天气怎么样?" << endl;
            break;
        case '2': 
            cout << "你有什么需要帮助的吗?" << endl; 
            break;
        // 如果opt=='4',由于'4'的 case 后面没有 break
        // 所以会往下执行'5'的 case 后面的语句,直到遇到 break
        case '4': case '5':
            cout << "我不想跟你说话" << endl;
            break;
        default: 
            cout << "我不太清楚你是谁..." << endl;
    }
}

Tips:对比这个场景下if和switch的用法:

  • 如果用if来写会有如下的缺点:
    • 需要很多 opt == '1' 这样的关系表达式
    • 一个分支下如果有多条语句,就需要加上大括号
  • 相比之下,switch就比较简洁。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值