顺序结构
程序按顺序执行,不发生跳转。
略
选择结构
依据是否满足条件,有选择的执行相应的功能。
if 语句
- 流程图
- if … else …
- if … else if … else if …
- if … else …
- 语法
if () {} else if () {} else if () {} else {}
- 匹配一个范围,属于模糊匹配
- 示例
- 判断成绩
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { // 100 - 90 优 90 -70 良好 70 - 60 及格 = 90 && score = 70 && score = 60 && score < 70) { printf("分数:%.2f, 及格\n", score); } else { printf("分数:%.2f, 不及格\n", score); } system("pause"); return 0; }
- 3 只小猪比较体重
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { // 3只小猪比较体重 int pig1 = 130; int pig2 = 50; int pig3 = 80; if (pig1 > pig2) { if (pig1 > pig3) { printf("pig1 is the weightest.\n"); } } else { if (pig2 > pig3) { printf("pig2 is the weightest.\n"); } else { printf("pig3 is the weightest.\n"); } } system("pause"); return 0; }
- 判断成绩
switch 语句
- 语法
switch (判别表达式) { case 1: 执行语句; break; case 2: 执行语句; break; case 3: 执行语句; break; default: break; }
- 匹配一个值,属于精确匹配
-
break 可以防止 case 穿透
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int score; scanf("%d", &score); switch (score/10) { case 10: //printf("%d 是优秀\n", score); //break; case 9: printf("%d 是优秀\n", score); break; case 8: //printf("%d 是优\n", score); //break; case 7: printf("%d 是优\n", score); break; case 6: printf("%d 是良好\n", score); break; default: printf("%d 是不及格\n", score); break; } system("pause"); return 0; }
- 示例:判断成绩
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int score; scanf("%d", &score); switch (score/10) { case 10: printf("%d 是优秀\n", score); break; case 9: printf("%d 是优秀\n", score); break; case 8: printf("%d 是优\n", score); break; case 7: printf("%d 是优\n", score); break; case 6: printf("%d 是良好\n", score); break; default: printf("%d 是不及格\n", score); break; } system("pause"); return 0; }
循环结构
依据条件是否满足,循环多次执行某段代码。
while
- 流程图
-
语法
while (条件判别表达式) { 循环体; }
- 示例
- 简单循环
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int a = 0; while (a < 10) { printf("%d\n", a); a++; } system("pause"); return 0; }
- 逢 7 敲桌子
“`c++
<h1>define _CRT_SECURE_NO_WARNINGS</h1>
<h1>include</h1>
<h1>include</h1>
int main(void)
{
// 0-100 的整数,递增,只要遇到7就敲桌子
// 包括3种情况:1.是7的倍数;2.个位为7;3.十位为7
int a = 1;<pre><code>while (a < 100)
{
if (a%7 == 0 || a%10 == 7 || a/10 == 7)
{
printf("%d, 敲桌子\n", a);
}
a++;
}system("pause");
return 0;
</code></pre>}
“`
- 简单循环
do … while …
-
流程图
-
语法
do { 循环体; } while (条件判别表达式);
- do … while … 中可以使用 break
- 示例
- 简单循环
“`c++
<h1>define _CRT_SECURE_NO_WARNINGS</h1>
<h1>include</h1>
<h1>include</h1>
int main(void)
{
int a = 0;<pre><code>do
{
printf("%d\n", a);
a++;
} while (a < 10);system("pause");
return 0;
</code></pre>}
“`
-
求水仙花数 (一个三位数,各个位上的数字的立方和等于数字本身)
“`c
define _CRT_SECURE_NO_WARNINGS
include
include
int main(void)
{
// 水仙花数,各个位上的数字的立方和等于数字本身
int a = 100;
do
{
int num_gewei = a % 10; // 个位数
int num_shiwei = (a / 10) % 10; // 十位数
int num_baiwei = a / 100; // 百位int sum = num_gewei * num_gewei * num_gewei + num_shiwei * num_shiwei * num_shiwei + num_baiwei * num_baiwei * num_baiwei; if (a == sum) { printf("%d\n", a); } a++; } while (a 表达式 2 (判别表达式) -> 为真 -> 循环体 -> 表达式 3 -> 表达式 2 (判别表达式) -> 为真 -> 循环体 ...
- 循环因子
- 定义在 for 之外,for 循环结束,也能使用
- 定义在 for 之内,for 循环结束,不能使用
- for 循环的 3 个表达式都可以变换、省略,但是分号不能省略
- 简单循环
-
示例
- 求 1-100 之间整数的和
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int i = 0; int sum = 0; for (i = 1; i<=100; i++) { sum = sum + i; //sum += i } printf("1-100 之间的整数和是:%d\n", sum); system("pause"); return 0; }
- 省略表达式 1、表达式 3 的写法
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int i = 1; int sum = 0; for (; i <= 100;) { sum = sum + i; //sum += i i++; } printf("1-100 之间的整数和是:%d\n", sum); system("pause"); return 0; }
- 猜数字游戏 (用到随机数)
#define _CRT_SECURE_NO_WARNINGS #include #include #include // time 使用 #include // srand 使用 int main(void) { // 生成一个随机数 srand(time(NULL)); int n = rand() % 100; // 通过取模控制随机数长度 0-99 printf("%d\n", n); // 开始猜数字 int i = 0; int a; for (;; i++) { scanf("%d", &a); // scanf("请输入一个数字 %d", &a); // 这种写法是错误的,应该避免 if (n == a) { printf("尝试了 %d 次成功.\n", i); break; } else if(n > a) { printf("输入的数字小了,请重新输入\n"); } else { printf("输入的数字大了,请重新输入\n"); } } system("pause"); return 0; }
- 死循环 (没有出口)
for(;;) == while(1)
- scanf 的错误写法
scanf("请输入一个数字 %d", &a);
- 死循环 (没有出口)
- 求 1-100 之间整数的和
嵌套循环
- 外层循环执行一次,内层循环执行一周
-
示例
- 模拟电子表打印
#define _CRT_SECURE_NO_WARNINGS #include #include #include // Sleep 所需 int main(void) { // 模拟电子表打印时间 int i = 0; int j = 0; int k = 0; for (i = 0; i<24; i++) // 时 { for (j = 0; j<60; j++) // 分 { for (k = 0; k<60; k++) // 秒 { Sleep(1000); system("cls"); printf("%02d:%02d:%02d\n", i, j, k); //system("cls"); } } } system("pause"); return 0; }
- 打印 99 乘法表
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int i = 0; int j = 0; for (i = 1; i<=9; i++) // 行 { for (j = 1; j <= i; j++) // 列 { printf("%d x %d = %d\t", j, i, i*j); } putchar('\n'); } system("pause"); return 0; }
- 打印 99 乘法表,倒序显示
#define _CRT_SECURE_NO_WARNINGS #include #include int main(void) { int i = 0; int j = 0; for (i = 9; i > 0; i--) // 行 { for (j = 1; j <= i; j++) // 列 { printf("%d x %d = %d\t", j, i, i*j); } putchar('\n'); } system("pause"); return 0; }
- 模拟电子表打印
结束循环
- break
- 跳出一重循环,如 for、while、do while
- 防止 case 穿透,如 swtich
- continue
- 结束本次循环
goto 关键字
设定一个标签,”goto 标签名” 直接跳到标签位置执行。
- 注意事项
- 只在函数内部生效
- goto 语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套中,跳出时,用 goto 语句则比较合理。
- 以下情况下,可以考虑用 goto 语句
- 从多重循环中直接跳出
- 出错时清除资源
- 可增加程序的清晰度的情况
- 示例
#define _CRT_SECURE_NO_WARNINGS #include #include #include int main(void) { printf("------------1\n"); Sleep(1000); printf("------------2\n"); LEBAL: printf("------------3\n"); Sleep(1000); printf("------------4\n"); Sleep(1000); printf("------------5\n"); Sleep(1000); printf("------------6\n"); goto LEBAL; printf("------------7\n"); Sleep(1000); printf("------------8\n"); system("pause"); return 0; }