Lesson4 程序流程结构


4.程序流程结构

4.1 概述

最基本的三种结构:顺序、选择、循环结构

三目运算符可以用来宏定义表达式,#define XXX A?B:C

#include
#define MAX(a,b) (a)>(b)?(a):(b)

int main()
{
	int a = 10;
	int b = 20;
	printf("%d\n", MAX(a, b));
}

输出:

20

#define _CRT_SECURE_NO_WARNINGS 这行代码需要写到include文件前面

#define _CRT_SECURE_NO_WARNINGS
#include


int main()
{
	int score;
	scanf("%d", &score);
	switch (score/10)
	{
	case 10:
		printf("优秀!\n");
		break;
	case 9:
		printf("优秀!\n");
		break;
	case 8:
		printf("良好!\n");
		break;
	case 7:
		printf("及格!\n");
		break;
	default:
		printf("不及格!\n");
		break;
	}
}

输入:81

输出:良好!

逢7过测试:

#include

int main()//逢7过的游戏
{
	int i = 1;
	while (i < 100)
	{
		//7的倍数||个位带7||十位带7
		if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) {
			printf("敲桌子\n");
		}
		else {
			printf("%d\n", i);
		}
		i++;
	}
	
	return 0;
}

结果:

1
2
3
4
5
6
敲桌子
8
9
10
11
12
13
敲桌子
15
16
敲桌子
18
19
20
敲桌子
22
23
24
25
26
敲桌子
敲桌子
29
30
31
32
33
34
敲桌子
36
敲桌子
38
39
40
41
敲桌子
43
44
45
46
敲桌子
48
敲桌子
50
51
52
53
54
55
敲桌子
敲桌子
58
59
60
61
62
敲桌子
64
65
66
敲桌子
68
69
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
80
81
82
83
敲桌子
85
86
敲桌子
88
89
90
敲桌子
92
93
94
95
96
敲桌子
敲桌子
99

int main()
{
	char a = 0;
	do
	{
		printf("%d\n", a);
		a++;
	} while (a);
	return 0;
}

这个程序会到溢出时停止

结果:

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
-128
-127
-126
-125
-124
-123
-122
-121
-120
-119
-118
-117
-116
-115
-114
-113
-112
-111
-110
-109
-108
-107
-106
-105
-104
-103
-102
-101
-100
-99
-98
-97
-96
-95
-94
-93
-92
-91
-90
-89
-88
-87
-86
-85
-84
-83
-82
-81
-80
-79
-78
-77
-76
-75
-74
-73
-72
-71
-70
-69
-68
-67
-66
-65
-64
-63
-62
-61
-60
-59
-58
-57
-56
-55
-54
-53
-52
-51
-50
-49
-48
-47
-46
-45
-44
-43
-42
-41
-40
-39
-38
-37
-36
-35
-34
-33
-32
-31
-30
-29
-28
-27
-26
-25
-24
-23
-22
-21
-20
-19
-18
-17
-16
-15
-14
-13
-12
-11
-10
-9
-8
-7
-6
-5
-4
-3
-2
-1

int main()
{
	int j = 5;
	for (int i = 0; i < 10,j<10; i++,j+=5)//C99库可以直接在for()里面定义i,C89需要提前定义int i;
	//在for循环中可以有多个条件,用逗号分隔开,相当于是&&条件
	{
		printf("%d\n",i);

	}
	return 0;
}

输出:

在循环语句中遇到break表示跳出循环

死循环:while(1),for(;??

//猜数字
//通过程序随即一个1-100之内的数

int main()
{
	//产生随机数:1.导入头文件time.h 2.添加随机数种子 3.获取随机数
	srand((unsigned int)time(NULL));//保证每次随机数不一样
	
	for (int i = 0; i < 10; i++)
	{
		int value = rand()%10 ;//0~9
		int num;
		for (;;) //给无限次猜的机会
		{
			printf("请输入数字:\n");
			scanf("%d", &num);
			if (value > num) {
				printf("您输入的数字太小了!\n");
			}
			else if (value < num) {
				printf("您输入的数字太大了!\n");
			}
			else {
				printf("恭喜你猜对了!\n");
					break;//为死循环打开出口
			}
		}

		printf("需要猜的数字是:%d\n", value);
	}
	return 0;
}

可以自动生成一个数字,然后键盘输入猜数字

计时器:

#include 
#include 

//写一个读秒计时器
int main()
{
	for (int i = 0; i < 24; i++)
	{
		for (int j = 0; j < 60; j++)
		{
			for (int k = 0; k < 60; k++)
			{
				system("cls");//清屏
				printf("%02d:%02d:%02d\n", i, j, k);
				Sleep(1000);//休眠1000ms
			}
		}
	}
}

4.4 跳转语句break,continue,goto

4.3.1 break语句

在switch和循环语句中可以使用break

  • 在switch中作用是终止某个case并且跳出switch结构
  • 循环语句是跳出当前循环,嵌套语句中是跳出当前内循环

4.3.2 continue语句

立即终止本次循环,并且开始执行下一次循环

打印0-100偶数:

#include

int main()
{
	for (int i = 0; i < 100; i++)
	{
		if (i % 2 == 1)
		{
			continue;
		}
		printf("%d\n", i);
	
	}
	return 0;
}

输出:

0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
92
94
96
98

4.3.3 goto语句(无条件跳转,尽量少用)

用法:定义一个标志位,跳转到该标志位

int main()
{
	printf("hello world1\n");
	printf("hello world2\n");
	goto FLAG;
	printf("hello world3\n");
	printf("hello world4\n");
	printf("hello world5\n");
	FLAG:
	printf("hello world6\n");

	return 0;
}

hello world1
hello world2
hello world6

int main()
{
	int i=0;
	int j=0;//在这里不给j赋初始值的话,会一直循环执行,因为后面for里面的是局部变量
	for (i = 0; i < 10; i++)
	{
		if (i == 5) {
			goto FLAG;
		}
		printf("i=%d\n", i);
	}

	for (j = 0; j < 10; j++)
	{
		FLAG:
		printf("j=%d\n", i);
	}
}

输出结果:

i=0
i=1
i=2
i=3
i=4
j=5
j=5
j=5
j=5
j=5
j=5
j=5
j=5
j=5
j=5

利用goto实现的死循环:

int main()
{
FLAG2:
	printf("hello world!\n");
	goto FLAG2;
	return 0;
}