循环与分支(知识总结)
一. if 语句
1.单分支 if 语句
if(表达式)
语句;
(1)代码示例
if(a==1)
printf("梦");
(2)执行流程
语义:首先计算表达式,如果表达式为“真”,则执行语句;否则不执行语句,直接执行 if 语句的下一条语句。
(3)注意
单分支 if 中的语句只能有一条,如果有多条应使用花括号括起来
示例代码:
#include<stdio.h>
int main()
{
int a=0;
int b=1;
if(a==1)
if(b==1)
printf("梦");
else
printf("渊");
return 0;
}
运行结果为空:
解释:其中的下方代码一般情况下为一个单分支语句(语句的结束标志为" ; "):
if(a==1)
if(b==1)
printf("梦");
但是在示例代码中 else 与 if(b==1) 配对构成一个 if-else 语句;所以 if(a==1) 的语句为下方代码:
if(b==1)
printf("梦");
else
printf("渊");
所以示例代码相当于:
#include<stdio.h>
int main()
{
int a=0;
int b=1;
if(a==1)
{
if(b==1)
printf("梦");
else
printf("渊");
}
return 0;
}
结合上面的流程图知:当 if(a==1) 判断为假时,不执行它的语句,直接执行下一条语句,即 return 0;
代码执行完毕,什么都没有打印,所以运行结果为空
2. 双分支 if 语句(if-else语句)
if(表达式)
语句1;
else
语句2;
(1)代码示例
if(a==1)
printf("梦");
else
printf("渊");
(2)执行流程
3.多分支
if(表达式)
语句1;
else if(表达式2)
语句2;
else if(表达式3)
语句3;
…
else
语句n;
(1)代码示例
if(a==1)
printf("梦");
else if(a==2)
printf("渊");
else if(a==3)
printf("wo");
else
printf("ya");
(2)执行流程
(3)运用
题目:实现下面分段函数
代码如下:
#include<stdio.h>
int main()
{
int x = 0;
scanf("%d", &x);
if (x >= 2)
printf("y=3\n");
else if (x > 0)
printf("y=%f\n", -1.0 / 2 * x);
else if (x >= -1)
printf("y=%d\n",2*x+2);
return 0;
}
在写 else if (x > 0) 时很多人会写 else if (x > 0&&x < 2),但这是不必要的,因为只有在
if (x >=2) 为假,即 x<2 时才会执行 else if (x > 0),后面同理
3. if语句的嵌套
(1) 悬空else
else 总是与离它最近的未匹配的 if 配对而与代码的排列无关
看下面一段代码:
#include<stdio.h>
int main()
{
int a=0;
int b=1;
if(a==0)
if(b==0)
printf("梦");
else
printf("渊");
return 0;
}
运行结果为 渊 而不是 梦 因为 else 是与 if(b==0) 配对的
(2)多条 if-else 语句
用花括号 {} 将它们区分开来
代码示例:
#include<stdio.h>
int main()
{
int a=0;
int b=1;
if(a==1)
{
if(b==1)
printf("梦");
else
printf("ya");
}
else
printf("渊");
return 0;
}
4.规范问题
当有多条语句时用花括号"{}"括起来比较好.
例如:
if(a==1)
{
printf("梦");
printf("入");
}
else if(a==2)
{
printf("渊");
printf("底");
}
else if(a==3)
printf("wo");
else
printf("ya");
5.其他需要注意的问题
(1) == 和 =
看下面一段代码:
#include<stdio.h>
int main()
{
int a=0;
if(a=1)
printf("梦");
else
printf("渊");
}
运行结果为 梦 并不是 渊
因为 a=1 表示将1赋给了a,导致表达式恒为真,进而打印的是 梦 而不是 渊
要打印 渊 应将 = 改为 ==
== 才表示判断,而 = 表示赋值,别写错了.
二. switch 语句
switch(表达式)
{
case 常量表达式 1 :语句1;break;
case 常量表达式 1 :语句1;break;
…
case 常量表达式 n :语句n;break;
default:语句 n+1;break;
}
1.代码示例
(1)
#include<stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default://默认值 可加可不加
printf("输入错误\n");
break;//这里的break可加可不加,但最好加上
}
return 0;
}
(2)
#include<stdio.h>
int main()
{
int month=0;
printf("输入月份:");
scanf("%d",&month);//int a=(month-1)/3;
switch((month-1)/3)//switch(a)
{
case 0:
printf("%d月是第1季度\n",month);
break;
case 1:
printf("%d月是第1季度\n",month);
break;
case 2:
printf("%d月是第1季度\n",month);
break;
case 3:
printf("%d月是第1季度\n",month);
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
2. 说明
(1) switch 后的表达式可以是任何表达式,形见示例,但其值只能为整型、字符型、枚举型;如果表达式过长,可以再定义一个变量来表示表达式,见示例 2 注释
(2)每个 case 后面的常量表达式的值应互不相同,否则会相互矛盾
(3)各个 case 和 default 的出现次序不影响执行结果
(4)可以让多个 case 共用一组执行语句
(5) switch 语句允许嵌套使用
(4)的代码示例(由示例2变化而来)如下:
#include<stdio.h>
int main()
{
int day=0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default://默认值 可加可不加
printf("输入错误\n");
break;//这里的break可加可不加,但最好加上
}
return 0;
}
三. for 循环
for(表达式1;表达式2;表达式3) 注意是分号
{
循环体语句; 花括号在不需要时可以不加
}
1. 执行流程
语义:
2. 代码示例
#include<stdio.h>
int main()
{
//也可写成下面这样,但是不建议这样写
int i,sum; //int sum;
sum=0; //sum=0;
for(i=1;i<4;i++) //for(int i=1;i<4;i++)
{
sum=sum+i;
printf("%d\n",sum);
}
return 0;
}
3. for 循环语句一般形式的省略(结合上面的代码示例说明)
(1) 省略表达式 1
for(i=1;i<4;i++)
sum=sum+i;
等价于
i=1
for(;i<4;i++)
sum=sum+i;
(2) 省略表达式 2
for(i=1;;i++)
省略表达式2时,表示不对循环进行控制,倘若没有其他处理,会形成死循环
(3) 省略表达式 3
for(i=1;i<4;i++)
sum=sum+i;
等价于
for(i=1;i<4;)
sum=sum+i;
i++;
(4)省略循环体语句(表达式 3 为逗号表达式)
for(i=1;i<4;i++)
sum=sum+i;
等价于
for(i=1;i<4;sum=sum+i,i++) //后面用逗号隔开
(5)表达式 1 为逗号表达式
sum=0;
for(i=1;i<4;i++)
sum=sum+i;
等价于
for(sum=0,i=1;i<4;i++)
sum=sum+i;
说明:
通过上述介绍,说明 for 循环控制结构功能强大,但不建议这样写代码
四. while 循环
while(表达式)
{
循环体; 花括号在不需要时可以不加
}
1. 执行流程
2. 代码示例
#include<stdio.h>
int main()
{
int i,sum=0;
while(i<4)
{
sum=sum+i;
printf("%d\n",sum);
i++;
}
return 0;
}
五. do…while 循环
do
{
循环体
}while(表达式); 分号别漏了
1. 执行流程
2. 代码示例
#include<stdio.h>
int main()
{
int i,sum=0;
do
{
sum=sum+i;
printf("%d\n",sum);
i++;
}while(i<4);
return 0;
}