
除if语句外,C语言还提供了switch语句来实现分支结构。 switch语句是一种特殊形式的if…else结构,用于判断条件有多个结果的情况。它把多重的else if改为更易用、可读性更好的形式。
1 switch(expression){
2 case value1:statement
3 case value2:statement
4 ...
5 default:statement
6 }上面的这串代码中,根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。 注: switch后的expression必须是整型表达式 case 后的值,必须是整型常量表达式
接下来我们来解决一个问题,分别用if语句和switch语句进行解答 如果使用if语句完成,如下:

如果使用switch语句改写,是这样的:

注意,这串代码有两点需要注意:

可以发现,6除以3本来余数是0,但我们发现程序结果多了两行,这是为什么呢? 原因是switch语句也是分支效果的,只有在switch语句中使用break才能跳出switch语句,如果某一个case语句的后边没有break语句,代码会继续往下执行,有可能执行其他case语句中的代码,直到遇到break语句或者switch语句结束。就比如上面的代码就执行了case1,case2中的语句. 所以在switch语句中break语句是非常重要的,能实现真正的分支效果。 当然switch最后一个case 2那里不加入break,执行完之后也能正常跳出去,但小编是强迫症,不加看着难受哈哈,而且如果加上的话,日后想要再对switch添加分支,也不容易忘记。 小编我初次学的时候也经常忘记加break语句哈哈。
这里小编再举例一个不需要break的情况: //输入一个1~7的数字。

这样来表示代码,是不是就非常省力了呢?
在使用switch语句的时候,我们经常可能遇到一种情况,比如switch后的表达式中的值无法匹配代码中的case语句的时候,这时候要不就不做处理,要不就得在switch语句中加入default子句。
1 switch(expression){
2 case value1:statement
3 case value2:statement
4 default:statement
5 }switch后边的expression的结果不是value1,也不是value2的时候,就会执行default子句。 就比如前面做的打印星期的练习,如果day的输入不是1~7的值,如果我们要提示:输入错误,则可以这样完成代码:

而且这里的default的位置是没有任何语法要求的,只要放在switch语句里面就可以,都可以正常执行,只是我们习惯把它放在最后,比如我们换个位置。

C语言提供了3种循环语句,while就是其中一种,接下来就介绍一下while语句。 while语句的语法结构和if语句非常相似。
1 if(表达式)
2 语句;//这里括号里的表达式为真则执行语句,为假不执行,
3 //也就说if语句基本会执行一次
4
5 while(表达式)//while语句则是,为真执行一次,然后再判断是否为真,为真再执行
6 语句;//如果循环体想包含更多的语句,可以加上大括号我们来写一个代码来比较一下:



首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语句,语句执行完后再继续判断,是否进行下一次判断。
//在屏幕上打印1~10的值

这里我们可以进入调试模式,添加n的监视,不断按f10,观察n值的变化,可以看出n的值在变成11的时候退出了循环。

接下里我们就使用while循环来解决这个问题 例如: 输入:1234,输出:4 3 2 1 输入:521,输出:1 2 5 思路解析


这就是while循环了,我们可以总结出while循环的特点,循环几次不知道,但是知道什么时候开始循环,什么时候结束循环。而且它还有一个缺点,我愿称while循环的整体过程为三步走,初始化-判断-调整,但当这三个条件中间加了很多其他附加条件的话,我们就可以发现不利于作后期循环的更改了。如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int n = 1; //初始化
while (n <= 10) //判断
{
.......
printf("%d ", n);
........
n++; //调整
}
return 0;
}接下来就由for循环登场了,这是C语言平时最常用的循环,因为其三步走是放在一个括号里的,想要修改非常方便。
for循环的语法形式如下:
1 for(表达式1;表达式2;表达式3) //初始化;判断;调整
2 语句;//如果循环体想包含更多的语句,可以加上大括号表达式1用于循环变量的初始化 表达式2用于循环结束条件的判断 表达式3用于循环变量的调整

首先执行表达式1,初始化循环变量,接下来就是执行表达式2的判断部分,表达式2的结果如果==0,则循环结束;表达式2的结果如果!=0,则执行循环语句,循环语句执行完后,再去执行表达式3,调整循环变量,然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续。
整个循环的过程中,表达式1初始化部分只被执行1次,剩下的就是表达式2、循环语句、表达式3在循环。

图中数字//1 2 3 4是循环执行的次序
我们还是以一道题目来增进理解 //计算1~100之间3的倍数的数字之和 思路解析:

这里我还加了3的倍数的个数。 这里也是非常推荐大家平时写出来代码可以之间问ai来判断自己写的对不对,真的非常方便,而且指出错误明确,不得不说现在ai的能力真的非常牛逼的,我平时喜欢用deepseek和豆包的。 这种写法循环了100次,也判断了100次。
还有一种优化写法:

这样的写法是直接产生3的倍数的数字,省去了多余的循环和判断,只循环了33次便得到了想要的效果。 我觉得这就是算法的区别嘛,所谓算法就是计算的方法,你有更好地算法基础肯定写出来的代码也更省时省力是吧。

