分支和循环语句(基础,详细)

c语言是一门结构化的程序设计语言,我们可以使用if,switch等来实现分支结构。使用for,while,do while等来实现循环结构。

一.if语句

简单的if语句语法如下:

if(表达式)

执行语句

表达式为真即执行下面的语句(0为假,非0为真)

如果表达式为假,即不满足条件,则执行另外一个表达式即else,以一段简单的代码为例,如下:

这里的if语句表示如果表达式输入的数字模2余数为0,则执行printf。注意这里的if默认只分管下面printf一条语句,如果想执行多条语句,可以加{}。否则会执行多条语句,达不到预期效果,例如:下面这段代码,不论我们输入什么数字,屏幕上都会打印"是偶数"。

这是因为if,else只分管一条语句。

再例如如果加了else语句,且执行多条语句,不用{},编译器可能会报错。

二.嵌套if

在if else语句当中,else if可以构成多重判断。

⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:

悬空else问题。

else总是跟最近的if匹配,可加{}增加代码的可读性。

三.关系操作符

1.<,>,<=,>=,==,!=。这里主要强调一下=以及==。这两个符号含义不同=(赋值的意思)而==(判断相等的意思)。=是将一个值赋给一个变量,右值赋给左值,且左值必须为变量,可被修改,不能为常量,且=可为多个变量赋相同的值,例如int a = c(c为常数),将c赋值给变量a。而==表示两个值相等。多个运算符不宜连用,eg:i<j<k。

2.条件操作符(三目操作符)

形式如下:exp1?exp2:exp3

意思是如果exp1表达式为真,执行exp2,exp2的结果即为整个表达式的结果。反之执行表达式exp3,则exp3的结果为整个表达式结果。例如:b = a>5 ? 3:-3;printf("%d",b); 其实可以这样理解:b=(a>5 ? 3:-3),先判断执行表达式,将值赋给b,最后输出b。

四.逻辑操作符

常见的:&& , || , !需要注意的是!是逻辑取反操作符。&&为并且的意思,举个例子:周老师叫a&&b两个同学去办事情,a,b必须两个都去这件事情才能完成。而||表示a,b两个同学只要去一个这件事情就能完成。

在这里逻辑运算符我还想介绍一个内容叫短路。

c语言的逻辑操作符有一个特点:从左到右运算

如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
为了方便理解,接下来以一段代码为例
注意看逻辑运算符是&&,根据上面的总结,a初始化的值为0,进入下面的表达式,由于a++是先使用后自增,所以,a进入表达式为0(即为假),表达式短路,所以b,c,d打印的值不变,a因为自增了,所以a打印的为1。
再用||举例,代码如下: ,a++先使用后自增,为0进来,为假,因为||,所以继续向右执行,b先自增为3,为真,则d++不在执行。所以打印的结果依次如图所示。                                                                                    

五.switch语句

switch语句较为特殊,相当于多重if else语句,当有多重if else语句,使用switch语句,可以增加代码的可读性。基本的形式如下:

switch(表达式)

{

case 1:statement

case 2:statement

case 3:statement

default:statement

}值得注意的是:case后面需要接常量表达式,当结果不是case1 case2 case3时,就会执行default后面的常量表达式,default语句位置顺序可前可后,但习惯是放最后。为了更好的跟if语句对比,举例代码如下:

//打印星期 

,switch语句增加了代码的可读性。

六.while循环语句

while循环语句跟if语句形式很像,形式为:while(表达式),如果表达式为真,则执行循环体,循环后,如果表达式依旧为真,则继续执行循环。举例代码如下:

,在做一个练习,用while循环实现。代码如下:

首先理清思路,若想打印倒序4321,则应对1234取余,打印,然后再/10取整,循环。仔细看上面代码,因为while循环体里面代码执行顺序是从上到下,所以先打印n%10,在对1234/10取整,所以得到123(为真),继续循环,当取整为0(即为假时),循环结束。

七.for循环

for循环基本语法形式如下:for(表达式1;表达式2;表达式3)

{循环体}

其中表达式1是程序入口,相当于初始的值

表达式2是判断式,如果符合条件为真,则执行循环体

