5.0.0 if结构
5.1.0 什么是if结构
5.1.1 if结构的作用和语法
- 作用:可以实现1段代码在满足指定的条件的时候执行,否则不执行。
- 语法结构:
if (条件表达式)
{
执行代码;
}
条件表达式:比较表达式或者逻辑表达式。
5.1.2 if结构的执行步骤
先判断if后面的条件表达式的真假。
- 如果为真,条件成立,就会执行if块中的代码,执行完毕后再继续往下执行;
- 如果为假,条件不成立,会略过if块中的代码继续往下执行。
5.1.3 使用if结构的注意事项
- if (条件表达式)的后面没有分号。
关于分号,在一条语句的后面,我们都要写一个分号,这个分号表示这条指令的结束。
CPU在识别指令的时候,如何判断指令结束并执行,以分号为基准。
在绝大多数的情况下,每一条语句就代表一个指令,所以每条语句的后面都有一个分号。
但是if结构是一个语法块,它的范围是从{开始到}结束。右大括号表示了语法块的结束。所以,一般情况下,if结构都不需要加分号,因为}就代表了语法块的结束。
- if后面的小括号中其实可以写任意的表达式。在执行的时候,在计算if后面的小括号的表达式的结果只要是0就是假,非0就是真。
虽然写什么都可以,但是一般情况下小括号内还是应该写一个条件表达式。
- 永真和永假的问题。
if (0) 永假
if (1) 永真
- if块中可以有任意行的代码,只要符合逻辑。
- 请保持正确的代码缩进。如果格式混乱,可以选中后control+i对齐代码。
5.2.0 变量的作用域
- 在声明一个变量后会在内存中占用一个空间,而这个空间必须在使用完后被收回,否则会造成内存的占满。
声明在一个大括号中的变量,在这个大括号被CPU执行完毕以后,定义在这个大括号中的变量就会被系统立即回收。
所以定义在一个大括号中的变量只能在这个大括号中访问。
变量的作用域:指的就是变量可以在哪一段范围中访问。
即变量所在的大括号内。
- 我们可以自定义一个作用域,提前释放变量来释放内存,节约资源。
自定义作用域的方法就是用一组大括号来将变量包括在其中。
例子:
int main ()
{
{
int num = 10;
printf(“num = %d\n”,num);
}
int num = 20;
printf(“num = %d\n”,num);
}
- 在不同的作用域中,或者是不同层级的作用域中,是可以定义名称相同的变量的。
这个时候,内层作用域中的同名变量就会将外层作用域的同名变量屏蔽。
在内层作用域中访问的就是内层的,在外层访问的就是外层的。
虽然在不同层级的作用域中可以定义名称相同的变量,但是这样的代码比较混乱,所以一般情况下不要在不同层级的作用域中定义相同名称的变量。
5.3.0 if-else 结构
因为if结构只在在条件满足的时候执行一段代码,条件不满足的时候就无法执行另外的代码。所以就引出了if-else结构。
5.3.1 if-else结构的作用和语法
- 作用:在条件满足的时候执行一段代码,在条件不满足的时候执行另外一段代码。
- 语法:
if (条件表达式)
{
执行代码;
}
else
{
执行代码;
}
5.3.2 执行步骤
- a.先计算if后面的条件表达式的真假
- b.如果为真,就执行if块中的代码,执行完毕之后,结束if-else结构,往下执行会跳过else块中的代码;
- c.如果为假,就执行else块中的代码,不会执行if中的代码,执行完之后继续往下执行。
- d.用法:
if (条件)
{
条件满足时执行的代码;
}
else
{
条件不满足时执行的代码;
}
5.3.3 注意事项
- 保持正确的代码缩进。
- if后的表达式内容任意,结果为0就是假,非0就是真。
- 分号不要乱写;
- if块和else块之间不可以有其他代码。
- if和else中的代码绝对不会同时执行。且if-else结构中一定会执行其中一个条件。
- 块中的代码可以有任意条,只要符合语法逻辑。
5.4.0 if-else if结构
因为if-else结构只能判断一个条件,当有多个条件的时候就无法使用。
而存在一种新的需求:需要按照顺序判断多个条件,只要一个成立,就要执行对应的事情,后面的就不需要再判断了,只有前面的条件不成立的时候,才判断后面的条件。
5.4.1 if-else if结构的作用和语法
- 作用:依次的按照顺序的判断多个条件,只要一个成立,就执行对应的代码。只有前面的不成立,才继续判断下一个。
- 语法:
if (条件表达式1)
{
执行代码;
}
else if (条件表达式2)
{
执行代码;
}
else if (条件表达式3)
{
执行代码;
}
else
{
执行代码;
}
5.4.2 执行步骤
从上到下的依次判断每一个条件表达式的结果,只要有一个条件表达式成立,就执行对应的块代码;
只有当前面的条件表达式不成立的时候才会继续向下判断,如果所有的条件表达式都不成立,那么就执行最后else中的代码。
5.4.3 注意事项
- 只要前面的条件成立,就会执行对应的代码,执行完毕之后立即结束这个结构,哪怕后面的条件是成立的,也不会继续执行。
- 如果判断了后面的条件,就说明前面的条件已经不成立,所以后面的条件中不需要特别的写下前面的条件不成立的情况。
- 判断的条件顺序最好不要乱,如果不考虑顺序,那么每个条件都需要完整列出,就不可以出现上一条b的情况。
但是一般情况下,我们从上倒下的条件范围是依次缩小的。
- 最后一个else可以省略。如果省略就没有默认执行的代码了。
- else if的个数可以任意个。
5.5.0 三元表达式
根据参与的操作数的个数将运算符分为如下几类:
- 双目运算符/双元运算符:指的是参与这个运算的操作数有2个。例如:+、-、*、/、%等;
- 单目运算符/一元运算符:只有一个数据参与运算。例如:++、- -等;
- 三目运算符/三元运算符:指的是有三个数据参与运算的运算符。例如:? :
5.5.1 三元表达式的用法
语法:
条件表达式?值1:值2;
i > 0 ? 100 : 200;
三元表达式的结果是:如果条件表达式成立,那么这个三元表达式的结果就是值1,否则就是值2。
所以三元表达式可以部分代替if-else结构的功能。
要得到一个数据,这个数据的大小是根据某个条件得到的,可以使用if-else也可以使用三元表达式。但是使用三元表达式更简洁一些。
注意:三元表达式内的条件表达式可以是任意的表达式,反正0为假,非0位真;
值1和值2也可以是表达式。
5.6.0 如何产生一个随机数
- 先引入一个系统头文件:
#include <stdlib.h>
- 调用 arc4random_uniform 函数。
在其中传入1个整数n 就会返回一个0到n-1的随机数。
int num = arc4random_uniform(10);
这句代码就是产生一个0到9的随机数,并赋值给num
- 如何产生一个指定范围的随机数:
int num = arc4random_uniform(最大数-最小数+1) + 最小数;