C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实
现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使⽤ if、switch实现分⽀结构,使⽤ for、 while、 do while 实现循环结构。
- if语句
1.1if的语法形式:
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏
在C语⾔中,0为假,⾮0表⽰真,
也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不
是0,则语句执⾏。
如图所示:
举个例子:判断一个整数是否为奇数。
1.2else
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢?这⾥就需要 if ..else 语句了。
语法形式:
举个例子:判断5是奇数还是偶数。
1.3一个if语句中包含多条语句
举个例子:
比较这两个代码程序,我们可以发现if语句中无论a是否大于18,都会打印“可以独立了”,由此可以看出if后面不加{},只能控制一条语句,要想if后面的两条语句都受if语句控制,要把两条语句都放在{}中就行了,else语句也是这样。
1.4嵌套if
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
举个例子:判断一个数是正数还是负数或者是0.
else if 和else一起存在运行,并且共同嵌入上面else语句中。
1.5悬空else问题
如果有多个if和 else,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
先举个例子:
大家猜猜看看打印的结果是啥?结果看下面的图
什么都没打印,可能有的小伙伴该迷糊了,这就要用到else悬空的问题了,可能有的小伙伴以为要打印’haha’,这是为什么呢?好好揣测就知道了,else总是跟它最近的if匹配,这样想,是不是就绕过来了,当然也可以让else跟第一个if匹配,只需加上{}就行了。
这样就行了,小伙伴们看明白了没?
- 关系操作符
关系表达式通常返回0或1 ,表⽰真假。
C 语⾔中, 0表⽰假,所有⾮零值表⽰真
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator),主要有下⾯6个。
{>} ⼤于运算符
{< }⼩于运算符
{>= }⼤于等于运算符
{<=} ⼩于等于运算符
{==} 相等运算符
{!=} 不相等运算符
(特别注意==和=可不一样哦)
2.1将”==”当成”=”
举个例子:
看,这就是把”==”当成”=”,明明输的是3,确打印2。有时候,可能会不⼩⼼写出上⾯的代码,它可以运⾏,但很容易出现意料之外的结果,为了防⽌出现这种错误,有的程序员喜欢将变量写在等号的右边,这样的话,如果你少些个”=”,程序就会报错。
2.2多个运算符来连用
举个例子:
伙伴们,可以猜猜最终打印什么?可能有小伙伴认为打印”hehe”,也有伙伴们认为什么都不打印,为什么会出现两种答案呢?结果如图:
这个时候,就有伙伴们疑惑了,b<c,这根本就不可能就不可能,下面让我们一起来分析一下,还记得上面说的返回值是0或1,其实a<b<c可以看成(a<b)<c,因为关系运算符是从左到右计算而不是看成a<b,b<c。这样是不是更好理解了,(a<b)这是对的所以看成1,1<c,这当然也是对的。
来举个例子,伙伴们就理解了,年龄在12~17岁的输出少年,年龄在18~36岁输出青年。
明白了吧,伙伴们。
- 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:exp1? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1为假, exp3计算,计算的结果是整个表达式的结果。
举个例子,你就明白了
- 逻辑操作符: && ,|| ,!
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运符。
• ! :逻辑取反运算符(改变单个表达式的真假)。
• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
• || :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
4.1逻辑取反操作符
举个例子:假如有一变量a,如果a表示真,那么!a就是假,反之,也可以哦。
4.2逻辑与运算符
&&就是与运算符,也是并且的意思, &&是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
举个例子:年龄在0~12岁输出“小孩子”,年龄在12~18岁输出“少年”,年龄在18~36岁输出“青年”。
4.3逻辑或运算符
||就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a||b , ||两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
举个例子:判断1000年到2000年之间闰年的个数
4.4短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
就像上面的一段代码,12 < a && a < 18,如果输入11,即使11<18也没用,前面的12 < 11,结果为0,整个表达式就为0.伙伴们可以尝试一下。
- Switch语句
除了 if 语句外,C语⾔还提供了 switch语句来实现分⽀结构。 switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if改成更易⽤、可读性更好的形式。
根据不同的expression值来执行相应的case分支,如没有相对应的值,就执行default分支。
需要注意的是:expression必须是整数,case后面的数必须是常量的表达式。
5.1switch语句中的break
先举个例子:
可以先猜猜看打印的值是什么?结果如下图:
原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case语句的后边没有 break语句,代码会继续往下执⾏,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case2中的语句。
所以在 switch 语句中 break语句是⾮常重要的,能实现真正的分⽀效果。
当然, break也不是每个 case语句都得有,这就得根据实际情况来看了。
如果加上break,来看看效果:
由此,break是非常重要的
5.2 switch语句中的default
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹 配代码中的 case语句的时候,这时候要不就不做处理,要不就得在 switch语句中加⼊ default ⼦句。
switch后边的 expression 的结果不是 1 ,也不是 2 的时候,就会执⾏ default ⼦句
在 switch 语句中 case语句和 default语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。
不过我们通常是把 default ⼦句放在最后处理的。
- while循环
C语⾔提供了3种循环语句, while 就是其中⼀种,接下来就介绍⼀下 while 语句。 while 语句的语法结构和if 语句⾮常相似。
来看形式:
来举个例子:这是先运行的if语句
这是while的语句
这就是他们的区别,while语句是可以实现循环效果的。
6.2while语句的执行流程
⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语 句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
6.3while的实践
来个例子:打印0到50的数字
最后,看到这里就要结束了哦,文章中如有不正确的地方,期待伙伴们的留言。你们的每一次交流,都将成为我们共同进步的阶梯。