程序流程结构
C/C++支持最基本的三种程序运行结构:
- 顺序结构:程序按行顺序执行,不发生跳转
- 选择结构:依据条件是否被满足,有选择地执行相应的功能
- 循环结构:依据条件是否被满足,多次循环执行某段代码
1. 选择结构
1.1 if 语句
作用:执行满足条件的代码段
if的三种形式:
- 单行格式if语句:
if (条件) { 条件满足后执行的语句 }
int score;
cin >> score;
if (score > 80) {
cout << "你被MIT录取了!" << endl;
}
- 多行格式if语句:
if (条件) { 满足时的代码 } else {不满足时的代码}
int score;
cin >> score;
if (score > 80) {
cout << "你被MIT录取了!" << endl;
} else {
cout << "你被家里蹲录取了!" << endl;
}
- 多条件的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