【C++】FlowofControl
- 手机
- 2025-08-27 02:51:02

《C++程序设计基础教程》——刘厚泉,李政伟,二零一三年九月版,学习笔记
文章目录 1、选择结构1.1、if 语句1.2、嵌套的 if 语句1.3、条件运算符 ?:1.4、switch 语句 2、循环结构2.1、while 语句2.2、do-while 语句2.3、 for 循环2.4、循环嵌套 3、跳转结构3.1、break 语句3.2、continue 语句3.3、goto 语句3.4、return 语句 4、应用实例 1、选择结构
if、switch、?:
1.1、if 语句if 语句是最基本的选择结构,它用于在条件为真时执行特定的代码块。
#include <iostream> using namespace std; int main() { int n = 10; if (n > 0) { cout << "Number is positive." << endl; } return 0; }output
Number is positive.if-else 语句用于在条件为真时执行一个代码块,否则执行另一个代码块。
#include <iostream> using namespace std; int main() { int num = -5; if (num > 0) { cout << "Number is positive." << endl; } else { cout << "Number is not positive." << endl; } return 0; }output
Number is not positive. 1.2、嵌套的 if 语句当需要判断的条件不止一个,可以使用嵌套 if 语句来实现。
所谓嵌套 if 语句,指的是其中一个 if 语句作为另一个 if 语句或者 else 语句的内嵌语句。
C++ 规定,else 语句总是与在同一块离它最近且无 else 语句配对的 if 语句相结合。
#include <iostream> using namespace std; int main() { int num = 59; if (num > 0) cout << "Number is positive." << endl; if (num >= 60) cout<< "passed." << endl; else cout << "not passed." << endl; return 0; }output
Number is positive. not passed.编译器不关心程序的缩进形式
当你对嵌套 if 语句混淆不清时,可以通过添加 {} 来解决
eg
#include <iostream> using namespace std; int main() { int score; cin >> score; if (score < 0) cout << "error score!" << endl; else if (score < 60) cout << "Get D!" << endl; else if (score < 70) cout << "Get C!" << endl; else if (score < 80) cout << "Get B!" << endl; else cout << "Get A!" << endl; return 0; }output
75 Get B! 1.3、条件运算符 ?:表达式1?表达式2:表达式3
条件运算符是 C++ 中唯一的 3 目运算符
如果表达式 1 为 true,执行表达式 2,否则执行表达式 3
#include <iostream> using namespace std; int main() { float a = 60.1; bool result = a<60?false:true; cout << result << endl; return 0; }output
1 1.4、switch 语句switch 语句可以一次将测试值与多个值进行判定,而不是只测试一个判定条件
switch(表达式) { case 整型常量表达式1: 语句组1 case 整型常量表达式2: 语句组2 ... case 整型常量表达式n: 语句组n default: 语句组 n+1 }每个 case 语句后必须是与表达式类型兼容的一个常量(必须为常量,不能为变量,且要求为整型或者能够转化为整型),eg 整型、字符型或枚举型表达式
default 语句并非必须
需要注意的是,每个case块的末尾通常有一个break语句,以防止程序继续执行下一个case块的代码(这称为“贯穿”)。
eg:贯穿
#include <iostream> using namespace std; int main() { char grade; cout<<"请输入成绩:"; cin>>grade; switch(grade) { case 'A': cout<<"80~100\n"; case 'B': cout<<"60~80\n"; case 'C': cout<<"0~60\n"; default: cout<<"error\n"; } return 0; }output
请输入成绩:A 80~100 60~80 0~60 error引入 break 以后
#include <iostream> using namespace std; int main() { char grade; cout<<"请输入成绩:"; cin>>grade; switch(grade) { case 'A': cout<<"80~100\n"; break; case 'B': cout<<"60~80\n"; break; case 'C': cout<<"0~60\n"; break; default: cout<<"error\n"; break; } return 0; }output
请输入成绩:A 80~100output
请输入成绩:a error再来个例子
#include <iostream> using namespace std; int main() { int day; cout << "请输入星期几 (1-7): "; cin >> day; switch (day) { case 1: cout << "星期一" << endl; break; case 2: cout << "星期二" << endl; break; case 3: cout << "星期三" << endl; break; case 4: cout << "星期四" << endl; break; case 5: cout << "星期五" << endl; break; case 6: cout << "星期六" << endl; break; case 7: cout << "星期日" << endl; break; default: cout << "输入无效" << endl; } return 0; }output
请输入星期几 (1-7): 7 星期日 2、循环结构 2.1、while 语句while 循环在循环条件为真时一直执行。
while (循环条件) { // 循环体 }eg:计算 1 到 100 的和
#include <iostream> using namespace std; int main() { int i = 0, sum = 0; while (i<101) { sum += i; i++; } cout << sum << endl; return 0; }output
5050 2.2、do-while 语句do-while 循环与 while 循环类似,但不同之处在于它至少执行一次循环体,即使在第一次迭代时循环条件为假。
do { // 循环体 } while (循环条件);计算 1到100 的和
#include <iostream> using namespace std; int main() { int i = 0, sum = 0; do { sum += i; i++; }while(i<101); cout << sum << endl; return 0; }output
5050 2.3、 for 循环for 循环通常用于已知执行次数的循环
for (初始化表达式; 循环条件; 步进表达式) { // 循环体 }eg,计算 1-100 的和
#include<iostream> using namespace std; int main(){ int sum = 0; for (int i = 0; i <= 100; i++) { sum += i; } cout << sum << endl; return 0; }output
5050注意,初始化表达式、循环条件、步进表达式都可以省略,循环体不能省略
#include<iostream> using namespace std; int main(){ int sum = 0, i = 0; for (;;) { if (i <= 100) sum += i++; else break; } cout << sum << endl; return 0; }output
5050允许两个或者两个以上的变量控制循环
#include<iostream> using namespace std; int main(){ int i1 = 1, i2 = 10; for (i1, i2; i1<i2; i1++, i2--) cout << i1 << " " << i2 << endl; return 0; }output
1 10 2 9 3 8 4 7 5 6 2.4、循环嵌套循环结构可以嵌套使用,即一个循环内部包含另一个循环。
#include<iostream> using namespace std; int main() { for (int i = 1; i <= 10; i++) { for (int j = i; j <= 10; j++) cout << "*"; cout << endl; } return 0; }output
********** ********* ******** ******* ****** ***** **** *** ** *再来个例子
#include<iostream> using namespace std; int main() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { cout << "i = " << i << ", j = " << j << endl; } } return 0; }output
i = 0, j = 0 i = 0, j = 1 i = 0, j = 2 i = 1, j = 0 i = 1, j = 1 i = 1, j = 2 i = 2, j = 0 i = 2, j = 1 i = 2, j = 2while、do-while、for 循环均可以相互嵌套
3、跳转结构break、continue、goto、return 4 种
3.1、break 语句用于立即退出循环或switch语句。
一个 break 只能跳出所在的最内层循环
#include<iostream> using namespace std; int main() { int num; for (int i = 0; i < 2; i++) { num = 1; while (1) { cout << num << endl; num++; if (num > 4) break; } } return 0; }output
1 2 3 4 1 2 3 4 3.2、continue 语句用于跳过循环中剩余的代码,并立即开始下一次迭代。
不能用在 switch 中
#include<iostream> using namespace std; int main() { int sum = 0; for (int i = 0; i <= 100; i++) { if (i % 10 != 0) continue; sum += i; } cout << sum << endl; return 0; }output
550 3.3、goto 语句用于无条件跳转到同一函数内的标签位置。
适用于从多层循环中直接跳出,如果用 break 的话,需要多个
#include<iostream> using namespace std; int main() { int num = 10; if (num > 0) { goto positive; // 跳转到标签 positive } cout << "Number is negative or zero.\n"; goto end; // 跳转到标签 end positive: cout << "Number is positive.\n"; end: return 0; }output
Number is positive. 3.4、return 语句用于从函数返回一个值(如果函数有返回值类型)或无条件退出函数。
4、应用实例eg 3-10 判断正整数是否为素数
#include <iostream> #include<math.h> using namespace std; int main() { int x,i,b; int num = 5; while(num) { cin >> x; b = sqrt(x); num--; if (x <= 1) { cout << "False\n"; continue; } for (i=2; i<=b; i++) { if (x % i == 0) break; } if (i>=b+1) cout << "True\n"; else cout << "False\n"; } return 0; }output
0 False 1 False 2 True 3 True 9 False设置了可以输入 5 次,for 循环的判断边界为 sqrt(x)可以提高计算效率,最后判断是否为素数的条件 i>=b+1 也很巧妙,注意算法的边界测试,if (x <= 1) 就是来弥补边界漏洞的
eg 3-11 使用循环语句求解 300 -400 范围内的所有素数
#include <iostream> #include<math.h> using namespace std; int main() { int i,b; for (int x=301; x<401; x+=2) { b = sqrt(x); for (i=2; i<=b; i++) { if (x % i == 0) break; } if (i>=b+1) cout << x << " "; } return 0; }output
307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397可以看到 for 循环中的自增项采用的是 x+=2,进一步优化了计算速度,因为偶数肯定可以除以2余0,不是素数,我们遍历所有奇数即可
eg 3-12 用公式 π 4 = 1 − 1 3 + 1 5 − 1 7 + . . . \frac{\pi}{4} = 1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+... 4π=1−31+51−71+... 求圆周率 π 的近似值,直到最后一项的绝对值小于 1 0 − 8 10^{-8} 10−8 为止
注意审题,最后一项的绝对值,而不是整个式子的绝对值
#include <iostream> #include<math.h> #include<iomanip> using namespace std; int main() { double i = 3.0; double x=1.0, result=1.0; int sign = 1; while(fabs(x)>=1e-8) { sign *= -1; x = sign / i; i+=2; result += x; cout << x <<endl; } //cout << result * 4; cout << setiosflags(ios::fixed) << setprecision(8) << result * 4; // 输出小数点后八位 return 0; }output
3.14159267程序会运行很久
abs 函数通常用于整数类型(如 int、long 等)。
fabs 函数专门用于浮点数类型(如 float、double 等)。
这里正负符号的转变很巧妙 sign *= -1;
【C++】FlowofControl由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【C++】FlowofControl”
上一篇
第一章Java面向对象进阶
下一篇
曙光服务器安装centos8