第五章 流程控制
概述
- 三种结构:顺序、选择、循环
- 顺序结构:从上到下
- 选择结构:分支机构,是否满足,有选择的执行
- 循环结构:条件是否满足,重复多次
选择结构
if
- 语法
if(表达式){
语句
}
- 执行逻辑
- 示例
int a;
scanf("plz input a integer number:",&a);
if(a>10){
printf("a>10\n");
}
return 0;
if...else
- 语法
if(表达式){
语句1
}
else{
语句2
}
- 执行逻辑
- 如果表达式1成立(为真),则执行语句1;否则执行语句2
- 示例
if...else if..else语句
- 语法
if(表达式1){
语句1
}
else if(表达式2){
语句2
}
...
else if(表达式n-1)
语句n-1
}
else{
语句n
}
- 顺序
- 示例
switch 语句
- 语法
switch(表达式:整数){
case 常量表达式1:语句1;break;整型
case 常量表达式2:语句2;break;
...
case 常量表达式n-1:语句n-1;break;
default:语句n//默认
}
选择语句嵌套
- 语法
if(表达式1){
if(表达式2){
语句1
}
else{
语句2
}
}
else//else if()
if(表达式3){
语句3
}
else{
语句4
}
}
- 示例
if(体育老师生病了){
if(语文老师没课){
上语文课
}
else{
上自习
}
}
else//else if()
{
上体育课
}
}
循环结构
while 语句
- 语法
while(表达式){
语句
}
- 表达式为真,执行循环直到表达式为假
- 示例
while(x!=0){
printf("%d\n",x);
x--;
}
return 0;
}
do while语句
- 语法
do{
语句
}while(表达式);
- 与while的区别do while 至少执行一次
for 语句
- 语法
for (表达式1;表达式2;表达式3){
语句
}
- 逻辑
- 首先表达式1
- 表达式2;语句;表达式3(循环)
- 表达式2结果为假结束
- for (;;)无限循环
练习
- 求某个整数二进制表达形式中有多少个1
- 求5的接层
循环嵌套
- 循环中有循环逻辑
- 示例
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%d\t",i.j,i*j);
}
printf("/n");
}
- N+M+...+
break 语句:终止循环
- break在switch 语句中
- break用于switch,可使程序跳出switch,如果没有将会继续下一个case(不论case后面的表达式结果与switch是否相等),直到遇到break;
switch()
{
case1:printf("1\n");break;
case2:printf("2\n");
case3:printf("3\n");break;
case4:printf("4\n");break;
}
2. 上面case2后面没有break,所以当x=2时。输出结果位2 3
3. 思考:如何使用switch语句首先在键盘上输入一个月份如何输出对应月份的天数?
- break 中循环语句:
- break 语句用于do-while\for\while 循环语句跳出循环,可使程序终止循环而执行循环后面的语句,通常break1语句与if语句一起应用。即满足条件跳出循环。
int m.n;
for (m=0;m<10;m++){
for(n=0;n<10;n++){
if(n==3)
break;
printf("%d\n",n);
}
}
continue语句
- 结束本次循环,继续下次循环:0,1,2,4,5,6,7,8,9:不打印3
int m,n;
for (m=0;m<10;m++){
for(n=0;n<10;n++){
if(n==3)
continue;
printf("%d",n);
}
}
调试
- 卡住了:scanf()
printf("[%d %s]x:%d",__func__,__LINE__,x);
scanf("%d %d\n",&x,&y);//scanf后面加\n回一直输入直到遇到1非空白字符回车键也不行
- 陷入死循环(无限循环):打印循环变量和比较值
- 循环变量忘记自增或自减
- printf()语句
- 程序异常退出:除法判断除数是否为0;数组越界;指针访问错\越界
- 预期不一致:使用printf
练习:
- C语言中:^是异或;平方要xxxx

浙公网安备 33010602011771号