学习目标
1.【掌握】关系运算符和关系表达式
2.【掌握】逻辑运算符和逻辑表达式
3.【掌握】运算符的优先级和结合性
4.【掌握】if-else if-else结构的使用
5.【掌握】变量的作用域
6.【掌握】三目运算符和三目表达式
7.【了解】如何生成一个随机数
一、关系运算符和关系表达式
QQ20150628-1
关系运算符:
在程序中,我们会经常比较两个表达式(数据)之间的关系,比如大于,大于等于,小于,小于等于,等于,不等于。这里使用到的> ,>=,<,<=,=,!=也就是C语言中的关系运算符(也叫比较运算符)。作用:用来比较两个数据之间的关系,也就是比较他们的大于,小于,等于....等关系。
关系表达式:
由关系运算符连接起来的式子,就叫做关系表达式,也可以叫比较表达式。例如:
1
2
3
int num1 = 10;
int num2 = 20;
num1 > num2; //这就是关系表达式
关系表达式表示:描述的是1个条件,而这个条件是否成立,我们再行判断。并且这个条件只有两种结果,一种是成立,另一种是不成立,是没有半成立,半不成立这种说法的。。。。char类型的数据也可以参与比较运算,比的是char数据的ASCII码。
在C语言之中,使用int类型的变量来表示1个关系表达式的真假,0 代表假 ,1代表真。
如果比较表达式的是成立的 那么结果为1
如果比较表达式是不成立的 那么结果为0
也就是
1
2
3
4
5
6
int num1 = 10;
int num2 = 20;
int result = num1 > num2; //可以定义一个int类型变量接收关系表达式的值
int result1 = num1 < num2;
printf("result = %d\n",result); //输出 result = 0
printf("result1 = %d\n",result1); //输出 result = 1
二、逻辑运算符和逻辑表达式
逻辑运算符:
在程序中,我们往往需要判断多个条件某些成立,某些不成立时才能执行某些代码,这个时候光用关系运算已经不能满足我们的需求了。这个时候,我们就可以使用逻辑运算符来进行多个关系表达式之间的运算。作用:描述多个条件,并且指定这多个条件之间关系,多个条件的关系有两种并且关系和或者关系。也就是A表达式成立,并且B表达式也成立的情况下执行某些代码。或者是当A表达式成立或者B表达式成立的情况下执行某些代码。
常用的逻辑运算符有三种:
&& 读作 逻辑与 或者 并且
|| 读作 逻辑或 或者 或者
!读作 逻辑非 或者 取反
逻辑表达式:
由逻辑运算符连接起来的关系表达式式子,就叫做逻辑表达式。比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
int num1 = 10;
int num2 = 20;
int result = num1 > num2; //可以定义一个int类型变量接收关系表达式的值
int result1 = num1 < num2;
printf("result = %d\n",result); //输出 result = 0
printf("result1 = %d\n",result1); //输出 result = 1
int res = num && num1; //可以定义一个int类型变量接收逻辑表达式的值
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
1 && 1 1
0 && 1 0
1 && 0 0
0 && 0 0
|| 只有两个表达式同时不成立,才为0,其他都为1
1 || 1 1
0 || 1 1
1 || 0 1
0 || 0 0
! 表达式成立,结果为0,表达式不成立结果为1
!0 1
!非0 0
逻辑运算短路问题:
&& 在计算逻辑表达式的时候,是先计算左边的条件,再计算右边的条件。如果在计算左边的条件的时候,如果结果是不成立, 这个时候就可以确定整个逻辑表达式为不成立了。这个时候右边的条件根本就不会去执行和计算了。
|| 在计算逻辑表达式的时候,也是先计算左边的条件,再计算右边的条件。如果左边的条件计算出来是成立的,那么就可以确定整个逻辑表达式是成立的了。这个时候右边的条件根本不会去计算了。
1
2
3
4
5
6
7
8
9
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个运算。
QQ20150628-2
运算符的结合性:
优先级决定了先算那1个 后算那1个,当优先级相同的时候,是从左到右的计算,还是从右到左的计算呢?根据结合性来决定的。上图已经详细列出各个运算符的优先级和结合性。
四、if-else语句的使用
if结构:
作用: 可以将1段代码在满足某个条件的时候执行,否则就不执行。
缺点: 只能在条件满足的时候执行代码,条件不满足的时候没法搞。
需求: 希望在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码。
if结构也可以实现,但是效率低下,要写多个if结构,条件要判断多次,实际上,这个条件只需要判断1次就可以了。
1
2
3
4
5
6
7
8
9
int money = 599;
if(money >= 500){
printf("走,下课小明请吃饭!\n");
}
if(money < 500){
printf("放学别走,天台决战!\n");
}
if-else结构:
a. 作用:在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码. 并且条件只判断1次.
b. 语法:
1
2
3
4
5
if(条件表达式){
执行代码1;
}else{
执行代码2;
}
c. 执行步骤:
1.先计算if后的条件表达式的结果。
如果结果为真:就执行if块中的代码1,执行完毕之后,结束if-else结构往下执行。特别注意这个时候不会执行else中的代码2。
如果结果为假:就跳过if中的代码1,执行else中的代码2, 执行完毕之后继续往下执行。
if-else if-else结构:
a. 作用: 可以有序的判断多个条件 当条件成立的时候执行对应的代码.
b. 语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(条件表达式1)
{
执行代码1;
}
else if(条件表达式2)
{
执行代码2;
}
else if(条件表达式3)
{
执行代码3;
}
else
{
执行代码;
}
c. 执行步骤:
从上到下的挨个的去判断每1个条件表达式。如果条件不成立,再判断下1个条件。只要有1个条件是成立的,就会执行其中的代码,执行完毕之后就会立即结束整个结构。如果所有的条件都不成立,那么就执行else中的代码。
五、变量的作用域
声明1个变量,就是在内存中开辟1块空间用来存储数据。那么这个变量需要还是不需要回收呢?什么时候回收呢?
肯定需要回收:
当CPU在执行程序的时候,如果执行完1对大括弧,会将声明在这个大括弧之中的变量立即回收掉。所以,定义在1对大括弧之中的变量,只能在这个大括弧之中访问。出了这个大括弧就无法访问了,因为出了这个大括弧以后 定义在大括弧之中的变量就被系统回收掉了。
在内层作用域之中,可以声明1个和外层作用域名字相同的变量的。在内层作用域之中,从声明同名变量的地方开始 访问这个同名变量访问的是内层的同名变量。这个时候 ,内层的同名变量会将外层的同名变量隐藏起来。我们在写代码的时候,尽量避免内层和外层变量同名,让阅读性更高。
C语言根据变量作用域的不同,将变量分为局部变量和全局变量。
局部变量:
1> 定义:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。
2> 作用域:局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。
全局变量:
1> 定义:在所有函数外部定义的变量,称为全局变量。
2> 作用域:全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。
1
2
3
4
5
6
7
int a;//全局变量a
int main ()
{
int b;//局部变量b
return 0;
}
|
|