04程序流程结构

程序流程结构

C/C++支持最基本的三种程序运行结构:

  • 顺序结构:程序按行顺序执行,不发生跳转
  • 选择结构:依据条件是否被满足,有选择地执行相应的功能
  • 循环结构:依据条件是否被满足,多次循环执行某段代码

1. 选择结构

1.1 if 语句

作用:执行满足条件的代码段

if的三种形式:

  1. 单行格式if语句:
    if (条件) { 条件满足后执行的语句 }
int score;
cin >> score;

if (score > 80) {
    cout << "你被MIT录取了!" << endl;
}
  1. 多行格式if语句:
    if (条件) { 满足时的代码 } else {不满足时的代码}
int score;
cin >> score;

if (score > 80) {
    cout << "你被MIT录取了!" << endl;
} else {
    cout << "你被家里蹲录取了!" << endl;
}
  1. 多条件的if语句:
    if (条件1) { 代码1 } else if (条件2) { 代码2 } else { 代码3 }
int score;
cin >> score;

if (score > 80) {
    cout << "你考上了MIT" << endl;
} else if (score > 70) {
    cout << "你考上了Harvard" << endl;
} else {
    cout << "你考上了哈尔滨佛学院" << endl;
}

案例1

案例需求:

  • 提示用户输入一个高考考试分数,根据分数做如下判断
  • 如果分数大于600分视为考上一本,大于500分视为考上二本,考上400分视为考上三本,其余视为未考上本科
  • 在一本分数中,如果大于700分则考入北大,大于650分则考入清华,大于600分则考入人大。
int main () {
    int score;
    cout << "请输入你的高考分数:" << endl;
    cin >> score;
    
    if (score > 600) {
        cout << "恭喜你考上了一本!" << endl;
        if (score > 700) {
            cout << "靓仔,你被北大录取了!" << endl;
        } else if (score > 650) {
            cout << "靓仔,你要和胡书记做校友了!" << endl;
        } else {
            cout << "靓仔,你要和强东做校友了!" << endl;
        }
    } else if (score > 500) {
        cout << "恭喜你考上了二本!" << endl;
    } else if (score > 400) {
        cout << "恭喜你考上了三本!" << endl;
    } else {
        cout << "死靓仔,三本都没考上" << endl;
    }

    return 0;
}

案例2

案例需求:
有三只猪ABC,分别输入三只猪的体重,并判断哪知猪最重。

#include <iostream>
using namespace std;

int main () {
    int pigA, pigB, pigC;
    char mostFat;

    cout << "请输入猪a的体重:" << endl;
    cin >> pigA;
    cout << "请输入猪b的体重:" << endl;
    cin >> pigB;
    cout << "请输入猪c的体重:" << endl;
    cin >> pigC;

    if (pigA > pigB) {
        if (pigC > pigA) {
            mostFat = 'c';
        } else {
            mostFat = 'a'; 
        }
    } else {
        if (pigC > pigB) {
            mostFat = 'c';
        } else {
            mostFat = 'b';
        }
    }

    cout << "显然,最重的是猪" << mostFat << "。" << endl;
    
    return 0;
}

1.2 三目运算符

作用:通过三目运算符实现简单的判断
语法表达式1 ? 表达式2: 表达式3
解释
如果表达式1为真,执行表达式2,并返回表达式2的结果;
如果表达式1为假,执行表达式3,并返回表达式3的结果;

int a = 10;
int b = 20;
int c;

// 将a与b中更大的值赋给c
c = a > b ? a : b;

1.3 switch语句

作用:执行多条件分支语句
语法

switch () {
    case 结果1: 语句1; break;
    case 结果2: 语句2; break;
    case 结果3: 语句3; break;
    ...
    default: 语句n; break;
}

2. 循环结构

2.1 while 语句

作用:满足循环条件,执行循环语句
语法while (循环条件) { 循环语句 }
解释:只要循环条件为真,就执行循环语句

// 输出0~9
int num = 0;
while (num < 10) {
    cout << num << endl;
    num++;
}

2.2 do-while语句

作用:满足循环条件,执行循环语句
语法do { 循环语句 } while (循环条件);
注意:与while的区别在于do-while会先执行一次循环语句,再判断条件

// 输出0~9
int num = 0;
do {
    cout << num << endl;
    num++;
} while (num < 10);

案例

需求:
水仙花数是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。
例如:1^3 + 5^3 + 3^3 = 153

#include <iostream>
using namespace std;

int main () {
    int num = 100;
    int n, t, sum;

    while (num < 1000) {
        n = num;
        sum = 0;

        // 计算各位的三次方之和
        while (n != 0) {
            t = n % 10;
            n /= 10;
            sum += t*t*t;
        }
        if (sum == num) 
            cout << num << endl;
        num++;
    }

    return 0;
}

2.3 for 语句

作用:满足循环条件,执行语句
语法:for(起始表达式; 条件表达式; 末尾循环体) { 循环语句 }

for (int i = 0; i < 100; i++) {
    cout << i << endl;
}

案例

需求:
1~100中如果数字的各位有7,或者十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。

#include <iostream>
using namespace std;

int main () {
    for (int i = 1; i < 100; i++ ) {
        if (i % 10 == 7 || (i / 10) % 10 == 7 || i % 7 == 0) 
            cout << "敲桌子" << endl;
        else 
            cout << i << endl;
    }

    return 0;
}

2.4 嵌套循环

作用:在循环体中嵌套循环,以解决实际问题。

#include <iostream>
using namespace std;

int main () {
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            cout << "* ";
        }
        cout << endl;
    }

    return 0;  
}

3. 跳转语句

3.1 break语句

作用:用于跳出选择或循环语句

break的使用时机:

  • 出现在switch条件语句,作用是终止case并跳出switch;
  • 出现在循环语句中,作用是跳出循环语句;
  • 出现在嵌套循环语句中,作用是跳出最内层的循环;
int num = 10;

for (int i = 0; i < 100; i++) {
    if (num == 30) 
        break;
}

3.2 continue语句

作用:在循环语句中,跳过本次循环中余下尚未执行的语句,继续执行下一次循环。

// 输出1~100中的奇数
for (int i = 1; i <= 100; i++) {
    if (i % 2 == 0)
        continue;
    cout << i << endl;
}

3.3 goto语句

作用:无条件跳转语句
语法goto 标记
解释:如果标记的名称存在,执行goto语句后,会跳转到标记的位置

#include <iostream>
using namespace std;

int main () {
    cout << "1" << endl;
    goto FLAG;
    cout << "2" << endl;
    cout << "3" << endl;
FLAG:
    cout << "4" << endl;

    return 0;
}

输出结果为:

1
4

CS专业在读,热爱编程。
专业之外,喜欢阅读,尤爱哲学、金庸、马尔克斯。
原文地址:https://www.cnblogs.com/jmhwsrr/p/15743214.html