程序流程结构
- 顺序结构,程序按顺序执行,不发生跳转
- 选择结构,依据条件是否满足,有选择的执行相应功能
- 循环结构,依据条件是否成立,循环多次执行代码
goto语句
语法:goto 标签;
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
int main() {
printf("开始
");
goto A;
printf("没有goto A 标签
");
A:
printf("goto A标签
");
return 0;
}
运行结果:
开始
goto A标签
此时程序的流程如下:
也就是直接跳过goto下面的代码,直接执行标签A下面的代码
一般不建议使用 goto语句,因为这会使程序的结构混乱
选择结构
if else
语法:
if (条件表达式1)
{
代码段1
}
else if (条件表达式2)
{
代码段2
}
else
{
代码段3
}
当条件表达式1非0,执行代码段1,如果条件表达式2非0,且条件表达式1为0,执行代码段2,否则执行代码段3
else if可以省略,也可以有多个(不推荐)
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
int main() {
unsigned int a;
printf("请输入一个正数:");
scanf("%u", &a);
getchar();
if ((a % 2) == 0) {
printf("%d为偶数
", a);
}
else {
printf("%d为奇数
", a);
}
return 0;
}
运行结果:
请输入一个正数:5
5为奇数
该程序的流程如下:
多个else if和多个if的区别
// 多个else if
if (...) {
...
}
else if (...) {
...
}
else if (...) {
...
}
// 多个if
if (...) {
...
}
if (...) {
...
}
if (...) {
...
}
流程图分别如下:
多个if:
多个else if:
也就是说,当所有条件表达式都为真时,
多个if全部会执行,而多个else if只会执行一个
switch语句
语法:
switch (表达式)
{
case 值1:
代码段1;
break; // 跳出switch
case 值2:
代码段2;
break;
...
default:
代码段n;
break;
}
将整型表达式的值与case 后的值比较,如果与某个值相等,那么就跳到这个case后的代码段执行,如果都不相等,则执行default后的代码段
注意!switch和case后的表达式(值)必须是整型或字符!
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
unsigned int a;
printf("请输入:");
scanf("%u", &a);
getchar();
switch (a)
{
case 1:
printf("你选择了1
");
break;
case 2:
printf("你选择了2
");
break;
default:
printf("。。。
");
break;
}
return 0;
}
运行结果:
请输入:3
。。。
如果不加break,则会一直往下执行:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
char a;
printf("请输入:");
scanf("%c", &a);
getchar();
switch (a)
{
case 'a':
printf("你选择了a
");
case 'b':
printf("你选择了b
");
default:
printf("。。。
");
}
return 0;
}
运行结果:
请输入:a
你选择了a
你选择了b
。。。
循环结构
break和continue
break:跳出循环
continue:跳到下一轮循环
goto语句可以用来跳出多层循环
while循环
语法:
while (条件表达式) {
...
}
当条件表达式非0,就一直循环,否则跳出
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int i = 0;
while (i < 10)
{
printf("i = %d
", i);
++i;
}
return 0;
}
运行结果:
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
do while循环
语法:
do {
...
} while (条件表达式);
先执行一次循环体,再进行判断,如果条件表达式非0,那么继续循环,否则跳出循环
do while至少会执行一次,而while最少执行0次
for循环
语法:
for (语句1; 语句2; 语句3) {
...
}
语句1为变量初始化语句,比如int i = 0
语句2为条件表达式,如果语句2非0,则继续循环,否则跳出循环
语句3为每轮循环结束后要做的事情
最常见的形式:
for (int i = 0; i < 100; ++i) {
...
}
例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
for (int i = 0; i < 10; ++i) {
printf("i = %d
", i);
}
return 0;
}
运行结果:
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9
再比如:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
for (int i = 0; i < 100; ++i) {
if (i == 4) {
continue;
}
else if (i == 23) {
break;
}
printf("i = %d
", i);
}
return 0;
}
运行结果:
i = 0
i = 1
i = 2
i = 3
i = 5 # 注意,这里跳过了4
i = 6
i = 7
i = 8
i = 9
i = 10
i = 11
i = 12
i = 13
i = 14
i = 15
i = 16
i = 17
i = 18
i = 19
i = 20
i = 21
i = 22