什么是语句?
开始之前,我们先来浅说一下语言的定义:我们不妨理解为是对计算机的指令
控制语句的分类
什么是控制语句呢?
分支语句(选择语句)
我们每天其实都是在做选择?什么时候起床,什么时候睡觉,吃什么东西,什么时候卷?这不就是选择吗?面临不同的选择,就会有不同的分支,比如:
这就是选择,说了这么多,其实就是在讲选择的定义,那C语言又是如何去表示的呢?
if语句和swtich语句。下面我们将来看看if语句和swtich语句
if语句
我们首先来看看if语句的基本结构是什么?
if(表达式)
语句1;
else
语句2;
表达式我们理解为判断语句,语句1和语句2我们理解为执行语句。
当然除了最基本的结构外,还有多分支的情况:
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
看了基本结构之后,我们大致有了基本的了解,接下来,我们来敲敲代码
我们可以输入一个年龄,判断是否成年,比如输入18.结果如下
它是怎么输出的呢?来,我们一起看看! 输入之后,就会进行判断,18<18?不对,这时候就会进入else语句,最终输出成年。
好的,接下来我们来看看多分支语句的结构,举个例子:
这时候出现多分支了。来,我们继续输入18,看看结果是什么:
很明显,这时候输入18结果就为青年了! 下面,我们来看看比较常见的错误
易错点
1.&&的使用
关于多分支的情况判断下,可以有人直接18<=age<30了,这是错误的,这是数学的形式,在编译器编译的时候都过不了!
在C语言中,我们要用到逻辑运算符&&来表示并且,这是我们需要注意到的地方,也是初学错的地方,我们要多加注意!
2.== 和 =的区别
开始之前,我们先来了解一下C语言选择的真假性:
如果表达式的结果为真,则语句执行。
在 C 语言中如何表示真假?0表示假,非0表示真。
好,接下来我们来看看这段代码:
是否认为会打印hehe?NONONO,我们仔细来看看,if语句的判断条件是直接赋值了,把3赋值给a,我们刚说过,0为假,非0为真,我们自然要执行if的里面的语句,我们来看看运行结果:
如果要打印hehe的话,我们应该改成这样子:
关于== 和 = 的使用,我们有时候会弄巧成拙,明明是想比较大小,却直接赋值了,但是编译却不会错,那我们要怎么做呢?
当表达式右边是常量的时候,我们不妨先把常量写在==左边,这时候编译都过不了,我们来看看:
这样子就相当于提示我们写错了,也有利于我们养成良好的代码风格。
3.悬空else
是输出hehe还是haha呢?答案都不是,输出结果为空
为什么会这样子呢?其实很简单——else的匹配:else是和它离的最近的if匹配的
所以,当程序运行到if(a==1)上时,判断为假,跳过if。直接运行到return 0。
里面的if(b==2)和else的语句都是if(a==1)的内容。其实就相当于下面这样子:
这样子看起来是不是更加的明显!改正:
这其实涉及到了我接下去想说的内容,关于代码的风格习惯
敲代码建议
每一句的 if 和 else 后面最好都跟上一个大括号{},就算只有一条也要加上去
这里的{}意为一个代码块,可以理解为一整个语句
为什么呢?
逻辑更加清晰,不容易出错。
不会出现像上文说的那样else,if混搭的情况,悬空else问题,而加上了{}则不会出现这种情况,并且这种情况正是在书写不规范的情况下产生的,这应该给我们一个启示。
不管是对自己,还是对他人,都会让我们更加容易去看懂代码!
switch语句
基本结构:
switch(整型表达式) {
语句项;
}
我们来输入1看看结果是什么:
这不对啊,按我们的理解来说,我们输入1,应该只打印出星期一,后面不会打印啊。别急,这就涉及到了后面的break
switch语句中的 break
问题解决!如上图,当遇到break的时候,就会直接跳出switch,而不会继续下去!
总结来说,就是:break语句 的实际效果是把语句列表划分为不同的分支部分。起到真正意义上的分支!
default子句
如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结构就是所有的语句都被跳过而已。程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句,把下面的标签
关于default的使用:写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。
我们来改进一下上面的代码:在上面的代码中如果我们输入大于7的数字,就会出现上述情况
我们输入8来看看结果:
注意事项
1、为养成好习惯,最好在每一条的case语句中的后面都加上一个break
2、多个case语句可以共用一条(或者多条)执行语句。
循环语句
循环语句包含while循环、do....while循环和for循环
while循环
while(表达式)
循环语句;
我们来练习一下,打印一下1到10:
接下去,我们在来说说while中的break和continue
while语句中的break和continue
输出结果是什么?答案是1,2,3,4。当i=5的时候,遇到break,直接跳出了整个while循环了!
在来看看continue的用法:
当i=5的时候,遇到continue,直接跳过那一次的循环,进入下一次!
总结:
1.break在while循环中的作用就是:
for循环
for(表达式1; 表达式2; 表达式3)
循环语句;
我们来解释一下这是什么意思:
表达式1表达式1为初始化部分,用于初始化循环变量的。表达式2表达式2为条件判断部分,用于判断循环时候终止。表达式3表达式3为调整部分,用于循环条件的调整。
举个例子:
还是打印1到10
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
我们来对比一下while和for的区别在哪里:
一定程度上,while和for是可以相互转换的!
break和continue在for循环中
使用for循环的建议
1、在循环体里不要轻易改变循环变量。
2、建议把条件判断写成前闭后开的形式。
我们来看看比较特殊的for循环
打印出来会死循环!
do...while()循环
基本结构:
do
循环语句;
while(表达式);
这就是do...while的特点,无论条件如何,最少都能执行一次!!!
do while循环中的break和continue
其实dowhile循环中也可以使用break和continue,下面给出两个简单的例子:
goto语句
goto语句的用法:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
goto的优势在于可以直接跳出多层循环。简单来说:
那就是根据标签想跳到哪就到哪!
关机程序——goto语句
下面是使用goto语句的一个例子,然后使用循环的实现方式替换goto语句:
而如果不适用goto语句,则可以使用循环:
结语
好啦,本篇博客到此就结束了,创作不易,给个支持把!看完的同时,不要忘记多去做题目哦,巩固自己学过的知识,这样不利于自己的发展!