C语言:分支语句和循环语句
创始人
2024-05-12 04:35:09
0

往期文章

  1. C语言:初识C语言

目录

  • 往期文章
  • 前言
  • 1. 什么是语句
  • 2. 分支语句(选择结构)
    • 2.1 if语句
    • 2.2 switch语句
  • 3. 循环语句
    • 3.1 while循环
    • 3.2 for循环
    • 3.3 do while 循环
    • 3.4 goto语句
  • 后记

前言

趁热打铁啊。写完该系列第一篇博客我就来劲了,迫不及待地开始第二篇。我自认为我第一篇文章写地不错,内容详细,配图认真,大家感兴趣可以点击链接上面往期文章支持一下。也欢迎大家批评指正。接下来我们开启第二篇文章,主要来介绍分支语句很循环语句。欢迎大家多多支持。
在这里插入图片描述

在这里插入图片描述

1. 什么是语句

C语言中由一个分号 ; 隔开的就是一条语句。
所以,我们这个专栏的名字是:以分号结尾的诗。
如果只有一个分号是空语句。

printf("nihao");
1+2;
;

2. 分支语句(选择结构)

我们先来回顾一下第一篇文章中的内容:
在这里插入图片描述

这就是需要选择结构的情况。
那么,我们如何实现选择语句呢?我们有if语句和switch语句。

2.1 if语句

在这里插入图片描述
表达式结果为真,则条件成立,反之则代表着条件不成立。
我们来看一个例子:

#include int main()
{int age = 0;scanf("%d", &age);if (age<18){printf("未成年\n");}return 0;
}

在这里插入图片描述
大家注意,如果if语句后不加{},那么其后只有一条语句可以被if作用,如果if后要被if作用多条语句,一定要加{}。举一个例子。


#include int main()
{int age = 0;scanf("%d", &age);if (age<18)printf("未成年\n");printf("不可以抽烟喝酒\n");printf("不可以结婚\n");return 0;
}#include int main()
{int age = 0;scanf("%d", &age);if (age < 18){printf("未成年\n");printf("不可以抽烟喝酒\n");printf("不可以结婚\n");}return 0;
}

在这里插入图片描述
大家明白{}的作用啦嘛。{}里面才是一个代码块哦。所以为了防止出错,我们建议全部跟上{}。
所以多条语句的正确书写格式为:

#include 
int main()
{if (表达式){语句列表1;}else{语句列表2;}return 0;
}

if还有一个好搭档——else。else的作用不容小觑,我们一起来看看。

#include 
int main()
{int age = 0;scanf("%d", &age);if (age<18){printf("未成年\n");}else{printf("成年\n");}
}

在这里插入图片描述
else后{}的作用同if一样。
但是有些时候,一对if、else难以解决问题,此时,我们就需要多分支语句啦。也就是要用到else if。

#include 
int main()
{int age = 0;scanf("%d", &age);if (age < 18){printf("少年\n");}else if (age >= 18 && age < 30){printf("青年\n");}else if (age >= 30 && age < 50){printf("中年\n");}
}

在这里插入图片描述

接下来,我们研究一个问题,这段代码会输出什么?

#include 
int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

是呵呵呢还是哈哈呢?见证一下:
在这里插入图片描述
输出的是空空哦。
惊不惊喜?意不意外?为什么是这样呢?
因为else和其上面最近的if匹配

在这里插入图片描述
我们将格式调整一下就可以看地更明显:
在这里插入图片描述
这也告诉我们,良好的代码风格很重要,会给人清晰明了的舒服感。所以,大家写代码的时候,要注意代码风格哦。
还有一个小细节,也值得我们注意,我们看下面这样一个例子,如果我们想要写一个代码,希望当b=2的时候,输出hehe,但是由于我的马虎,只写了一个等于号,我们知道,==在c语言中,一个等于号是赋值,两个等于号才是相等。==此时程序是这样的:

#include int main()
{int b = 0;if (b = 2)printf("hehe\n");return 0;
}

这个程序最终会输出什么呢?
在这里插入图片描述

我们的程序写错了,与我们的本义是不符合的。但是屏幕上却输出了hehe。这是因为:
在这里插入图片描述
所以,一个赋值表达式是真,也就是一个非0数,所以可以执行。那么,面对这样不易察觉的错误,我们有没有什么好的办法避免呢?我们将代码换一种写法来看看:
在这里插入图片描述
我们将2和b换了一下位置,我们发现编译器报错了,我们就很容易察觉到,这里少写了一个等于号。所以这提示我们,if括号里判断变量是否等于一个数字这种情况,我们把数字写在前面,这样有助于我们检查错误。这也同样提示了我们,代码风格的重要性。

2.2 switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。
我们来看这样一个例子:
在这里插入图片描述
如果我们用if、else语句,将会非常的麻烦,对于这种多分支情况,switch语句会有条理方便很多。我们来看一下switch语句的应用方法:

