语句是什么?
C语言中可以分为下面五类:
本文主要记录的是控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式。
可分成以下三类:
代码如下(示例):
//语法结构
//单分支
if(表达式)
语句;
//多分支
if(表达式)
语句;
else if(表达式)
语句;
...
else
语句;
注意:多分支中的else可有可无。
#include
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
//思考运行结果是·什么?
}
运行结果是什么都不输出。
原因:else 与它最近的if匹配,上面代码相当于下面代码
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
else
{
printf("haha\n");
}
}
return 0;
}
小总结:写代码要有良好的代码风格, 良好的代码风格更让人通俗易懂。
switch语句也是一种分支语句,它常常用于多分支的情况
switch(整型表达式)
{
case 整形常量表达式1:
语句
case 整形常量表达式:
语句
...
}
注意:如果选择case 整形常量表达式1 为入口进入语句中,整形常量表达式1后的语句都执行,因此switch语句中,没有办法直接实现分支,要搭配break才能实现真正的分支
例如
int main
{
int day=0
scanf("%d",&day);
switch
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
...
}
return 0;
}
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量的。
表达式2
表达式2为条件判断部分,用于判断循环时候终止。
表达式3
表达式3为调整部分,用于循环条件的调整。
例题:打印1-5的数字
int main()
{
int i=0;
for(i=1;i<=5;i++)
{
printf("%d ",i);
}
return 0;
}
for循环的执行流程图:
例子1:
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 6)
break;
printf("%d ",i);
}
return 0;
}
运行结果:1 2 3 4 5
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 6)
continue;
printf("%d ",i);
}
return 0;
}
运行结果:1 2 3 4 5 7 8 9 10
例子1:
int main()
{
for(;;)
printf("haha\n");
//运行结果:死循环
return 0;
}
原因:判断部分省略被默认为真,调整部分也被省略,使得判断部分一直为真,导致死循环
例子2:
int main()
{
int i = 0;
int j = 0;
//如果省略掉初始化部分,这里打印多少个haha?
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("haha\n");
}
}
return 0;
}
运行结果:10个哈哈
原因:i和j开始都被初始化为0,i循环10次。i第一次循环结束后,j就被改为了10。i第二次循环时,j并没有再次初始化,所以j依然为10,第二层for循环不会进入循环语句。后面原理也一样。直到i++到10结束第一层循环。
while(表达式)
循环语句;
int main
{
int i=1;
while(1<=5)
{
printf("%d ",i);
i++;
}
return 0;
}
例子:
int main()
{
int i=0;
while(i<=10)
{
if(i==6)
break;
printf("%d",i);
i++;
}
return 0;
}
运行结果:1 2 3 4 5
例子
int main()
{
int i = 1;
while(i<=10)
{
if(i ==6)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
运行结果:1 2 3 4 5 死循环
程序会一直循环,但不打任何数字,因为当i=6时continue会跳到判断条件,但 i 不会改变一直为6,又进入if语句中,一直循环不会停止。
总结:
1.continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行。
2.循环中只要遇到break,就停止后期的所有的循环,直接终止循环。所以:while中的break是用于永久终止循环的。
do
循环语句;
while(表达式);
do …while()循环的执行流程图:
特点:循环最少执行一次。
和while循环中的用法差不多,可以参考
当想跳出多层循环,用break是达不到目的的,break只能从最内层循环退出到上一层循环,而goto可以跳到标记的标号位置
例如:
again:
...
while(..)
{
while(..)
{
if(...)
goto again;
}
}
例子:
有趣的小程序