顺序结构

C语言程序默认的执行流程,按照代码的先后顺序,从上到下依次执行

分支结构

if结构的三种格式

if第一种格式:单分支

if (关系表达式)
{
语句体;
}

执行流程:
(1)首先计算关系表达式的值
(2)如果关系表达式成立时就执行语句体
(3)如果关系表达式不成立就不执行语句体
(3)继续执行后面的其他语句

if第二种格式:双分支

if (关系表达式)
{
语句体1;
}
else
{
语句体2;
}
执行流程:
(1)首先计算关系表达式的值
(2)如果关系表达式的值为true就执行语句体1
(3)如果关系表达式的值为false就执行语句体2
(4)继续执行后面的其他语句

if第三种格式:多分支

if (关系表达式1)
{
语句体1;
}
else if(关系表达式2)
{
语句体2;
}
…..
else
{
语句体n;
}

执行流程:
(1)首先计算关系表达式1的值如果为true就执行语句体1;
(2)如果为false就计算关系表达式2的值如果为true就执行语句体2;
(3)如果为false就计算关系表达式3的值
(4)……
(5)如果所以关系表达式结果都为false,就执行语句体n+1。

switch分支结构

switch(表达式)
{
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;

default:
语句体n+1;
break;
}

格式说明:
(1)表达式:必须是整型(将要匹配的值)。
(2)case:后面跟的是要和表达式进行比较的值 (被匹配的值)。
(3)break:表示中断,结束的意思,用来结束switch语句。
(4)default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
// case穿透性
int main()
{
int month = 0;
printf("输入月份1-12:\n");
scanf("%d", &month);
switch (month)
{
case 3:
case 4:
case 5:
printf("Spring\n");
break;
case 6:
case 7:
case 8:
printf("Summer\n");
break;
default:
printf("您输入的月份有误,请重新输入\n");
}
return 0;
}

循环结构

for循环

for(初始化语句;条件判断语句;条件控制语句)
{
循环体语句;
}

执行流程:
(1)执行初始化语句
(2)执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,执行循环体语句
(3)执行条件控制语句
(4)回到(2)继续执行条件判断语句

while循环

初始化语句;
while(条件判断语句)
{
循环体语句;
}

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
//自幂数:一个n位正整数,她的各位数字的n次方和等于它本身
#include<stdio.h>
#include<math.h>
int main(){
int n1 = 0,n2=0,sum=0;
scanf("%d",&n1);
for (int i = 1; i <= n1; i++)
{
n2 = i;
int n = 0;//位数
while (n2!=0)//计算位数
{
n2/=10;
n++;
}
n2 = i;
while (n2!=0)
{
sum = sum + pow(n2%10,n);
n2/=10;
}
if (i == sum)
{
printf("%d是自幂数\n",i);
}
}
return 0;
}

do…while循环

初始化语句;
do
{
循环体语句;
} while(条件判断语句);

高级循环

无限循环(死循环)

循环一直停不下来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main() {
while (1)
{
printf("while\n");
}
for (;;)
{
printf("for\n");
}
do
{
printf("do--while\n");
}while(1);

return 0;
}

跳转控制语句

continue

跳过本次循环,继续执行下次循环。

break

结束break所在的循环。提前终止循环了。

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
// 随机数种子,不使用srand(time(NULL))的话每次运行程序,
//随机数种子都一样,产生随机数序列也都一样
int rn = rand() % 100 + 1; // rand() % 100 + 1 产生1-100之间的随机数
//计算公式:如果要产生[A-B]之间的随机整数,则:rand() % (B - A + 1) + A
//例如产生60-100分之间的随机整数,则:rand() % (100 - 60 + 1) + 60 ----> rand() % 41 + 60

int num = 0;
printf("请输入一个你猜的数字(1~100):");
scanf("%d", &num);
while (1)
{
if (num > rn)
{
printf("您猜大了\n");
}
else if (num < rn)
{
printf("您猜小了\n");
}
else
{
printf("恭喜您,猜对了!rn = %d\n", rn);
break;
}
printf("请再输入一个你猜的数字:");
scanf("%d", &num);
}
return 0;
}