当前位置: 首页 > ai >正文

C++零基础第四天:顺序、选择与循环结构详解

一、程序三大基本运行结构

        在 C/C++ 中,支持三种核心程序运行结构,是所有程序逻辑的基础:

  1. 顺序结构:程序按代码书写顺序依次执行,无跳转,是最基础的执行方式
  2. 选择结构:根据条件是否满足,选择性执行不同功能模块(如 “ 满足条件 A 则做 X,否则做 Y ”)
  3. 循环结构:根据条件是否满足,重复执行某段代码(如 “ 条件成立时,反复执行 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 语句

作用

        “ 强制跳出 ” 当前所在的结构(选择结构或循环结构)

适用场景
  1. switch 语句中:跳出当前 case,终止 switch 的执行(避免 case 穿透)
  2. 单层循环中:直接跳出当前循环,循环不再执行
  3. 嵌套循环中:仅跳出最近的内层循环,外层循环继续执行
示例(嵌套循环中使用 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;
}
http://www.xdnf.cn/news/20294.html

相关文章:

  • Protobuf
  • 人工智能辅助荧光浓度检测系统:基于YOLO与RGB分析的Python实现
  • 【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
  • AP1272:新一代高性能LDO稳压器,为精密电子系统提供更优电源解决方案
  • 《秦时明月》系列经典语录分享
  • 云原生的12个要素是什么?
  • 【Linux指南】动静态库与链接机制:从原理到实践
  • 疯狂星期四文案网第62天运营日记
  • 消失的6个月!
  • 从文本到知识:使用LLM图转换器构建知识图谱的详细指南
  • Java多线程学习笔记
  • Nginx 实战系列(二)—— Nginx 配置文件与虚拟主机搭建
  • QML Charts组件之LineSeries、SplineSeries与ScatterSeries
  • 正态分布 - 正态分布的经验法则(68-95-99.7 法则)
  • Modbus通信的大端和小端字节序
  • OpsManage 项目启动脚本与 Docker 配置深度分析
  • Day05 单调栈 | 84. 柱状图中最大的矩形、42. 接雨水
  • LeetCode算法日记 - Day 34: 二进制求和、字符串相乘
  • 【目录-多选】鸿蒙HarmonyOS开发者基础
  • 分布式go项目-搭建监控和追踪方案
  • 国内外支持个人开发者的应用市场
  • OpenCV - 图像的IO操作
  • 【开题答辩全过程】以 住院管理系统为例,包含答辩的问题和答案
  • 从零开始的python学习——文件
  • C++ 面向对象编程:多态相关面试简答题
  • 444444
  • LeetCode - 1089. 复写零
  • MQTT 与 Java 框架集成:Spring Boot 实战(三)
  • RAG提示词分解
  • CentOS系统管理:useradd命令的全面解析