C语言 -- 分支和循环(上)
正文开始
C语言是结构化的程序设计语言,这里的结构指的是 顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使用 if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构。
1. if语句
1.1 if
if 语句的语法形式如下:
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语⾔中,0为假,⾮0表⽰真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。
例⼦:输⼊⼀个整数,判断是否为奇数
if 语句图示:
1.2 else
如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这⾥里就需要 if…else… 语句了,语法形式如下:
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
练习:输⼊⼀个年龄,>=18岁就输出:成年,否则就输出:未成年
1.3 分支中包含多条语句
- 默认在 if 和 else 语句中默认都只控制⼀条语句(if 后不加大括号的情况下)
- 那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来,else后也可以跟上⼤括号。
示例1:
示例2:
1.4 嵌套if
在 if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
上述代码也可以这样写,如下:
再比如:输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:负数。
以上就是嵌套if语句的语法,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
练习:
1.5 悬空else问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
我们首先从下面代码开始
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if
语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if…else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不
成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。
如果代码改成下⾯这样就更加容易理解了。
或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码:
要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使用,让代码的可读性更高。
下面是不合法代码:
2. 关系操作符
C语⾔⽤于比较的表达式,称为“关系表达式”(relational expression),里面使用的运算符就称为“关系运算符”(relational operator),主要有下面6个。
下面是一些例子。
关系表达式通常返回 0 或 1 ,表示真假。
C语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 20 > 12 返回 1 , 12 > 20 返回 0 。
关系表达式常⽤于 if 或 while 结构。
例子1:
例子2:
注意:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。
上面示例中,原意是 a == 3 ,但是不小心写成 a = 3 。这个式⼦表⽰对变量 a 赋值 3 ,它的返回值为 3 ,所以 if 判断总是为真。
为了防止出现这种错误,有的程序员喜欢将变量写在等号的右边。
这样的话,如果把 == 误写成 = ,编译器就会报错。
另⼀个需要避免的错误是:多个关系运算符不宜连⽤。
上⾯式⼦中, i < j 返回 0 或 1 ,所以最终是 0 或 1 与变量 k 进行比较。如果想要判断变量 j
的值是否在 i 和 k 之间,应该使用下面的写法。
例子:
比如:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年。
3. 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果.
练习1:
练习2:使⽤条件表达式实现找两个数中较⼤值。