概述
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
- 顺序结构:程序按顺序执行,不发生跳转。
- 选择结构:依据是否满足条件,有选择的执行相应功能。
- 循环结构:依据条件是否满足,循环多次执行某段代码。
选择结构
if语句
if…else语句 if…else if…else语句
示例一:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
int score;
scanf("%d", &score);
if (score > 700)
{
printf("我要上清华。\n");
if (score > 720)
{
printf("我要学习算机。\n");
}
else if (score > 710)
{
printf("我要学习自动化。\n");
}
else
{
printf("我要学习人工智能。");
}
}
else if (score > 680)
{
printf("我要上北大。");
}
else
{
printf("我要上传智。");
}
return 0;
}
结果:
712
我要上清华。
我要学习自动化。
示例二:三只小猪称体重
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
int a, b, c;
printf("请输入三只小猪的体重:");
scanf("%d%d%d", &a, &b, &c);
if (a > b)
{
if (a > c)
{
printf("a小猪是最重的。");
}
else
{
printf("c小猪是最重的。");
}
}
else
{
if (b > c)
{
printf("b小猪是最重的。");
}
else
{
printf("c小猪是最重的。");
}
}
return 0;
}
结果:
请输入三只小猪的体重:22 23 24
c小猪是最重的。
三目运算符
表达式1 ?表达式2 :表达式3 当表达式1满足的时候,执行表达式2,否则执行表达式3 示例:
#include<stdio.h>
#define MAX(a,b) (a)>(b)?(a):(b)
int main1101(void)
{
int a = 10;
int b = 20;
int c;
printf("最大值为:%d\n", a > b ? a : b);
return 0;
}
int main(void)
{
int a = 10;
int b = 20;
printf("%d\n", MAX(a, b));
return 0;
}
结果:
最大值为:20
switch语句
switch根据开关判断比if语句的执行效率高,但是在判断区间时只能判断一个区间。不允许嵌套 示例:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
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;
case 6:
printf("及格\n");
break;
default:
printf("不及格\n");
break;
}
return 0;
}
结果:
73
及格
循环结构
while语句
示例一:
#include<stdio.h>
int main(void)
{
int i = 1;
while (i <= 20)
{
if(i % 2 == 0)
{
printf("%d\t", i);
}
i++;
}
return 0;
}
结果:
2
4
6
8
10
12
14
16
18
20
示例二:逢7或7的倍数敲桌子
#include<stdio.h>
int main(void)
{
int i = 50;
while (i < 81)
{
if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)
{
printf("敲桌子\n");
}
else
{
printf("%d\n", i);
}
i++;
}
return 0;
}
结果:
50
51
52
53
54
55
敲桌子
敲桌子
58
59
60
61
62
敲桌子
64
65
66
敲桌子
68
69
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
敲桌子
80
do while语句
先执行语句,再进行条件判断。 示例一:
#include<stdio.h>
int main()
{
int i = 0;
do {
printf("%d\n", i);
i++;
} while (i < 10);
return 0;
}
结果:
0
1
2
3
4
5
6
7
8
9
示例二:水仙花 从100-999各个位数的立方和等于这个数本身,就是一个水仙花数。
#include<stdio.h>
#include<math.h>
int main(void)
{
int i = 100;
do
{
int a = i % 10;
int b = i / 10 % 10;
int c = i / 100;
if (pow(a,3) +pow(b,3) + pow(c,3) == i)
{
printf("%d\n", i);
}
i++;
} while (i <= 999);
return 0;
}
#include<stdio.h>
int main(void)
{
int i = 100;
while (i <= 999)
{
int a = i % 10;
int b = i / 10 % 10;
int c = i / 100;
if (pow(a,3) +pow(b,3) + pow(c,3) == i)
{
printf("%d\n", i);
}
i++;
}
return 0;
}
结果:
153
370
371
407
for语句
执行顺序:1-2-4-3-2-4-3-2-4-3…
死循样式:
- while(1)
- for( ; ; )
示例一:产生随机数
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void)
{
srand((unsigned int)time(NULL));
for (int i = 0; i < 10; i++)
{
int value = rand() % 10;
printf("%d\n", value);
}
return 0;
}
结果:
2
7
3
2
6
5
5
5
6
4
示例二:猜数字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void)
{
srand((unsigned int)time(NULL));
int value = rand() % 100;
int num;
for (;;)
{
printf("请输入一个1-100的数字:");
scanf("%d", &num);
if (value > num)
{
printf("输入太小了\n");
}
else if(value<num)
{
printf("输入太大了\n");
}
else
{
printf("输入正确\n");
break;
}
}
return 0;
}
结果:
请输入一个1-100的数字:50
输入太大了
请输入一个1-100的数字:40
输入太大了
请输入一个1-100的数字:30
输入太大了
请输入一个1-100的数字:20
输入太大了
请输入一个1-100的数字:10
输入太大了
请输入一个1-100的数字:1
输入太小了
请输入一个1-100的数字:5
输入太大了
请输入一个1-100的数字:4
输入太大了
请输入一个1-100的数字:3
输入正确
嵌套循环
循环语句之间可以相互嵌套: 示例一:
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
printf("i=%d,j=%d\n", i, j);
}
}
return 0;
}
结果:
i=0,j=0
i=0,j=1
i=0,j=2
i=0,j=3
i=0,j=4
i=1,j=0
i=1,j=1
i=1,j=2
i=1,j=3
i=1,j=4
i=2,j=0
i=2,j=1
i=2,j=2
i=2,j=3
i=2,j=4
i=3,j=0
i=3,j=1
i=3,j=2
i=3,j=3
i=3,j=4
i=4,j=0
i=4,j=1
i=4,j=2
i=4,j=3
i=4,j=4
示例二:电子时钟
#include<stdio.h>
#include<Windows.h>
int main(void)
{
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(950);
}
}
}
return 0;
}
示例三:九九乘法表
int main(void)
{
for (int i = 1; i <= 9; i++)
{
for (int j = 1;j <= i; j++)
{
printf("%d*%d=%d\t",j, i, i*j);
}
printf("\n");
}
return 0;
}
结果:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
跳转语句
break语句
在switch条件语句和循环语句中都可以使用break语句(跳出循环):
- 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
- 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。
- 当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。
示例:
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
if (j == 5)
{
break;
}
printf("%d %d\t", i, j);
}
printf("\n");
}
return 0;
}
结果:
0 0 0 1 0 2 0 3 0 4
1 0 1 1 1 2 1 3 1 4
2 0 2 1 2 2 2 3 2 4
3 0 3 1 3 2 3 3 3 4
4 0 4 1 4 2 4 3 4 4
5 0 5 1 5 2 5 3 5 4
6 0 6 1 6 2 6 3 6 4
continue
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。(循坏还继续) 示例:
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 20; i++)
{
if (i % 2 == 1)
{
continue;
}
printf("%d\n", i);
}
return 0;
}
结果:
0
2
4
6
8
10
12
14
16
18
goto
无条件跳转,尽量少用 示例一:
#include<stdio.h>
int main(void)
{
printf("hello world1\n");
printf("hello world2\n");
goto FLAG;
printf("hello world3\n");
printf("hello world4\n");
FLAG:
printf("hello world5\n");
printf("hello world6\n");
return 0;
}
结果
hello world1
hello world2
hello world5
hello world6
#include<stdio.h>
int main(void)
{
printf("hello world1\n");
printf("hello world2\n");
goto FLAG;
return 0;
FLAG:
printf("hello world5\n");
printf("hello world6\n");
return 1;
}
示例二:
#include<stdio.h>
int main(void)
{
int i = 0, j = 0;
for ( i = 0; i < 10; i++)
{
if (i == 5)
{
goto FLAG;
}
printf("%d\n",i);
}
for (j = 0; j< 10; j ++ )
{
FLAG:
printf("%d\n", j);
}
return 0;
}
结果:
0
1
2
3
4
0
1
2
3
4
5
6
7
8
9
|