C++ 入门到放弃 05:控制程序流程 if & 循环


一、if…else if…else

循环这里写过代码的都知道吧,直接上案例,熟悉一个 C++ 风格的判断语法:

#include <iostream>

using namespace std;

int main() {
    float num1 = 0, num2 = 0, result;

    std::cout << "请输入第一个数字:";
    std::cin >> num1;
    std::cout << "请输入第二个数字:";
    std::cin >> num2;

    char mode_num = '\0';

    std::cout << "请输入计算类型(+ - * /)" << std::endl;
    std::cin >> mode_num;

    if (mode_num == '+')
        result = num1 + num2;
    else if (mode_num == '-')
        result = num1 - num2;
    else if (mode_num == '*')
        result = num1 * num2;
    else if (mode_num == '/')
        result = num1 / num2;
    else
        result = -1;

    std::cout << "计算结果:" << result << std::endl;

    return 0;
}

输出:

请输入第一个数字:11
请输入第二个数字:22
请输入计算类型(+ - * /)
*
计算结果:242
二、使用 switch-case 进行条件处理

语法规则:

switch(expression){
    case constant-expression  :
       statement(s);
       break; // 可选的
    case constant-expression  :
       statement(s);
       break; // 可选的
  
    // 您可以有任意数量的 case 语句
    default : // 可选的
       statement(s);
}

其中:expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。

#include <iostream>
using namespace std;


char get_source_level(int stu_source) {
    if (stu_source >= 90)
        return 'A';
    else if (stu_source >= 80)
        return 'B';
    else if (stu_source >= 60)
        return 'C';
    else
        return 'D';
}

int main() {
    int stu_source = 0;
    std::cout << "请输入你的分数:";
    std::cin >> stu_source;

    char source_level = get_source_level(stu_source);

    switch (source_level) {
        case 'A' :
            cout << "很棒!" << endl;
            break;
        case 'B':
            cout << "Super Cool!" << endl;
            break;
        case 'C':
            cout << "勉强及格" << endl;
            break;
        case 'D':
            cout << "不通过" << endl;
            break;
        default:
            cout << "无效" << endl;
    };
    
    return 0;
}

首先先实现了一个函数 get_source_level 可以输入数字来判断等级,main() 函数则使用的是 switch 来通过等级得到对应的 “赞美”。

下面这个程序可以通过输入周几可以得到是以哪颗星星命名的,一个比较好的枚举 + switch 小案例。

#include <iostream>
using namespace std;

int main()

{
    enum DaysOfWeek
    {
        Sunday = 0,
        Monday,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday
    };

    cout << "Find what days of the week are named after!" << endl;
    cout << "Enter a number for a day (Sunday = 0): ";

    int dayInput = Saturday;   // 没有输入就是周日
    cin >> dayInput;

    switch(dayInput)
    {
        case Sunday:
            cout << "Sunday was named after the Sun" << endl;
            break;

        case Monday:
            cout << "Monday was named after the Moon" << endl;
            break;

        case Tuesday:
            cout << "Tuesday was named after Mars" << endl;
            break;

        case Wednesday:
            cout << "Wednesday was named after Mercury" << endl;
            break;

        case Thursday:
            cout << "Thursday was named after Jupiter" << endl;
            break;

        case Friday:
            cout << "Friday was named after Venus" << endl;
            break;

        case Saturday:
            cout << "Saturday was named after Saturn" << endl;
            break;

        default:
            cout << "输入错误,请重新输入。" << endl;
            break;
    }

    return 0;
}
三、goto 循环

直接先看一个 goto 案例:

#include <iostream>
using namespace std;


int main() {
    Start:
    int Num1 = 0, Num2 = 0;

    cout << "请输第入一个数字:";
    cin >> Num1;
    cout << "请输入第二个数字:";
    cin >> Num2;

    cout << Num1 << " x " << Num2 << " = " << Num1 * Num2 << endl;
    cout << Num1 << " + " << Num2 << " = " << Num1 + Num2 << endl;

    char repeat = 'y';
    cout << "是否选择退出程序?(y/n)" << endl;
    cin >> repeat;

    if (repeat == 'n')
        goto Start;

    cout << "Goodbye!" << endl;

    return 0;
}

