程序流程結構
程序流程結構
C/C++支持最基本的三種程序運行結構:==順序結構、選擇結構、循環結構==
- 順序結構:程序按順序執行,不發生跳轉
- 選擇結構:依據條件是否滿足,有選擇的執行相應功能
- 循環結構:依據條件是否滿足,循環多次執行某段代碼
選擇結構
if語句
**作用:**執行滿足條件的語句
if語句的三種形式
- 單行格式if語句
- 多行格式if語句
- 多條件的if語句
- 單行格式if語句:
if(条件){ 条件满足执行的语句 }
示例:int main() { //选择结构-单行if语句 //输入一个分数,如果分数大于600分,视为考上一本大学,并在屏幕上打印 int score = 0; cout << "请输入一个分数:" << endl; cin >> score; cout << "您输入的分数为: " << score << endl; //if语句 //注意事项,在if判断语句后面,不要加分号 if (score > 600) { cout << "我考上了一本大学!!!" << endl; } return 0; }
注意:if條件表達式後不要加分號
- 多行格式if語句:
if(条件){ 条件满足执行的语句 }else{ 条件不满足执行的语句 };

示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else
{
cout << "我未考上一本大学" << endl;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。
- 多條件的if語句:
if(条件1){ 条件1满足执行的语句 }else if(条件2){条件2满足执行的语句}... else{ 都不满足执行的语句}

示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
int score = 0;
cout << "请输入考试分数:" << endl;
cin >> score;
if (score > 600)
{
cout << "我考上了一本大学" << endl;
}
else if (score > 500)
{
cout << "我考上了二本大学" << endl;
}
else if (score > 400)
{
cout << "我考上了三本大学" << endl;
}
else
{
cout << "我未考上本科" << endl;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。
嵌套if語句:在if語句中,可以嵌套使用if語句,達到更精確的條件判斷
案例需求:
- 提示用戶輸入一個高考考試分數,根據分數做如下判斷
- 分數如果大於600分視為考上一本,大於500分考上二本,大於400考上三本,其餘視為未考上本科;
- 在一本分數中,如果大於700分,考入北大,大於650分,考入清華,大於600考入人大。
示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
int score = 0;
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;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。
練習案例: 三隻小豬稱體重
有三隻小豬ABC,請分別輸入三隻小豬的體重,並且判斷哪隻小豬最重?
三目運算符
作用: 通過三目運算符實現簡單的判斷
語法:表达式1 ? 表达式2 :表达式3
解釋:
如果表達式1的值為真,執行表達式2,並返回表達式2的結果;
如果表達式1的值為假,執行表達式3,並返回表達式3的結果。
示例:
int main() {
int a = 10;
int b = 20;
int c = 0;
c = a > b ? a : b;
cout << "c = " << c << endl;
//C++中三目运算符返回的是变量,可以继续赋值
(a > b ? a : b) = 100;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "c = " << c << endl;
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
總結:和if語句比較,三目運算符優點是短小整潔,缺點是如果用嵌套,結構不清晰
switch語句
**作用:**執行多條件分支語句
語法:
switch(表达式)
{
case 结果1:执行语句;break;
case 结果2:执行语句;break;
...
default:执行语句;break;
}
運行/觀察結果: 這段是語法片段,重點看寫法;補全上下文後再運行。
示例:
int main() {
//请给电影评分
//10 ~ 9 经典
// 8 ~ 7 非常好
// 6 ~ 5 一般
// 5分以下 烂片
int score = 0;
cout << "请给电影打分" << endl;
cin >> score;
switch (score)
{
case 10:
case 9:
cout << "经典" << endl;
break;
case 8:
cout << "非常好" << endl;
break;
case 7:
case 6:
cout << "一般" << endl;
break;
default:
cout << "烂片" << endl;
break;
}
return 0;
}
運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。
注意1:switch語句中表達式類型只能是整型或者字符型
注意2:case裡如果沒有break,那麼程序會一直向下執行
總結:與if語句比,對於多條件判斷時,switch的結構清晰,執行效率高,缺點是switch不可以判斷區間
循環結構
while循環語句
**作用:**滿足循環條件,執行循環語句
語法: while(循环条件){ 循环语句 }
解釋:==只要循環條件的結果為真,就執行循環語句==

示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
int num = 0;
while (num < 10)
{
cout << "num = " << num << endl;
num++;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
注意:在執行循環語句時候,程序必須提供跳出循環的出口,否則出現死循環
while循環練習案例:==猜數字==
**案例描述:**系統隨機生成一個1到100之間的數字,玩家進行猜測,如果猜錯,提示玩家數字過大或過小,如果猜對恭喜玩家勝利,並且退出遊戲。

do...while循環語句
作用: 滿足循環條件,執行循環語句
語法: do{ 循环语句 } while(循环条件);
**注意:**與while的區別在於==do...while會先執行一次循環語句==,再判斷循環條件

示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
int num = 0;
do
{
cout << num << endl;
num++;
} while (num < 10);
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
總結:與while循環區別在於,do...while先執行一次循環語句,再判斷循環條件
練習案例:水仙花數
**案例描述:**水仙花數是指一個 3 位數,它的每個位上的數字的 3次冪之和等於它本身
例如:1^3 + 5^3+ 3^3 = 153
請利用do...while語句,求出所有3位數中的水仙花數
for循環語句
作用: 滿足循環條件,執行循環語句
語法: for(起始表达式;条件表达式;末尾循环体) { 循环语句; }
示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
for (int i = 0; i < 10; i++)
{
cout << i << endl;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
詳解:

注意:for循環中的表達式,要用分號進行分隔
總結:while , do...while, for都是開發中常用的循環語句,for循環結構比較清晰,比較常用
練習案例:敲桌子
案例描述:從1開始數到數字100, 如果數字個位含有7,或者數字十位含有7,或者該數字是7的倍數,我們打印敲桌子,其餘數字直接打印輸出。

嵌套循環
作用: 在循環體中再嵌套一層循環,解決一些實際問題
例如我們想在屏幕中打印如下圖片,就需要利用嵌套循環

示例:
int main() {
//外层循环执行1次,内层循环执行1轮
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
cout << "*" << " ";
}
cout << endl;
}
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
**練習案例:**乘法口訣表
案例描述:利用嵌套循環,實現九九乘法表

跳轉語句
break語句
作用: 用於跳出==選擇結構==或者==循環結構==
break使用的時機:
- 出現在switch條件語句中,作用是終止case並跳出switch
- 出現在循環語句中,作用是跳出當前的循環語句
- 出現在嵌套循環中,跳出最近的內層循環語句
示例1:
int main() {
//1、在switch 语句中使用break
cout << "请选择您挑战副本的难度:" << endl;
cout << "1、普通" << endl;
cout << "2、中等" << endl;
cout << "3、困难" << endl;
int num = 0;
cin >> num;
switch (num)
{
case 1:
cout << "您选择的是普通难度" << endl;
break;
case 2:
cout << "您选择的是中等难度" << endl;
break;
case 3:
cout << "您选择的是困难难度" << endl;
break;
}
return 0;
}
運行/觀察結果: 運行時需要按提示輸入數據,輸出結果會隨輸入內容和分支條件變化。
示例2:
int main() {
//2、在循环语句中用break
for (int i = 0; i < 10; i++)
{
if (i == 5)
{
break; //跳出循环语句
}
cout << i << endl;
}
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
示例3:
int main() {
//在嵌套循环语句中使用break,退出内层循环
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 5)
{
break;
}
cout << "*" << " ";
}
cout << endl;
}
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
continue語句
**作用:**在==循環語句==中,跳過本次循環中餘下尚未執行的語句,繼續執行下一次循環
示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
for (int i = 0; i < 100; i++)
{
if (i % 2 == 0)
{
continue;
}
cout << i << endl;
}
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
注意:continue並沒有使整個循環終止,而break會跳出循環
goto語句
**作用:**可以無條件跳轉語句
語法: goto 标记;
**解釋:**如果標記的名稱存在,執行到goto語句時,會跳轉到標記的位置
示例:
int main() {
// 程序从 main 函数开始执行,下面的语句会按顺序运行。
cout << "1" << endl;
goto FLAG;
cout << "2" << endl;
cout << "3" << endl;
cout << "4" << endl;
FLAG:
cout << "5" << endl;
// 返回 0 表示程序正常结束。
return 0;
}
運行/觀察結果: 運行後會按輸出語句打印對應內容,變量值可結合初始化、賦值和函數調用順序推導。
注意:在程序中不建議使用goto語句,以免造成程序流程混亂