目录
一.switch语句
除了if语句外,C语⾔还提供了switch语句来实现分⽀结构。switch语句是⼀种特殊形式的if...else 结构,⽤于判断条件有多个结果的情况。它把多重的else if改成更易⽤、可读性更好的形式。
switch (表达式)
{
case 条件1: 语句
case 条件2: 语句
default: 语句
}
在switch语句中,会根据表达式不同的值去执行对应条件的case分支。若找不到对于的值则执行default分支。
switch后的expression必须是整型表达式。
case后的值,必须是整形常量表达式。
case和后边的数字之间必须有空格
1.switch语句中的break
每⼀个case语句中的代码执⾏完成后,需要加上break ,才能跳出这个switch语句。举例如下:下面的代码是计算被3整除后的余数的代码
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
运行此代码会发现结果如下
我们发现,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印。
原因是switch语句也是分⽀效果的,只有在switch语句中使⽤break才能跳出switch语 句,如果某⼀个case语句的后边没有break语句,代码会继续往下执⾏,有可能执⾏其他case语句中的代码,直到遇到break语句或者switch语句结束。就⽐如上⾯的代码就执⾏了case 2中的语句。故若要正确执行此代码,应如下所示:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
但在switch语句中可能会遇到,不同case条件后的语句是相同的情况。如输⼊1~5,输出“⼯作⽇”,输⼊6~7,输出“休息⽇”。
#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;
}
return 0;
}
在编写代码时应该根据实际的情况,来判断代码中是否使⽤ break ,或者在哪使⽤ break ,才能正确完成实际的需求。
二.while语句
while语句是三种循环语句中的一种,while语句的形式如下:
while(表达式)
语句 //如果想书写多个语句可以加大括号
while语句在执行时会先对括号内的表达式进行是否为0的判断。表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
如上述代码,while语句的表达式判断为真的条件是i小于等于10,判断为真后,进入while循环内,打印i的值并对i加1,然后再回到while语句起始处进行下一次判断,直到i大于10判断为假后结束循环
三.for循环
for 循环的语法形式如下:
for(表达式1; 表达式2; 表达式3)
语句;
表达式1⽤于循环变量的初始化
表达式2⽤于循环结束条件的判断
表达式3⽤于循环变量的调整
在执行时,⾸先执⾏表达式1初始化循环变量,接下来就是执⾏表达式2的判断部分,表达式2的结果如果为假,则循环结束; 表达式2的结果如果为真则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式 3 ,调整循环变量,然后再去表达式2的地⽅执⾏判断, 表达式2的结果是否为0,决定循环是否继续。 整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
举例:在屏幕上打印1~10的值
#include<stdio.h>
int main ()
{
int i=0;
for(i=1;i<=10;i++)
{
printf("%d ",i);
}
return 0;
}
四.do while循环
do while循环的语句如下:
do
语句;
while(表达式);
while和for这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环;⽽do while循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏while后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。
在do while循环中先执⾏一次语句,执⾏完语句,在去执⾏“判断表达式”,判断表达式的结果为真,则继续循环,执⾏循环语句;判断表达式的结果为假,则循环结束。所以在do while语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅。
举例在屏幕上打印1~10的值:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
五.不同循环中的break和continue
在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了break和continue两个关键字,就是应⽤到循环中的。
break的作⽤是⽤于永久的终⽌循环,只要break被执⾏,就会直接跳出break所处层循环,即只能跳一层循环,然后继续往后执⾏。
continue的作⽤是跳过本次循环中continue后边的代码,在for循环和while循环中有所差异的。
1.while循环中的break和continue
1.break
在while循环中的break会直接终止该层while循环,跳出循环执行后面的语句。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
如上述代码本应打印1~10,但当i=5时执行分支语句,直接结束了循环,使得只打印了1~4。
2.continue
continue可以帮助我们跳过某⼀次循环continue后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在continue后边的话,可能会造成死循环。
将上图代码的break改成continue,会发现打印了1~4,6~10但没有打印5。
2.for循环中的break和continue
1.break
和while循环中的break⼀样,for循环中的break也是⽤于终⽌循环的,不管还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。
2.continue
在for循环中continue的作⽤是跳过本次循环中continue后的代码,直接去到循环的调整部分。当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤ continue 来实现。
3.do while循环中的break和continue
do while语句中的break和continue的作⽤和while循环中⼏乎⼀模⼀样,⼤家下来可以⾃⾏测试并体会。
六.goto语句
C语⾔提供了⼀种⾮常特别的语法,就是goto语句和跳转标号(自定义),goto语句可以实现在同⼀个函数内跳转到设置好的标号处。
例如:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}
goto语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;但在多层循环的代码中,如果想快速跳出使⽤goto就⾮常的⽅便了。
有关C语言分支和循环的介绍就到这里,感谢大家观看,如有纰漏或错误,欢迎大家提出与指正。也欢迎大家来评论区提问与讨论,共同进步,谢谢大家。