学习C语言之分支和循环(下)

目录

一.switch语句

1.switch语句中的break

二.while语句

三.for循环

四.do while循环

五.不同循环中的break和continue

1.while循环中的break和continue

1.break

2.continue

2.for循环中的break和continue

1.break

2.continue

3.do while循环中的break和continue

六.goto语句


一.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语言分支和循环的介绍就到这里,感谢大家观看,如有纰漏或错误,欢迎大家提出与指正。也欢迎大家来评论区提问与讨论,共同进步,谢谢大家。

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值