【pelin-yi】C语言的分支和循环语句

C语言的结构化

在生活中,你会发现发生在我们身边的任何一件事,都能用顺序语句分支语句循环语句,或是由上述三种语句的组合组成。由此,咱们可以实现用C语言去描述在生活中发生的问题,并通过C语言的代码来解决问题。

我们可以使⽤ifswitch实现分⽀结构,使⽤forwhiledo while实现循环结构。

if-else语句

大家都知道,if这个单词是如果的意思,运用在C语言中,就是如果怎么怎么样,那么怎么怎么样。举个简单例子:我们如何判断一个是奇数还是偶数。

首先我们把前提条件列出来:奇数不能被2整除,且除2余1,反之是偶数,注意0是偶数!

代码如下:

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}

这种判断方式,适用于不是1就是2的情况,如果出现第3种选项,这个时候就要使用if-else的嵌套。

现在,给你一个问题,输入一个数字,判断数字是正数还是负数。

还是一样的流程,首先把判断条件列出来:大于0是正数,小于0是负数,还有一个情况,就是等于0的时候。

好了,现在三个可能性都列出来了,用if-else的嵌套来实现一下吧:

#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}

这样我们就实现了if语句的嵌套,同理如果出现四个判断条件或者更多,也可以使用if嵌套的方式去实现多条件的判断。

但是这样的书写方式,太复杂且代码量大,为了让程序员更轻松,于是出现了多种用于循环判断的代码语句。

switch-case语句

switch语句是⼀种特殊形式的if…else结构,⽤于判断条件有多个结果的情况。它把多重的else if改成更易用、可读性更好的形式。
那么switch语句相比于if语句代码体验上会改善多少呢?

举个例子:输入任意一个整数,计算除3之后的余数,也就是取模用%
首先列判断条件:一个数除3,可能出现余0,余1,余2三种情况,如果使用if-else语句去执行C语言程序的话:

#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}

那如果使用switch语句去执行呢:

#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空格+数字,这个就是switch语句最便捷的地方,如果余数是0就输出0,如果余数是1就输出1,同时用break语句去跳出switch语句的循环,避免死循环。

这样确实在代码感官上看起来比if-else语句更清晰也更好理解。

如果说switch语句是一个选择,那总会出现选错的情况或者说超出了给定的条件,这个时候就需要default语句就给出一个非判断条件的选项,也就是错误选项。

假设打印星期数,也就是周一到周日,共七个数,如果你输入了八或者更大的数,就要用default语句打印错误。

#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch(day)
{
case 1case 2:
case 3:
case 4:
case 5:
printf("⼯作⽇\n");
break;
case 6:
case 7:
printf("休息⽇\n");
break;
default:
printf("输⼊错误\n");
break;
}
return 0;
}

这样就能把超出判断范围的情况也打印下来。

while语句

while语句也是循环语句的一种,跟if语句类似,只是表达方式略有不同。
举个例子,用while语句打印1~10的数:

#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}

这个就是while语句的,判断条件放在while之后,循环体处于大括号里面,什么时候不满足判断条件,什么时候跳出。

while语句很适合遍历打印,如打印全部数或从一个数到另一个数的话语出现在题目中,就可以考虑使用while语句。

for语句

for循环语句需要跟while语句放一起对比,还是一样的题目,打印1~10的数,用for循环代码如下:

#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}

大家可以看到for循环直接将需要判断的元素判断的条件条件满足的后续操作都放在了for后面的()中,将打印出来的放在了大括号里。
每个循环方式适合不同的情况,需要根据情况判断使用哪个循环语句,不过日常中,用的最多的是for循环,这个最简单,也最好理解。

do-while语句

do-while语句跟while语句放一起判断,变化很小,一样的题目,打印1~10的数字:

#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}

可以看到,do-while语句和while语句的区别就是把while语句放到了循环体的后面,但是do-while语句唯一不同的一点是,循环体必须循环至少一次
所以应用场景还是比较少的。

break,continue语句

这两个语句一般不单独使用,大部分是用在循环体里面起改变循环体的作用,break语句刚刚我们已经在前面的代码里面看到很多次了,细心的读者应该已经反应过来,break语句是跳出本次循环的意思,也就是直接让循环结束。

而continue语句可以帮助我们跳过处于continue语句后面的代码,直接到循环体的判断部分,进行下一次循环的判断。
这里给大家写两个打印1~10的代码
break语句:

#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
}
return 0;
}

continue语句:

#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}

大家可以自己将代码拷贝一份去自己的编译器里跑一跑程序。还是很好理解的。

goto语句

goto语句是一个很特殊的语句,goto语句和跳转标号一起使用,可以实现在同一个函数内跳转到设置好的标号处。

#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}

可以看到,代码在走到goto语句的时候,直接跳过了haha的打印。

不过goto语句不建议频繁使用,因为使用过多goto语句会使你的代码出现逻辑层面的问题,且代码观感不好,从这个地方一下跳带那,一下跳到这的。

以下就是分支与循环语句当中,最常用的几个语句,希望我的博客对每一位前来阅读的读者都有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值