在平时写for循环的时候大家一定也见过这种写法,在for循环内部定义了i,这样的写法在较新的一些编译器是可行的,但在老的编译器里面报错,我记得在vs2010里面好像就会报错,而且这样定义的i变量只能在for循环内部使用,出去了就不好使了。
在循环语句中do while语句的是用最少,它的语法如下:
1 do
2 语法;//循环体至少被执行一次
3 while(表达式)while和for这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环; 而do while循环则是先直接进入循环体,执行循环语句,然后再执行while后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。

在do while循环中先执行图上的”语句“,先执行完语句,再去执行”判断表达式“,判断表达式的结果是!=0,则继续循环,执行循环语句; 盘点表达式的结果==0,则循环结束。 所以do while语句中循环体是至少执行一次的,这是do while循环比较特殊的地方。
一般do while使用在循环体至少被执行一次的场景下的情况较少,我这里举例一个适合它的代码要求 //输入一个正整数,计算这个整数是几位数? 例如: 输入:1234 输出:4 输入:12 输出:2

这里每次通过n/=10,不断去掉一位,当n等于0的时候,循环结束,打印位数的值,还不理解的可以在纸上写一下就明白了,而且这里cnt++和n/=10互换位置是不影响最后结果的,因为他们都在循环体内部,不影响每次循环的结果。

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了break和continue两个关键字,就是应用到循环中的。
这里小编拿一些生活中例子举例,比如说你是一个高中牲,上了个很坑的高中,要你连上30天不休息,然后你上的太累了,感冒了发烧了,无论从物理还是生理上都红温了,必须请一天假,这一天的课你上不了了,但是后面的课老师还要让你上,这就是continue。但是如果你上学路上迷迷糊糊被车创飞了,飞出去十几米,肋骨都断了好几根,要做手术休学了,这个就是break。
我们首先解释一下在break和continue在while循环中的表现。 这里我再附以代码加以解释:


第二张图是打印出来监视窗格的结果,结合第一张图来看,当i=5的时候,循环走到break之后,箭头直接跳到return 0;跳出循环,不再打印循环了。 所以break的作用就是永久的终止循环,只要break被执行,break外的第一层循环就终止了。 那以后我们在循环中,想在某种条件下终止循环,则可以使用break来完成我们想要的效果。
continue是继续的意思,在循环中的作用就是跳过本次循环中continue后边的代码,继续进行下一次循环的判断。 我们再看continue的效果:


这里我们可以发现第一张图中的光标还在闪烁,说明循环程序没有结束,还在循环,说明程序陷入死循环了,为什么呢?再根据第二张图i等于5的时候,走到continue哪一行,再按f10调试就又会跳到第六行,重新进行判断,此时的i还是5,说明没有执行i++。到这里我们就能分析出来,continue跳过了printf和i++这两行的代码,直接到循环的判断部分。可以总结,如果循环的调整在continue后边的话,可能会造成死循环。
这里我们如果吧i++放在if前面,又能有什么变化呢?

可以看出这里直接从2开始,把5跳过,到11结束,因为到5的时候,continue把后边的printf跳过了,这里不作过多解释,大家自己推一下就懂了。
其实和while循环中的break一样,for循环中的break也是用于终止循环的,不管循环还需要循环多少次,只要执行到了break,循环就彻底终止,上代码!

这里是不是和你想得一样呢? break的作用是永久的终止循环,未来我们在某个条件发生的时候,不想再继续循环的时候,就可以使用break来完成。

有了前面的一系列举例,现在是不是信手拈来了呢,注意,这里i++不会被跳过,只有printf会被跳过,所以不会陷入死循环。 对程序具体运行过程感兴趣的就打开监视窗格看一看。 所以在本次循环无需再执行后续某些操作的时候,就可以使用continue来实现。
do while语句中的break和continue的作用和while循环中几乎一模一样,这里只作图片演示,不解析了。


死循环

C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到设置好的标号处。 例如:

这里建议打开监视,走一步看一下程序运行窗格,超级直观,而且可以看到并不是箭头指导哪里,这一行就立刻执行,而是箭头走过才执行。 可以看这里直接跳过了haha语句,goto就是这个效果。
这里是从上往下跳,那么能不能从下往上跳呢,结果当然是可以的,看图:

这里可以看出,程序陷入了死循环,因为一直在向上跳重复打印嘛。
goto语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建议是能不用尽量不去使用;但是goto语句也不是一无是处,在多层循环的代码中,如果想快速跳出,使用goto就非常方便了。
1 for(...)
2 {
3 for(...)
4 {
5 for(...)
6 {
7 if(disaster)
8 goto error;
9 }
10 }
11 }
12
13 error
14 //... 本来for循环想提前退出要使用break,一个break只能跳出一层for循环,如果3层循环嵌套,就得使用3个break才能跳出循环,所以在这种情况下我们使用goto语句就会更加的快捷。
好啦,今天小编的文章就写到这里啦,又是在图书馆坐了一下午和一晚上,怎么说呢,其实偶尔安安静静的这么调试调试代码,写一些文章也挺好的哈哈,经常人打交道也是很累的,也需要一个人安静一会,总结一下生活的!希望看小编文章的各位没听生活也能开开心心,奥,对了今天是五月二日,五一假期已过去五分之二~