输出:

请输第入一个数字:11
请输入第二个数字:22
11 x 22 = 242
11 + 22 = 33
是否选择退出程序?(y/n)
n
请输第入一个数字:11
请输入第二个数字:22
11 x 22 = 242
11 + 22 = 33
是否选择退出程序?(y/n)
y
Goodbye!

程序可以让用户输入两个数字,然后输入计算结果后,用户有两个选择,是否需要再次计算或者直接退出程序。这种场景就非常适合 goto 但是前辈们经验提醒我们,不推荐使用 goto 语句来编写循环,因为大量使用 goto 语句将导致代码的执行流程无法 预测,即不按特定的顺序从一行跳转到另一行;在有些情况下,也可能导致变量的状态无法预测。

四、while 循环
while(expression)
    {
       // Expression evaluates to true
       StatementBlock;
    };

只要 expression 为 true,就将反复执行该语句块。因此,必须确保 expression 在特定条件下将为 false, 否则 while 循环将永不停止。

上案例:

#include <iostream>

using namespace std;

int main() {
    char userSelection = 'm';   // initial value

    while (userSelection == 'm') {
        int num1 = 0, num2 = 0;
        cout << "输入第一个数字:";
        cin >> num1;
        cout << "输入第二个数字:";
        cin >> num2;

        cout<<num1<<"x"<<num2<<"="<<num1*num2<<endl;
        cout<<num1<<"+"<<num2<<"="<<num1+num2<<endl;

        cout << "输入 x 退出程序" << endl;
        cin >> userSelection;
    }

    return 0;
}

然后再 while 另外一种语法 do...while 某些情况需要将代码放在循环中,并确保他们至少执行一次,也就是说循环中的代码会先执行,然后再根据条件判断是否继续执行。

#include <iostream>

using namespace std;

int main() {
    char userSelection = 'm';   // initial value

    do {
        int num1 = 0, num2 = 0;
        cout << "输入第一个数字:";
        cin >> num1;
        cout << "输入第二个数字:";
        cin >> num2;

        cout << num1 << "x" << num2 << "=" << num1 * num2 << endl;
        cout << num1 << "+" << num2 << "=" << num1 + num2 << endl;

        cout << "输入 x 退出程序" << endl;
        cin >> userSelection;

    } while (userSelection == 'm');

    return 0;
}

语法也非常简单,稍微修改一下即可。

五、for 循环

请看下方案例:

#include <iostream>

using namespace std;

int main() {
    // 定义一个常量
    const int array_len = 5;
    
    // 初始化一个数组
    int my_nums[array_len] = {11, 22, 33, 44, 55};

    // for 循环遍历
    for (int counter = 0; counter < array_len; ++counter)
        cout << "数组第 " << counter + 1 << " 个元素是:" << my_nums[counter] << endl;
    return 0;
}

在 for 循环中的条件判断中,我们使用递增运算符,还记得 ++ num 与 num ++ 的区别吗?

六、continue 和 break

重点介绍一下 C++ 中的语法,用法都清楚。

#include <iostream>
using namespace std;

int main()
{
    for(;;)   // an empty 'for' creating an infinite loop
    {
        cout << "Enter two integers: " << endl;
        int num1 = 0, num2 = 0;
        cin >> num1;
        cin >> num2;

        cout << "Do you wish to correct the numbers? (y/n): ";
        char changeNumbers = '\0';
        cin >> changeNumbers;

        if (changeNumbers == 'y')
            continue;  // restart the loop!

        cout << num1 << " x " << num2 << " = " << num1 * num2 << endl;
        cout << num1 << " + " << num2 << " = " << num1 + num2 << endl;

        cout << "Press x to exit or any other key to recalculate" << endl;
        char userSelection = '\0';
        cin >> userSelection;

        if (userSelection == 'x')
            break;   // exit the infinite loop
    }

    cout << "Goodbye!" << endl;

    return 0;
}
七、实现九九乘法表
#include <iostream>

using namespace std;

int main() {
    int i, j;
    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= i; j++) {
            cout << j << "*" << i << "=" << j * i << " ";
        }
        cout << endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值