C语言是结构化的程序设计语言,这⾥的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。
1. if语句
1.1 if语句的语法形式为:
表达式为(真),则if语句执行;若表达式不成立,则if语句不执行。
这就是if的执行方式。
小tips:在C语言中,“0”为假,非“0”为真。
所以说,表达式结果为0(假),语句不执行;反之,语句执行。
例子 输入一个数,判断其是否为奇数
该程序逻辑图为:
1.2 else:
如果一个数不是奇数,那它只能是偶数。那任意的一个数,我们怎么判断它是奇数还是偶数呢?这个时候我们就要用到if...else...语句了,它的语句表现形式为:
例子 输入一个整数,判断其是奇数还是偶数
1.3 一个if中包含多个语句
看以上代码运行结果,我们可以发现当我们输入的值不管是>=18 还是<18,"可以谈恋爱了" 都会打印在屏幕上。
这是因为if只能控制一条语句(printf("已经成年\n");),if语句为真,他就执行打印出成年;如果为假,他就不会打印。但是,第二条语句printf("可以谈恋爱\n")是独立存在的。不管语句的真假,他都会执行打印。那怎么样才能控制多条语句呢?那就是使用大括号{}。当然,else也可以使用大括号。
1.4 if语句嵌套
上图中的代码就是嵌套在前⾯的 else ⼦句中的,构成了嵌套的if语句。
1.5 悬空else问题
有很多人认为,以上代码运行结果为Hello C!!!。但是,从下图我们可以看到它什么也没有输出。
这是为什么呢?这个就是悬空else的问题。如果有多个if和else,我们可以记住这一规则——else总和最接近的if相匹配 (在VS2022上编译器会自动排列,上图为了展示出悬空else故意设置)。而上图的else却和第一个if相对齐,这一举措会让我们认为else是和第一个if相匹配的,故而对结果进行误判。
如果就是让else和第一个if进行匹配,那我们可以使用大括号来进行操作哦。
2. 关系操作符
C语言用于比较的表达式,称为“关系表达式”里面使用的运算符就称(relationalexpression),为“关系运算符” (relationaloperator) ,主要有一下六个。
< :⼩于运算符
<= 小于等于运算符
> 大于运算符
>= 大于等于运算符
==相等运算符 小tips:相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符,不要混淆。
!=不相等运算符
2.1误将==写为=
如上图运行结果,我们输入的值为1,但是结果却出现我们输入的是3。这就是==和=混淆的后果,程序虽然可以运行,但是会出现一些错误。上示例原意为a==3,但不小心写成了a=3,而a=3为对x赋值为3,他的返回值为3,所以if总是判断成真。为了防止出现这些错误,有的人喜欢将变量写在等号的右边if(3==a)。这样的话,如果漏写一个等号,编译器会报错。
2.2多个运算符连续使用
看上图所示代码,大家认为该代码运行结果为什么? 可能会有人认为什么都不会输出。也可能有人认为输出Hello C!!!。为什么会出现两种答案?因为他使用了多个运算符。会有人认为是b>a、c<b为假,所以不会输出任何东西。关系运算符是从左到右计算,所以他实际执行的是下面的表达式:
(a<b)<c
上面表达式首先判断a和b的大小,结果为真输出1。然后1和c去进行比较,结果也为真,所以if语句执行,输出结果Hello C!!!
3. 条件操作符
4. 逻辑操作符:&& , || , !
4.1 逻辑取反运算符 (!)
例如我们有一个变量X,如果X表示为真,则!X表示为假;若X表示为假,则!X表示为真
4.2 与运算符
4.3 或运算符
4.4 短路(short-circuit evaluation)
像以上这种仅仅用左操作数的结果就能知道整个表达式的结果,不用对右操作数进行计算的运算成为短路求值。
5. switch语句
上示代码根据不同的expression值来执行相应的case分支,如果没有找到对应的值,就会执行default分支。
小tips:(1)switch 后的 expression 必须是整型表达式 (2)case 后的值,必须是整形常量表达式。
5.1 switch语句中的break
我们发现,在我们输入1之后,它却打印出了七次。这是为什么呢?原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语 句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case 语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case 2 及以后的语句。
如果我们加上break,他就会很好的停下。
所以,switch语句中的break十分重要!!!
5.2 switch语句中的default
6. while循环
6.1 if 和 while的对比
C语⾔提供了3种循环语句while就是其中⼀种接下来就介绍⼀下while语句。while语句的语法结构和if语句⾮常相似。
他们有什么区别呢?我么可以写两段代码运行一下。