C++零基础第四天:顺序、选择与循环结构详解
一、程序三大基本运行结构
在 C/C++ 中,支持三种核心程序运行结构,是所有程序逻辑的基础:
- 顺序结构:程序按代码书写顺序依次执行,无跳转,是最基础的执行方式
- 选择结构:根据条件是否满足,选择性执行不同功能模块(如 “ 满足条件 A 则做 X,否则做 Y ”)
- 循环结构:根据条件是否满足,重复执行某段代码(如 “ 条件成立时,反复执行 X 操作 ”)
二、选择结构
选择结构用于实现 “ 分支逻辑 ”,核心是 “ 根据条件做判断 ”,主要包含 3 种实现方式:
2.1 if 语句
作用
根据条件真假,执行对应代码块,分三种格式:
1. 单行格式 if 语句
- 适用场景:仅需在条件成立时执行 1 条语句
- 语法
if (条件表达式) { 执行语句; }(注意:条件后不要加分号,否则会导致逻辑错误)
- 示例:输入分数,若 ≥ 60 则输出 “ 及格 ”
#include <iostream>
using namespace std;int main()
{//选择结构 单行 if 语句//输入一个数,若大于等于60则输出及格,否则输出不及格//1.输入int score = 0;cout << "请输入一个分数" << endl;cin >> score;//2.判断是否大于60if(score >= 60)//if条件后面不要加分号{//3.输出cout << "及格" << endl;}system("pause");return 0;
}
2. 多行格式 if 语句
- 适用场景:条件成立与不成立时,分别执行不同逻辑(二选一)
- 语法
if(条件表达式)
{ 条件成立执行的语句;
}
else
{ 条件不成立执行的语句;
}
- 示例:输入分数,≥ 60 输出 “ 及格 ”,否则输出 “ 不及格 ”(在单行示例基础上增加 else 块)
#include <iostream>
using namespace std;int main()
{//选择结构 单行 if 语句//输入一个数,若大于等于60则输出及格,否则输出不及格//1.输入int score = 0;cout << "请输入一个分数" << endl;cin >> score;//2.判断是否大于60if(score >= 60)//if条件后面不要加分号{//3.输出cout << "及格" << endl;}else{cout << "不及格" << endl;}system("pause");return 0;
}
3. 多条件 if 语句
- 适用场景:需要判断多个条件(多选一),如分数分级(不及格 / 及格 / 优秀)
- 语法
if(条件1) { 条件1成立执行; }
else if(条件2) { 条件2成立执行; }
else if(条件3) { 条件3成立执行; }
// 可继续添加else if,最后可加else处理所有不满足的情况
- 注意:条件判断有顺序性,需避免 “ 前面条件覆盖后面条件 ”(如示例中先判断 < 60,再判断 ≥ 60 & < 90,最后 ≥ 90)
- 示例:分数分级判断
#include <iostream>
using namespace std;int main()
{//选择结构 单行 if 语句//输入一个数,若大于等于60则输出及格,否则输出不及格//1.输入int score = 0;cout << "请输入一个分数" << endl;cin >> score;//2.判断是否大于60if(score < 60)//if条件后面不要加分号{//3.输出cout << "不及格" << endl;}else if(score >= 60 && score < 90){cout << "及格" << endl;}else if(score >= 90){cout << "优秀" << endl;}else if(score > 100){cout << "错误!" << endl;}system("pause");return 0;
}
2.2 三目运算符
作用
通过简洁语法实现 “ 二选一 ” 判断,可替代简单的 if - else
语法
表达式1 ? 表达式2 : 表达式3
- 逻辑:若 表达式 1 为真,执行表达式 2 并返回其结果;若为假,执行表达式 3 并返回其结果
核心特点
- 返回值是变量(C++ 特性):可直接赋值给其他变量,甚至直接对返回的变量赋值
示例
#include <iostream>
using namespace std;int main()
{//创建三个变量abc//将a和b做比较,将变量大的值赋值给变量cint a,b,c;a = 10;b = 20;c = 0;c = (a > b ? a : b);cout << "c = " << c << endl;//20//在C++中,三目运算符返回的是变量,可以继续赋值(a > b ? a : b) = 100;cout << "a = " << a << endl;//10cout << "b = " << b << endl;//100system("pause");return 0;
}
2.3 switch 语句
作用
实现 “ 多条件分支 ”,适用于 “ 判断变量是否等于多个固定值 ” 的场景(如菜单选择、状态码判断)
语法
switch (判断变量)
{ // 判断变量只能是整型或字符型(不能是区间或浮点型)case 值 1: // 若变量 == 值 1,执行此 case 下的语句执行语句1;break; // 跳出switch,避免 “ 穿透 ” 到下一个casecase 值 2:执行语句 2;break;// 可添加多个casedefault: // 所有 case 都不匹配时执行(可选)默认执行语句;break;
}
关键注意点
- break 的作用:必须在每个 case 末尾加 break,否则会执行完当前 case 后,继续执行下一个 case( “ case 穿透 ” )
- 与 if 的区别:
- 缺点:仅支持 “ 变量 == 固定值 ” 的判断,不能判断区间(如 score > 60)
- 优点:结构清晰,执行效率高(尤其分支较多时)
示例
#include <iostream>
using namespace std;int main()
{//1.输入分数int score = 0;cout << "请输入 1 || 2 || 3:";cin >> score;cout << "输入为:" << score << endl;//2.根据输入分数得出结果switch(score){case 1:cout << "结果:1" << endl;break;//退出当前分支case 2:cout << "结果:2" << endl;break;case 3:cout << "结果:3" << endl;break;default:cout << "错误!" << endl;break;}system("pause");return 0;
}
三、循环结构
循环结构用于 “ 重复执行某段代码 ”,核心是 “ 控制循环的开始与结束 ”,主要有 4 种实现方式:
3.1 while 循环
作用
“ 先判断,后执行 ”:先检查循环条件,若成立则执行循环体
语法
while(循环条件) { 循环语句; }
- 逻辑:只要循环条件为真,就反复执行循环体;直到条件为假,退出循环
关键注意点
- 避免死循环:循环体中必须有 “ 让循环条件逐渐变为假 ” 的语句(如变量自增 / 自减)
示例:打印 0~9
#include <iostream>
using namespace std;int main()
{//while循环//打印 0 ~ 9int num = 0;while(num < 10){cout << num << endl;num++;}//注意事项:避免产生死循环system("pause");return 0;
}
3.2 do...while 循环
作用
“ 先执行,后判断 ”:无论条件是否成立,先执行 1 次循环体,再检查条件
语法
do {循环语句;
} while(循环条件); // 注意末尾有分号
与 while 的核心区别
- while:可能 1 次都不执行(若条件一开始就假)
- do...while:至少执行 1 次(先执行,再判断)
示例:打印 0~9
#include <iostream>
using namespace std;int main()
{//输出 0 ~ 9int num = 0;do{cout << num << endl;num++;}while(num < 10);system("pause");return 0;
}
3.3 for 循环
作用
“ 初始化、判断、更新 ” 三合一:将循环的三个核心步骤(循环变量初始化、循环条件、循环变量更新)集中在一行,结构更紧凑
语法
for(起始表达式 ; 条件表达式 ; 末尾循环体) { 循环语句; }
- 起始表达式:初始化循环变量(如 int i = 0),仅执行 1 次
- 条件表达式:循环的判断条件(如 i < 10),每次循环前检查,成立则执行循环体
- 末尾循环体:更新循环变量(如 i++),每次循环体执行完后执行
灵活用法
- 可省略部分表达式(但分号不能省),如for(;;)表示无限循环(需在循环体内用 break 退出)
示例:打印 0~9(两种方法)
#include <iostream>
using namespace std;int main()
{//使用for循环,打印0~9//方法一for(int i = 0 ; i < 10 ; i++){cout << i << endl;}//方法二int i = 0;for(;;){if(i >= 10){break;}else{cout << i << endl;i++;}}system("pause");return 0;
}
3.4 嵌套循环
作用
在一个循环的循环体中,再嵌套另一个循环,用于解决 “ 多维重复 ” 问题(如打印矩阵、星号图形)
核心逻辑
- 外层循环执行 1 次,内层循环执行完整的一轮(直到内层循环条件不成立)
示例:打印 5 行 10 列的星号(*****...)
#include <iostream>
using namespace std;int main()
{//打印一行星图for(int i = 0 ; i < 5 ; i++){for(int j = 0 ; j < 10 ; j++){cout << "*";}cout << endl;}//外层执行一次,内层执行一周system("pause");return 0;
}
四、跳转语句
跳转语句用于 “ 改变程序的正常执行顺序 ”,主要有 3 种:
4.1 break 语句
作用
“ 强制跳出 ” 当前所在的结构(选择结构或循环结构)
适用场景
- switch 语句中:跳出当前 case,终止 switch 的执行(避免 case 穿透)
- 单层循环中:直接跳出当前循环,循环不再执行
- 嵌套循环中:仅跳出最近的内层循环,外层循环继续执行
示例(嵌套循环中使用 break)
#include <iostream>
using namespace std;int main()
{//break 的使用时机//出现在 switch 条件语句中,用来终止 case 并跳出 switchcout << "选择:" << endl;cout << "选择1" << endl;cout << "选择2" << endl;cout << "选择3" << endl;int num = 0;cin >> num;switch (num){case 1:cout << "111" << endl;break;case 2:cout << "222" << endl;break;case 3:cout << "333" << endl;break;}//出现在循环语句中,用来跳出当前的循环语句for (int i = 0 ; i < 10 ; i++){if (i == 6){break;}cout << i;}//出现在嵌套循环中,用来跳出最近的内层循环语句,并不影响外层循环for (int i = 0 ; i < 5 ; i++){for (int j = 0 ; j < 10 ; j++){if (j == 6){break;}cout << "* ";}cout << endl;}system("pause");return 0;
}
4.2 continue 语句
作用
“ 跳过本次循环剩余部分,直接进入下一次循环 ”(仅用于循环结构)
与 break 的区别
- break:直接跳出整个循环
- continue:仅跳过当前次循环的剩余语句,下一次循环仍会执行
示例:打印 1~9 中的奇数(跳过偶数)
#include <iostream>
using namespace std;
int main()
{//continuefor (int i = 0 ; i < 10 ; i++){if (i % 2 == 0){//可以筛选条件,执行到此就不再向下执行,执行下一次循环continue;}cout << i << " ";}system("pause");return 0;
}
4.3 goto 语句
作用
“ 无条件跳转 ”:直接跳转到程序中标记的位置(谨慎使用,易破坏程序结构)
语法
定义标记:标记名:(如A:)
跳转:goto 标记名;(执行到 goto 时,直接跳转到标记处)
注意
- 不建议频繁使用:会导致程序流程混乱,难以维护(仅在特殊场景如 “ 跳出多层嵌套循环 ” 时可考虑)
示例
#include <iostream>
using namespace std;
int main()
{cout << "11111" << endl;cout << "22222" << endl;goto A;cout << "33333" << endl;cout << "44444" << endl;A:cout << "55555" << endl;system("pause");return 0;
}