switch(整型表达式)
{
语句项;
}

语句项是:

//是一些case语句:
//如下:
case 整形常量表达式:
语句;

case语句搭配break来使用,case进入,break跳出。
于是上面星期的代码我们可以写成这个样子:

#include 
int main()
{int day = 6;switch (day){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 7:printf("星期天\n");break;}return 0;
}

在这里插入图片描述
注意,switch括号内放地是整型表达式哦。如果我们将day设置成float,代码就无法运行了。case后面必须要跟整型常量表达式。字符的也是整型常量,因为字符型对应的ASSIC码是整型。
在这里插入图片描述
我们说case和break搭配,但是是每一条case后,都要加break吗?非也。
如果我们改变一下需求:
在这里插入图片描述
我们的代码就可以改为这样来实现:

#include int main()
{int day = 6;switch (day){case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;case 6:case 7:printf("weekend\n");break;}return 0;
}

在这里插入图片描述
所以,我们知道,并不是case后一定跟break,而是根据需要添加break。
但是,我们再想一下,如果,我们输入的数字超出范围了怎么办?比如,我们让day=9。

#include int main()
{int day = 9;switch (day){case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;case 6:case 7:printf("weekend\n");break;}return 0;
}

在这里插入图片描述
这下啥也没输出。所有语句都被跳过了。有的时候,我们不希望发生这样的错误,所以我们就需要一点提示,于是default语句就对我们很重要啦。

在这里插入图片描述

#include int main()
{int day = 9;switch (day){case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;case 6:case 7:printf("weekend\n");break;default:printf("您输入地信息有误\n");}return 0;
}

在这里插入图片描述
所以,为了成为一名严谨的程序员,在需要的时候要加上default语句哦。
还有一点值得注意的是,switch内部的语句并没有严格的顺序,所以代码变成这样也是可以的哦:

#include int main()
{int day = 9;switch (day){default:printf("您输入地信息有误\n");case 6:case 7:printf("weekend\n");break;return 0;case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;}
}

有时候要卡死,有时候没有必要卡太死哦。
在这里插入图片描述

3. 循环语句

在这里插入图片描述
关于循环语句,我们之前在第一篇文章里以开端为例,已经比较详细地介绍啦,大家可以翻看一下第一篇博客哦。

3.1 while循环

//while 语法结构
while(表达式)
循环语句;

在这里插入图片描述

我们来看一个while循环的简单实例:

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

在这里插入图片描述
同样,在while循环中我们也引入了break。
在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。 所以:while中的break是用于永久终止循环的。

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

在这里插入图片描述
我们如果将代码换成如下,结果又是什么呢?

#include 
int main()
{int i = 1;while (i <= 10){i = i + 1;if (i == 5)continue;printf("%d ", i);}return 0;
}

在这里插入图片描述
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

综上,我们知道,==break是中止循环,进入下一条语句,而continue是结束本次循环进入下一次循环。==这个非常重要,大家一定要注意它们的区别。对于新手小白,可能要花一段时间来弄明白这二者之间的区别,对于老手,也要注意它们的区别,不要马虎犯错。

3.2 for循环

for(表达式1;表达式2;表达式3)
循环语句;

表达式1为初始化部分,用于初始化循环变量的。 表达式2为条件判断部分,用于判断循环时候终止。 表达式3为调整部分,用于循环条件的调整。
在这里插入图片描述
在这里插入图片描述

#include 
int main()
{int i = 0;//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)for (i = 1; i <= 10; i++){printf("%d ", i);}return 0;
}

在这里插入图片描述
我们对比一下while循环和for循环:
在这里插入图片描述
可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。 for循环使用的频率也最高。

break和continue在for循环中区别和while中相同。

注意两点:
在这里插入图片描述
同时,for循环的三个条件是可以有缺失的。也可以有如下变种。

#include int main()
{//变种1for (;;){printf("hehe\n");}//变种2int x, y;for (x = 0, y = 0; x<2 && y<5; ++x, y++){printf("hehe\n");}return 0;
}

像变种1这样的写法,将无限循环,我们不建议这么做。

3.3 do while 循环

do
循环语句;
while(表达式);

在这里插入图片描述
do循环上来不做任何判断,所以循环至少执行一次。
来看一个do while的循环的例子:

#include 
int main()
{int i = 0;do{i++;printf("%d\n", i);} while (i<10);return 0;
}

在这里插入图片描述
同理,break和continue的语法在do while中也是一样的。

3.4 goto语句

C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。
从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。

适用于下面这种情况:

for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况

后记

好的,这篇博文就介绍到这里啦。希望对大家有所帮助。我将尽力更新,希望我可以坚持下去。
在这里插入图片描述

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...