C语言学习笔记之 程序流程结构

程序流程结构

  • 顺序结构,程序按顺序执行,不发生跳转
  • 选择结构,依据条件是否满足,有选择的执行相应功能
  • 循环结构,依据条件是否成立,循环多次执行代码

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
原文地址:https://www.cnblogs.com/zhujiangyu/p/13619987.html