我们都知道,c语言中分支与循环是相互统一,相互配合的,如果二者能有效的结合使用,那么对于我们程序的生成效率和语法规范来说是有着重大帮助的!!!
分支语句
分支语句包括if和switch语句,循环语句包括while,do while以及for语句,当然还有break continue以及goto语句的辅佐!
分支的理解:
if语句
if(条件表达式)
{
执行的语句;
}
表示如果条件表达式成立,就执行括号内的语句,否则不执行。
一定要注意c语言中“非0表示真”,“0表示假”!
还有与if配套的else,表示如果if语句不执行就执行else里的语句,这里else是不需要条件的。if和else可以通过级联和嵌套来使用,就像套娃一样可以将不同的条件列举出来,帮助我们更好的处理复杂的条件判断逻辑!
对于if语句的括号问题要注意,if和else默认控制一条语句,因此如果想实现多条语句的控制,一定要加括号。
else
else
{
执行的语句;
}
if型嵌套
第一种嵌套我称之为“if型嵌套”:
if()
{
if()
{
..............
}
else
{
}
}
你可以接着嵌套!
if else级联
第二种我称之为“else型嵌套”,也是if else级联
有两种写法
if()
{
}
else
{
if()
{
..............
}
else
{
}
}
你可以在第一种基础上改一下变成:
if()
{
......
}
else if()
{
......
}
else if()
{
......
}
我感觉这样写最好!哈哈
为了程序的美观括号记得对齐
else悬空问题
最后一个关于else悬空问题:
else总会跟着最近的if来,
int a;
int b;
if(a == 0)
if(b == 1)
printf("hehe\n");
else
printf("fine\n");
虽然else和上面的if对齐了但是他是b==1那个if的else,相当于我说的"if型嵌套"。而且这个代码让人看着真的不舒服!!!!!
switch-case
除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重 的 else if 改成更易⽤、可读性更好的形式,有的情况下switch确实好用(比如输出工作日和节假日的代码)
switch (expression)
{
case value1:
.....;
break;
case value2:
.....;
break;
default:
.....;
break;
}
这是switch的语法结构。switch 后的 expression 必须是整型表达式(比如 b%3==1) ,同时case 后的值,必须是整形常量表达式(比如整型数据1).
特别注意case 和后边的数字之间必须有空格 , 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。break其实比较灵活,可以根据实际效果来进行调整!
default的作用是expression的值无法匹配case那么就会执行default,一般default应该要有个break。
额外补充一点:case和default不用考虑先后顺序,因为执行过程中会自动匹配(编译器还没傻到这种程度,哈哈开个玩笑!)。
对了,if else语句其实可以保证代码的连贯性,比如在打印菱形的时候,上半部分的菱形语句与下半部分的菱形语句是并列的,如果没有if和else的参与,代码执行就有点顿一下的感觉。
作为机器人工程专业的学生,我也了解过一些自动控制类的知识,不过我只是简单地初步理解。某些计算机专业的同学可能不太知道这一点,举个例子,比如我想让机械臂转90°角,如果不注意代码的连贯性,可能导致第一个代码直接一步到位转了90°,而第二个代码反应有点慢(比如先转60°再转30°),这两种的实际效果完全不一样,第二种的误差更大,不利于实际操作。
ok,接下来是循环的理解:
循环
while循环
while 语句的语法结构和 if 语句⾮常相似。
while(表达式)
语句;
与if一样,while里面的循环体也可以加大括号,”循环体“这是循环语句的专有名称(其实就是复合语句或者代码块)。
for循环
for(表达式1; 表达式2; 表达式3)
语句;
也可以加上大括号使得循环体里更丰富。
表达式1里是初始化变量,表达式2是循环是否执行的判断条件;表达式3是每次循环结束后所要做的操作。
执行的顺序:
比如for(int a = 0; a<=8; a++)
语句;
第一次循环首先执行表达式a = 0,之后判断条件,一般第一次都会执行,这里a小于8,执行完后a++。第二次循环a等于1时判断条件a是否小于等于8,a这里确实小于8,所以执行语句,执行完最后别忘了a++此时a为2,以此类推。除了初始化值被执行一次外,之后循环基本上都是表达式2、表达式3、语句在循环。
如果条件显然,表达式1 2 3都可以省略不写,但是两个分号不能空,因为我们要维护for循环的语法格式!
do while循环
这个循环比较特殊,不管条件成不成立,都先执行一次然后判断条件来决定后续循环体是否执行。所以do while循环至少做一次!
do
{
语句;
} while(表达式);
这是基本语法格式,一定不能忘了while后的分号!
ok,我再总结一下本人关于这三个循环的理解!
首先是while和for循环,代码较多的时候 while 循环的三个部分就⽐较分散,而for循环不会有这个缺点,所以从形式上 for 循环要更优⼀些。
其次while循环可以实现不规则的计算,而for循环容易实现有规律计算,因此可以看自己的需要。
do while侧重于至少执行一次这个特点,可以有很多创新,比如猜数字游戏,我不管游戏是否能成功执行,我需要先打印一个简易的菜单,这个时候就要用do while循环实现这个目的。
总之,以上三种循环各有利弊,有时可以相互配合使用,效果会更好!
break、continue、goto语句。
break是当前跳出循环,只能跳一次,之后就不再执行这个被跳出的循环了!
而continue是跳过这个条件下,continue后面的语句,重新进行下一个循环(是同一循环)条件的判断,举个例子,打印从1到100的奇数,我可以用continue来跳出所有偶数的情况,最终只输出奇数。
因此break比较彻底,而continue留有余地!
goto语句就太暴力了,goto 语句可以实现在同⼀个函数 内跳转到设置好的标号处。
举个例子:
printf("girl\n");
goto next:
printf("boy\n");
next:
printf("跳过了boy的打印\n");
是不是很暴力!不过一般不轻易使用goto语句,除非你想跳出多重嵌套循环,因为你就算用break语句跳循环,每一次也只能跳出一个,无法彻底跳出所有循环。