控制流程
- 顺序流程
- 分支流程
- 循环流程
分支流程
- if(测试条件)
条件为真所执行的流程; - else
条件为假所执行的流程;
if和else仅对后面的一条语句产生效果且if和else之间仅允许有一条语句(可使用复合语句)
if和else后不加;
复合语句
嵌套语句
例子
if(小于2)
{
输出left
}
else
{//花括号
if(2到10之间)
{
输出in
}
else
{
输出right
}
}//花括号
可省略花括号 从而写成
if(小于2)
{
输出left
}
else if(2到10之间)
{
输出in
}
else
{
输出right
}
#include<stdio.h>
int main()
{
int x;
scanf("%d", &x);
if (x < 2 )
{
printf("left\n");
}
else if (2 <= x && x <= 10)
{
printf("in\n");
}
else
{
printf("rignt\n");
}
return 0;
}
更复杂的例子
#include<stdio.h>
int main()
{
int x;
scanf("%d", &x);
if(x < 60)
{
printf("不及格\n");
}
else if(x>=60 && x<70)
{
printf("及格\n");
}
else if(x>=70 && x<80)
{
printf("一般\n");
}
else if(x>=80 && x<90)
{
printf("良好\n");
}
else
{
printf("优秀\n");
}
return 0
}
条件运算符
优先级很低
循环流程
while循环
- while(循环条件)
循环行为
while仅对后面的一条语句产生效果且while后允许有一条语句(可使用复合语句)
while后不加;
- 开始时 为计数器设置初始值(否则循环次数错误)
- 计数器与一个有限值比较作为循环条件(否则无法开始或结束循环)
- 更新计数器(否则无法结束循环)
例如高斯求和
#include<stdio.h>
int main()
{
int i = 1, sum = 0;
while (i <= 100)
{
sum = i + sum;
i++;
}
printf("%d %d\n", i, sum);
return 0;
}
for循环
- for(计数器设置初始值;循环条件;计数器更新)
循环行为 - for循环括号内的三个部分可以写在别的地方 例如计数器初始化可以放在上面 计数器更新可以放在复合语句中 循环条件为空导致死循环
- 死循环for(;;) for(;100;) while(100)
for仅对后面的一条语句产生效果且for后允许有一条语句(可使用复合语句)
for后不加;
for循环要注意逗号表达式
eg 高斯求和
#include<stdio.h>
int main()
{
int i, sum = 0;
for (i = 1; i <= 100; i++)
{
sum = i + sum;
}
printf("%d %d\n", i, sum);
return 0;
}
也可以把i放在计数器初始化时声明 则i仅在循环内有效 结束循环后失效
#include<stdio.h>
int main()
{
int sum = 0;
for(int i = 1; i <= 100; i++)
{
sum = i + sum;
}
printf("%d\n", sum);
return 0;
}
eg 打印三角形
do while 循环
- do
循环行为(花括号后不加分号)
while(循环条件);
eg 输入正数或者0为止
#include<stdio.h>
int main()
{
int x;
do
{
scanf("%d", &x);
}
while (x < 0);
printf("%d\n", x);
return 0;
}
eg 猜数字
循环嵌套
eg 输出从A1到E9
#include<stdio.h>
int main()
{
for (char c = 'A'; c <= 'E'; c++)
{
for (int i = 1; i <= 9; i++)
{
printf("%c%d", c, i);
}
printf("\n");
}
return 0;
}
循环辅助
break
- 结束整个循环 执行循环结构下面的语句
eg 用户输入密码 若密码不为12345 则密码错误 若为12345 则跳出循环
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int password;
while(1)
{
scanf("%d", &password);
if (password == 12345)
break;
else
printf("password error");
}
printf("welcome back");
return 0;
}
continue
- 跳过本次循环 直接开始新一轮循环
eg 输入1-5 15-19
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int i = 0;
while(i < 20)
{
if (i == 6)
{
i = 15;
continue;
}
printf("%d\n", i);
i++;
}
return 0;
}
goto
for中使用break和continue
- break 直接跳出循环 不再更新计数器
- continue 立即更新计数器再进入新循环
循环嵌套中使用break和continue
- 作用于直属上级循环
多重选择switch
- switch(整形表达式)
{
case 整型常量1:
语句
case 整型常量2:
语句
default:
语句 ......
} - 若不想执行后续语句要使用break跳出switch(仅跳出switch 不作用于上级)
- continue不能作用于switch 可作用于while
- 括号中只能填一个整形表达式
- case后的常量不能有重复的
- 可以没有default
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char c;
while (1)
{
scanf("%c", &c);
switch (c)
{
case 'a':
printf("alpha\n");
break;
case 'b':
printf("bravo\n");
break;
default:
printf("i don't know\n\n");
}
getchar();//清除未被吸收的输入
}
return 0;
}