执行完循环后,执行表达式3,如果表达式3的结果符合表达式2,则继续进入循环体

接下来来一个简单的for循环代码,举例如下:

//用for循环在屏幕上打印1-10的值

接下来更好的理解for循环,代码示例:计算1~100之间3的倍数的数字之和

八.do while语句

do while语句相对前面的循环语句更好理解

基本的语法形式如下:

do

语句

while(表达式)

与前面不同的是do while语句先执行在进行判断是否继续循环,也就是说语句总比判断表达上多执行一次。

实例说明://使用do while语句在屏幕上打印1-10的值;代码如下:

,先初始化i=1,打印i,i自增,符合表达式,继续执行do后语句。

对do while语句有了一定了解,接下来再来用代码举例,加深印象。

题目:输⼊⼀个正整数,计算这个整数是⼏位数?

代码示例如下:

,这段代码可以这样理解随意输入的值i,先执行do语句,取整,用count来计数,循环的条件是i,即i不等于0,为真。当i取整为零时,循环表达式为假,循环停止。

九.break和continue语句

break语句为终止循环,跳出循环后往下继续执行其他非循环体语句。

而continue语句与break语句略有不同,continue语句在循环体中,是跳过continue后面语句,回到循环体开始执行判断。下面以两段代码为例。

,关于这段代码,我们可以这样理解:i=1进入循环,打印i,i+1,当i=5时,break跳出循环,所以在屏幕上打印的是数字1-5。

使用continue语句后,当i=5时,跳回循环开始,不执行i=i+1,所以输出结果陷入死循环。

十.循环的嵌套(以及vs监视变量,观察变量值的变化,理解循环的执行)

了解完上面的循环之后,为了更好的解决问题,则需要循环的嵌套,即while,do while,for等的结合,下面依旧以一个简单的代码为例://找出100~200之间的素数,并打印在屏幕上,实例代码如下

,这样的代码看起来可读性不高,显得较为繁琐,看起来很低级,下面换另外一种代码,如下:

,理解这段代码,能帮助我们更好的理解for循环是怎样运行的,为了方便理解,在vs2019上调试监视变量flag,i,j的值的变化。如下:

1.首先按键盘F10,多按几次,添加需要监视的变量flag,i,j。

2.注意光标箭头的移动,以及变量值的变化

,当进入函数时,int i = 0,被初始化,i的值变为0,所以下面监视显示i的值变为0.

接着进入循环,第一个for循环内,i被赋值100,j被初始化为0,,flag被初始化为1(后面会解释为什么要定义flag变量),如下:

,紧接着第二个循环内j被赋值为2,

,进入for循环体内,判断是否满足if语句的表达式,此时i等于100,表达式为真,flag被赋值为0,break跳出第二个for循环,继续执行第一个for循环,注意观察变量的值的变化:

,此时进入第二个for循环,继续观察变量值的变化,

,当i为101,j为2时,不满足第二个for循环里if的条件,此时的flag还是循环前被赋值的1,跳回第二个for循环,重新进行判断赋值

,按F10,程序会多次执行以上步骤,因为一直在第二个循环内,所以i的值为101,j的值一直自增1,直到不满足j<i,如下:

,当第二个循环不满足j<i时,第二个循环结束,程序跳出,flag为1(未经过第二个循环flag赋值那一步),打印i,如下:

,此时因为还在第一个for循环内,所以打印了一个符合要求的数值,接下来程序会回到第一个for循环开始,继续判断,重复以上步骤,直到打印完所有的符合要求的值,第一个循环结束,整个程序结束。由这里我们不难知道,当有多个for嵌套循环时,内层循环优先,后外层循环。而这里的flag变量相当于标记的作用,赋值为一,用来返回循环结果。

十一.goto语句

goto语句较为特殊,类似于continue,break语句,却又不同于这二者,因为goto语句较为灵活,可跳转到同一函数内设置好的标记点,例如:

goto语句一般不使用因为使用不恰当会在程序内随意跳转,造成程序错乱。但goto语句相对于break而言,break只能跳出一个循环,但是goto可跳出多个循环。

循环就介绍到这里。

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值