- 概述
- 选择结构
- if语句
- 三目运算符
- switch语句
- 循环结构
- while语句
- do while语句
- for语句
- 嵌套循环
- 跳转语句
- break语句
- continue
- goto
C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。
- 顺序结构:程序按顺序执行,不发生跳转。
- 选择结构:依据是否满足条件,有选择的执行相应功能。
- 循环结构:依据条件是否满足,循环多次执行某段代码。
if…else语句
if…else if…else语句
示例一:
#define _CRT_SECURE_NO_WARNINGS #includeint main(void) { int score; scanf("%d", &score); //如果表达式结果为真,执行{}对应的代码 //if(表达式) {} //if(表达式){} else {} //if(表达式1) {} else if(表达式2) {} else 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 #includeint 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#define MAX(a,b) (a)>(b)?(a):(b) //宏定义一个函数 int main1101(void) { int a = 10; int b = 20; int c; //表达式1?表达式2:表达式3 //c = a > b ? a : b; //printf("最大值为:%dn", c); printf("最大值为:%dn", a > b ? a : b); //if (a > b) //{ // printf("a大n"); //} //else //{ // printf("b大n"); //} return 0; } int main(void) { int a = 10; int b = 20; printf("%dn", MAX(a, b)); return 0; }
结果:
最大值为:20switch语句
switch根据开关判断比if语句的执行效率高,但是在判断区间时只能判断一个区间。不允许嵌套
示例:
#define _CRT_SECURE_NO_WARNINGS #includeint 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语句
示例一:
#includeint main(void) { int i = 1; while (i <= 20) { if(i % 2 == 0) { printf("%dt", i); } i++; } return 0; }
结果:
2 4 6 8 10 12 14 16 18 20
示例二:逢7或7的倍数敲桌子
#includeint main(void) { int i = 50; while (i < 81) { //7的倍数 ||各位带7 ||十位带7 if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)//%表述余数为0,/表示商为7 { printf("敲桌子n"); } else { printf("%dn", i); } i++; } return 0; }
结果:
50 51 52 53 54 55 敲桌子 敲桌子 58 59 60 61 62 敲桌子 64 65 66 敲桌子 68 69 敲桌子 敲桌子 敲桌子 敲桌子 敲桌子 敲桌子 敲桌子 敲桌子 敲桌子 敲桌子 80do while语句
先执行语句,再进行条件判断。
示例一:
#includeint main() { int i = 0; do { printf("%dn", i); i++; } while (i < 10); return 0; }
结果:
0 1 2 3 4 5 6 7 8 9
示例二:水仙花 从100-999各个位数的立方和等于这个数本身,就是一个水仙花数。
#include#include 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("%dn", i); } i++; } while (i <= 999); return 0; }
//用while语句写 #includeint 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("%dn", i); } i++; } return 0; }
结果:
153 370 371 407for语句
执行顺序:1-2-4-3-2-4-3-2-4-3…
死循样式:
- while(1)
- for( ; ; )
示例一:产生随机数
#include#include #include int main(void) { //产生随机数 //1.导入头文件 time.h stdlib.h //2.添加随机数种子 //3.获取随机数 srand((unsigned int)time(NULL));//每次随机数不一样 for (int i = 0; i < 10; i++) { int value = rand() % 10;//0-9 printf("%dn", value); } return 0; }
结果:
2 7 3 2 6 5 5 5 6 4
示例二:猜数字
#define _CRT_SECURE_NO_WARNINGS #include#include #include int main(void) { //产生随机数 //1.导入头文件 time.h stdlib.h //2.添加随机数种子 //3.获取随机数 srand((unsigned int)time(NULL));//每次随机数不一样 // for (int i = 0; i < 10; i++) // { // int value = rand() % 10;//0-9 // printf("%dn", value); // } int value = rand() % 100;//0-99 int num; for (;;) { printf("请输入一个1-100的数字:"); scanf("%d", &num); if (value > num) { printf("输入太小了n"); } else if(value 结果:
请输入一个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 输入正确嵌套循环循环语句之间可以相互嵌套:
示例一:#includeint main(void) { for (int i = 0; i < 5; i++)//外层执行一次,内层执行一周。 { for (int j = 0; j < 5; j++) { printf("i=%d,j=%dn", 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#include 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:%02dn",i,j,k); Sleep(950); } } } return 0; } 示例三:九九乘法表
//九九乘法表 //1*1=1 //1*2=2 2*2=4 //1*3=3 2*3=6 3*3=9... int main(void)//外层控制行,内层控制列 { for (int i = 1; i <= 9; i++) { for (int j = 1;j <= i; j++) { printf("%d*%d=%dt",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结构。
- 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。
- 当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。
示例:#includeint main(void) { for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { if (j == 5)//入股满足则跳出离其最近的循环 { break; } printf("%d %dt", 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 4continue在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。(循坏还继续)
示例:#includeint main(void) { for (int i = 0; i < 20; i++) { if (i % 2 == 1) { continue; } printf("%dn", i); } return 0; } 结果:
0 2 4 6 8 10 12 14 16 18goto无条件跳转,尽量少用
示例一:#includeint main(void) { printf("hello world1n"); printf("hello world2n"); goto FLAG;//跳转 printf("hello world3n"); printf("hello world4n"); FLAG: printf("hello world5n"); printf("hello world6n"); return 0; } 结果
hello world1 hello world2 hello world5 hello world6#includeint main(void)//方法二 { printf("hello world1n"); printf("hello world2n"); goto FLAG; return 0; FLAG: printf("hello world5n"); printf("hello world6n"); return 1; } 示例二:
#includeint main(void) { int i = 0, j = 0; for ( i = 0; i < 10; i++) { if (i == 5) { goto FLAG;//可以从一个循环跳转到另一个循环。 } printf("%dn",i); } for (j = 0; j< 10; j ++ ) { FLAG: printf("%dn", j); } return 0; } 结果:
0 1 2 3 4 0 1 2 3 4 5 6 7 8 9



