Linux下C语言教程-李慧芹老师-第四章

配套代码笔记仓库

目录

流程控制

  1. 顺序,选择,循环
  2. NS图,流程图(工具:Visio,Dia)
  3. 简单结构与复杂结构:自然流程
  • 顺序:语句逐句执行
  • 选择:出现了一种以上的情况
  • 循环:在某个条件成立的情况下,重复执行某个动作

关键字

  • 选择:if-elseswitch-case
  • 循环:whiledo-whileforif-goto
  • 辅助控制:continuebreak

详解选择

if-else

1
2
3
4
5
6
7
8
// 格式
if(exp)
cmd;
// 或者:
if(exp)
cmd1;
else
cmd2;

else只与离它最近的if匹配

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
#include <stdio.h>
#include <stdlib.h>

/**
* score [90-100] A
* score [80-90) B
* score [70-80) C
* score [60-70) D
* score [0-60) E
*/

// 闰年的判断:能被4整除但不能被100整除,或者能被400整除

int main()
{

int year;

scanf("%d", &year);

if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
printf("%d is leap year.\n", year);
else
printf("%d is not leap year\n.", year);

#if 0
int score;

printf("Enter a score:[0,100]:\n");
scanf("%d", &score);

if (score < 0 || score > 100)
{
fprintf(stderr, "Input error!\n");
exit(1);
}

if (score > 90)
puts("A");
else if (score > 80)
puts("B");
else if (score > 70)
puts("C");
else if (score > 60)
puts("D");
else
puts("E");
#endif

#if 0
if (score <= 100 && score >= 90)
puts("A");
if (score <= 90 && score >= 80)
puts("B");
if (score <= 80 && score >= 70)
puts("C");
if (score <= 70 && score >= 60)
puts("D");
if (score <= 60 && score >= 0)
puts("E");
#endif

#if 0
int a = 1, b = 1,c=2;
if (a == b)
if(b==c)
printf("a==b\n");
else
printf("a!=b\n")
注意:else看的是最近的if!!!
#endif

#if 0
int a = 9, b = 10;

if (b++ < a)
printf("1\n");
else
printf("0\n");

printf("a=%d,b=%d\n", a, b);

printf("%d\n", (++b < a, ++a, b++));
#endif

exit(0);
}

switch-case

1
2
3
4
5
6
7
8
9
10
// 格式
switch(exp)
{
case 常量或常量表达式:
break;
case 常量或常量表达式:
break;
......
default:
}
  1. 最好的是考虑到所有的情况写出来,在default进行报错,而不是省略一个情况放到default里。
  2. case后面要的是常量或常量表达式,例如放score/10 >= 9就是不行的。
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
#include <stdio.h>
#include <stdlib.h>

int main()
{
int ch;

ch = getchar();

switch (ch)
{
case 'a':
case 'A':
printf("Ant\n");
break;
case 'b':
case 'B':
printf("Butterfly\n");
break;
case 'c':
case 'C':
printf("Cobra\n");
break;
default:
printf("Input error");
// break;
// default可以不用
}

#if 0
int score;

printf("Please enter:\n");
scanf("%d", &score);

if (score < 0 || score > 100)
{
fprintf(stderr, "EINVAL\n");
exit(1);
}

switch (score / 10)
{
case 10:
case 9:
puts("A");
break;
case 8:
puts("B");
break;
case 7:
puts("C");
break;
case 6:
puts("D");
break;
default:
puts("E");
break;
}
#endif

exit(0);
}

详解循环

while

1
2
3
// 最少执行0次
while(exp)
loop;

do-while

1
2
3
4
5
6
// 最少执行1次
do
{
loop;
}while(exp);

for

1
2
3
// 最少执行0次
for(exp1;exp2;exp3)
loop;

goto

  • 慎重使用if-goto
  • goto实现的是 无条件的跳转,且不能跨函数跳转

死循环

1
2
while(1);
for(;;);

ctrl + c杀掉死循环。

辅助控制

breakcontinue

练习专题

1

A以每年10%的单利息投资了100美元,B以每年5%的复合利息投资了100美元。

求需要多少年,B的投资总额超过A,并且输出当时各自的资产总额

2

从终端读入数据,直到输入0为止,计算出其中的偶数的个数和平均值,奇数的个数和平均值

3

从终端输入若干字符,统计元音字母

4

写出fibonacci数列的前40项,不能用数组

1, 1, 2, 3, 4, 5, 8, …

5

输出九九乘法表

6

百钱买百鸡,公鸡5元,母鸡3元,鸡仔1元,算出来买的各自多少只

7

输出1000内的水仙花数:

153: 1+125+27 =153

8

求出1000以内的所有的质数

2, 3, 5, 7, 11, 13, 17

9

在终端实现如下输出

ABCDEF

BCDEF

CDEF

DEF

EF

F

10

包括钻石型

1
2
3
4
5
 *
* *
* * *
* *
*

11

从终端输入N个数,以字母Q/q作为终止,求和。

12

从半径为1开始,输出圆的面积,直到面积大于100为止


Linux下C语言教程-李慧芹老师-第四章
http://sinlatansen.github.io/2024/04/01/Linux下C语言教程-李慧芹老师-第四章/
作者
fugu
发布于
2024年4月1日
许可协议