004-流程控制-C语言笔记

/ 0

关系运算符和关系表达式

关系运算符:用来比较两个表达式(数据)之间的大小关系,C 语言中的关系运算符有 >>=<<==!= 来。

关系表达式:由关系运算符连接起来的式子,就叫做关系表达式,也可以叫比较表达式。

int num1 = 10;
int num2 = 20;
num1 > num2; //这就是关系表达式

关系表达式描述的是1个条件,并且这个条件只有两种结果,一种是成立,另一种是不成立。char 类型的数据也可以参与比较运算,比的是 char 数据对应的 ASCII 码值大小。

int 类型的变量来表示1个关系表达式的真假,0 代表假 ,1代表真。

int num1 = 10;
int num2 = 20;

int result = num1 > num2; //result用于接收比较结果
int result1 = num1 < num2;

printf("result = %d\n",result); //输出 result = 0
printf("result1 = %d\n",result1); //输出 result = 1

逻辑运算符和逻辑表达式

逻辑运算符:用来判断多个关系表达式之间的关系,C 语言中常用的逻辑运算符有 &&(逻辑与)、||(逻辑或)、!(逻辑非)。

逻辑表达式:由逻辑运算符连接起来的关系表达式,就叫做逻辑表达式。

int num1 = 10, num2 = 20;

//存储关系表达式的结果
int result = num1 > num2;
int result1 = num1 < num2;

//输出关系表达式的结果
printf("result = %d\n",result); //result = 0
printf("result1 = %d\n",result1); //result = 1

//对关系表达式的结果进行逻辑运算并存储收逻辑表达式的结果
int res = num && num1;
int res1 = num || num1;
int res2 = !res1;

//输出逻辑表达式的结果
printf("res = %d\n",res); // res = 0
printf("res1 = %d\n",res1); //res1 = 1
printf("res2 = %d\n",res2); //res2 = 0

&& 运算:只有两个表达式同时成立,结果才为1,其他都为0。

|| 运算:只有两个表达式同时不成立,才为0,其他都为1。

! 运算:表达式成立,结果为0,表达式不成立结果为1。

逻辑运算的短路问题

&& 是先计算左边的条件,再计算右边的条件。如果左边表达式的结果是不成立, 就可以直接确定整个逻辑表达式为不成立。右边的条件表达式将不会再执行。

|| 也是是先计算左边的条件,再计算右边的条件。如果左边的条件计算出来是成立,就可以直接确定整个逻辑表达式成立。右边的条件表达式将不会再执行。

int i  = 1,j = 1;
int res = i++ > 0 || ++i < 10; //i++ > 0已经为真,就不会执行 ++i < 10这个表达式了
int res1 = j++ < 0 && ++j < 10; //j++ < 0已经为假,就不会执行 ++j < 10这个表达式了

printf("res = %d\n",res); //res = 1
printf("i = %d\n",i); //i = 2

printf("res1 = %d\n",res1); //res1 = 0
printf("j = %d\n",j); //j = 2

运算符的优先级和结合性

运算符优先级:C 语言的表达式可以有很多种运算符来共同参与,当多种运算符参与表达式的时候,先算那1个,后算那1个呢?所以我们就要考虑运算符之间的优先级了。C 语言中的运算符分为15个等级,1级的优先级最高,15级的优先级最低,运算符的优先级决定先进行那1个运算。

运算符的结合性:优先级决定了先算哪1个后算哪1个,但是当优先级相同的时候,是从左到右的计算,还是从右到左的计算则是根据结合性来决定的。

QQ20150628-2

if-else语句的使用

if 结构

作用: 可以将1段代码在满足某个条件的时候执行,否则就不执行。

缺点: 只能在条件满足的时候执行代码,条件不满足的时候没法搞。

需求: 希望在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码。if 结构也可以实现,但是效率低下,要写多个 if 结构语句,所以条件要判断多次。

int money = 599;

if(money >= 500){
    printf("走,下课小明请吃饭!\n");
}

if(money < 500){
    printf("放学别走,天台决战!\n");
}

if-else结构

作用:在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码,并且条件只判断1次。

语法:

if (条件表达式) {
    执行代码1;
} else {
    执行代码2;
}

if-else 结构执行步骤:

1.先计算 if 后条件表达式的结果。

2.如果结果为真,就执行 if 块中的代码1,执行完毕之后,结束 if-else 结构往下执行。特别注意这个时候不会执行 else 中的代码2。

3.如果结果为假,就跳过 if 中的代码1,执行 else 中的代码2,执行完毕之后继续往下执行。

if-else if-else结构

作用: 可以有序的判断多个条件,当条件成立的时候执行对应的代码。

语法:

if(条件表达式1)
{
    执行代码1;
}
else if(条件表达式2)
{
    执行代码2;
}
else if(条件表达式3)
{
    执行代码3;
}
else
{
    执行代码;
}

if-else if-else结构执行步骤:

1.从上到下的挨个的去判断每1个条件表达式,如果条件不成立,再判断下1个条件。

2.只要有1个条件是成立的,就会执行其中的代码,执行完毕之后就会立即结束整个结构。

3.如果所有的条件都不成立,那么就执行 else 中的代码。

变量的作用域

当CPU在执行程序的时候,如果执行完1对大括弧,会将声明在这个大括弧之中的变量立即回收掉。所以,定义在1对大括弧之中的变量,只能在这个大括弧之中访问。出了这个大括弧就无法访问了,因为出了这个大括弧以后,定义在大括弧之中的变量就被系统回收掉了。

在多个层级关系的大括弧中,内层大括弧可以声明1个和外层大括弧名字相同的变量。在内层大括弧中,从声明同名变量的地方开始,访问这个同名变量访问的是内层变量。C语言根据变量作用域的不同,将变量分为局部变量全局变量

局部变量:在函数内部定义的变量,称为局部变量。形参也属于局部变量。局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

全局变量:在所有函数外部定义的变量,称为全局变量。全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

#include <stdio.h>

int num = 10;//全局变量

int main() {
    printf("num = %d\n",num);//num = 10

    int num = 20;//局部变量
    printf("num = %d\n",num);//num = 20
    return 0;
}

三目运算符

三目运算符有三个操作数参与运算,三目表达式就是有三个操作数参与运算的表达式。

语法:表达式1 ?  表达式2 : 表达式3;

执行流程:如果表达式1成立,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为条件表达式的值。

#include <stdio.h>

int main() {
    int a = 10;
    int b = a > 0 ? printf("printf函数返回值为int类型哦\n") : printf("不管你信不信,反正我信了\n");

    printf("b = %d\n",b);
    /*
     printf函数返回值为int类型哦
     b = 37
     */
    return 0;
}

如何生成一个随机数

生成随机数可以使用 C 语言的 arc4random_uniform(int) 函数,这个函数会返回0到这个整型参数的数-1中的1个随机的整数。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]){

    int num =  arc4random_uniform(6); //产生0-5的随机整数
    printf("num = %d\n",num);

    return 0;
}