第三章 运算符
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表达式是操作数和运算符的集合 赋值运算符的语法如下:variable = expression 关系运算符运用测试两个操作数之间的关系 关系表达式计算出的值始终为逻辑真(非0)或逻辑假(0)
本章总结
☺ 逻辑运算符用于组合多个条件(&& 和 ||)或者为某一条 件取反(!) ☺ sizeof运算符用于在程序中测试某一数据类型占用多少字 节 ☺ 在复杂表达式中,通过运算符的优先级确定各种运算符的 执行顺序
}
输出: 商为 1.000000
余数为 2
加 1 后为 26 减 1 后为 11
算术运算符之一元算术运算符
1、如果sum++用于一个赋值语句或printf()语句中,将首先使 表达式 如何计算 结果 (num1=5) 用sum的当前值赋值或将其输出,然后再将sum的值加l。 num2 = ++num1; num1 = num1 + 1; num2 = 6; 算术 2、++和--只能用于整型变量,不能用于常量和表达式 num2 = num1; num1 = 6; num++ num=num+1 ++ 3、++和--的结合方向是“右结合性” num2 = num1++; num2 = num1; num2 = 5; 4、i+++j /* 结果是(i++)+j还是 ++num */num1 = 6; i+(++j) num++ num1 = num1 + 1; --num num-一元
#include<stdio.h>
main() {
int sum = 5; int sum1 = 5; int a,b; a = sum++; b = --sum1; printf("%d\n",a); printf("%d\n",b); printf("%d\n",sum); printf("%d\n",sum1); printf("%d\n",sum--); printf("%d\n",++sum1); }
&& || !
逻辑运算符之注意
条件表达式将从左到右一个一个执行并进行判断,一旦 给定的条件足以判断真假时,之后的条件就会被无视, 换句话说,不执行
&&当两个运算量都是真时,其结果为真
因此,当左边已是0,右边的表达式不再求解。
|| 当两个运算量有一个为真时,其结果为真。 因此,当左边已是1,右边的表达式不再求解
a+b-c /*+和-的结合方向都是从左向右*/ /*b先与+结合计算a+b,然后执行减法*/ a=b=1 /*=的结合方向是从右向左,先计算b=1*/
运算符的目
一目运算符:运算所需变量为一个的运算符 双目运算符:运算所需变量为两个的运算符
三目运算符:运算所需变量为三个的运算符
算术运算符
算术运算
5 4 6 4 6 5
赋值运算符
赋值运算符 = 把右侧表达式的值赋给左侧的变量; 一般情况下,赋值运算符左侧只能是变量; 赋值运算符的优先级较低,“自右向左”结合; 运算符两侧类型不一致时,要进行类型转换; 赋值表达式可嵌套。 举例 a=5; /*表达式的值为5*/ a=b=3; /*a=(b=3)*/ a=(b=4)+(c=3); /*b=4, c=3, a=7*/
4
4
注意:在32位计算机中,int类型的变量占4字节的内存大 小,和long类型的大小一样,所以现在基本上可以直接使 用int类型,而不需要使用long类型。
int short int long float double
4 2 4 4 8
逗号运算符
逗号运算符一般形式
表达式1, 表达式2
其计算规则
比赋值运算符还低,结合性是“自左向右” 先计算表达式1,再计算表达式2,最后值为表达式2的值
第2章内容回顾
常量在程序中不能被更改,而变量在程序中可以被更改 C语言中的基本数据类型包括整型、单精度浮点型、双精度浮点型和字 符型 整型分为短整型、整型、长整型,每种整型又可分为有符号型和无符号 型 单精度浮点型和双精度浮点型变量可以存储实数 字符型变量可以存储单个字符,其值是该字符的ASCII 码 printf() 和 scanf() 函数属于格式输入输出函数 getchar() 和 putchar() 函数用来输入输出单个字符的函数
num2 = --num1; num1 = num1 - 1; num2 = num1; 前缀
num2 = num1; num-num1 = num1 - 1;
num2 = 4; num1 = 4;
后缀
num2 = num1--;
--
二元
num2 = num=num-15; num1 = 4;
算术运算符之示例
输出: 书的价格 = 60.750000 书的新价格 = 73.250000
赋值运算符探讨
• a*=b等价于a=a*b的话 那a*=(b+1)等价于a=a*b+1还是a=a*(b+1) • 那么表达式a*=b作为操作数时,它的值是多少? • Index_declared_by_zeffiris project_help[max_world] += 18; 你愿意把它写成a=a+b的形式吗?
赋值运算符
复合赋值运算符 在=前加上算术运算符或位运算符
运算符
+= -= *=
表达式
X += 5 X -= 5 X *= 5
计算
X=X+5 X=X-5 X=X*5
结果(假设 X=10)
15 5 50
/=
%=
X /= 5
X %= 5
X=X/5
X=X%5
2
0
赋值运算符之示例
#include <stdio.h> int main () book_price=book_price+12.50; { float book_price = 60.75; printf("\n 书的价格 = %f",book_price); book_price += 12.50; printf("\n 书的新价格 =%f\n",book_price); }
求下面算术表达式的值:
要求: (1)、首先自已通过所学得到结果 (2)、再到计算机上实现代码,得到结果 (3)、对比两次的结果,总结结果不同的原因 例1. x+a%3*(int)(x+y)%2/4 设:x=2.5,a=7,y=4.7 例2.(float)(a+b)/2+(int)x%(int)y 设:a=2,b=3,x=3.5, y=2.5
逻辑运算符例
#include<stdio.h> void main() {
int x=10,b=20; printf("!x+b=%d\n",!a+b);//0 printf("!(X+b)>20=%d\n",!(a+b)>20);//0 printf("3&&0||-2=%d\n",3&&0||-2);//1
> (num3 – num4)
真 假
num=40;
num/10 2 如果 gender = ‘m’ ‘f’ gender ‘m’
!= =
==
逻辑运算符
逻辑运算符用于连接一个或多个条件,判断这些条件是否 成立 逻辑运算符的类型为:
运算
逻辑“与” 逻辑“或” 逻辑“非”
运算符
表达式
operand1 && operand2 operand1 || operand2 !operand1
运算符的优先级
优先级: 运算符的运算次序按优先级由高到低执行 可以用圆括号( )改变运算符的执行次序 举例: a+b*c–d/e /*先算乘除,后算加减*/ /*乘除比加减优先级高*/ (a+b)*(c-d)/e /*先算加减,后算乘除*/
运算符的结合方向
结合方向: 当一个操作数两侧的运算符优先级相同时,运算次序 按照结合方向的规定进行。 自左向右,为左结合性,反之为右结合性。 举例:
第3章
运算符
预习检查
表达式由那些元素组成? C语言用什么值代表假和真呢? c = a+++b;后c的值是?
本章目标
写出下面表达式运算后a 的值,设a =24,其中,int a, n;
(1)、a+=a (2)、a*=2+3; (3)、a%=(n%=2),设n=5 (4)、a-=3.5; (5)、a/=a+a; (6)、a+=a-=a*=a 要求: (1)、预测结果 (2)、上机运行 (3)、总结赋值运算符的特点
算术运算符
描述
表达式
加法 减法 乘法
+ *
用于执行加法运算 用于执行减法运算 用于执行乘法运算
operandi+operand2 operandi-operand2 operandi*operand2
除法
取余 自增 自减
/
% ++ --
用于执行除法运算并获得商
用于获得除法运算后的余数 用于将操作数递增l 用于将操作数递减l
注意
逗号运算符的优先级最低, 逗号表达式的值是最后一个表达式的值 用于把多个表达式组合成一个表达式使用
运算符优先级与结合方向总结
不同优先级的运算符,运算次序按优先级由高到低执行 同一优先级的运算符,运算次序按结合方向的规定执行 可以使用圆括号( )明确运算次序 圆括号()具有最高的优先级
阶段总结
本章结构
表达式和运算符简介 赋值运算符 关系运算符
运算符
条件结构
逻辑运算符 Sizeof运算符 运算符的优先级
表达式
运算符
操作数
操作数
Z = ( X * 2 ) + ( 5 – Y )
表达式 表达 式 表达式
表达式
表达式由操作数和运算符的组合而成 表达式中的操作数可以是变量、常量或者子表达式 一个表达式也可以成为另一个表达式的操作数 运算符的主要类型有: 算术运算符: + - * / % ++ -赋值运算符: = += -= *= /= %= >>= <<= &= ^= |= 关系运算符: > >= < <= == != 逻辑运算符: && || ! 位运算符: << >> ~ | ^ & 条件运算符: ? : 逗号运算符: , 指针运算符: * & 求字节数运算符: sizeof 强制类型转换运算符: (type) 分量运算符: . -> 下标运算符: [] 其它运算符: ()
}
sizeof 运算符
使用 sizeof 运算符可以获得数据类型占用内存空间的大小 。其一般形式为: sizeof(type_name) sizeof(variable_name) sizeof 运算符的结果以字节为单位显示 sizeof 运算符 返回的大小 float num; sizeof(int); char 1 sizeof(num);
operandl/operand2
operandi%operand2 operandi++或 ++operandi operandi--或--opemndI
基本算术运算符
优先级 (从高到低)
* / % + (加) – (减)
结合方向(左结合)
+ (加) – (减) * / %:从左向右
注意:
两元远算符 两个整数相除,结果为整数,且直接舍弃小数部分,而不是采用四 舍五入。 两个数中只要有一个是浮点型数, 结果为浮点值。 模运算的两个操作数必须为整数。
算术运wk.baidu.com符之示例
#include <stdio.h> int main() { int a = 5, b = 3, c = 25, d = 12; float qu; /* 使用算术运算符 */ qu = a / b; // 除法 re = a % b; // 求模 printf ("商为 %f\n",qu); printf ("余数为 %d\n",re);
关系运算符
关系运算符
关系运算符用于测试两个操作数或两个表达式之间的关 系,其中操作数可以是变量、常量或表达式。
操作数
关系运算符
操作数
关系表达式的计算结果:逻辑值(真或假) 在C语言中,“0”表示“假”,“非0”表示“真”
关系运算符
num1=10; num2=5;num3=20;num4=10; (num1 + num2)
本章总结
☺ 逻辑运算符用于组合多个条件(&& 和 ||)或者为某一条 件取反(!) ☺ sizeof运算符用于在程序中测试某一数据类型占用多少字 节 ☺ 在复杂表达式中,通过运算符的优先级确定各种运算符的 执行顺序
}
输出: 商为 1.000000
余数为 2
加 1 后为 26 减 1 后为 11
算术运算符之一元算术运算符
1、如果sum++用于一个赋值语句或printf()语句中,将首先使 表达式 如何计算 结果 (num1=5) 用sum的当前值赋值或将其输出,然后再将sum的值加l。 num2 = ++num1; num1 = num1 + 1; num2 = 6; 算术 2、++和--只能用于整型变量,不能用于常量和表达式 num2 = num1; num1 = 6; num++ num=num+1 ++ 3、++和--的结合方向是“右结合性” num2 = num1++; num2 = num1; num2 = 5; 4、i+++j /* 结果是(i++)+j还是 ++num */num1 = 6; i+(++j) num++ num1 = num1 + 1; --num num-一元
#include<stdio.h>
main() {
int sum = 5; int sum1 = 5; int a,b; a = sum++; b = --sum1; printf("%d\n",a); printf("%d\n",b); printf("%d\n",sum); printf("%d\n",sum1); printf("%d\n",sum--); printf("%d\n",++sum1); }
&& || !
逻辑运算符之注意
条件表达式将从左到右一个一个执行并进行判断,一旦 给定的条件足以判断真假时,之后的条件就会被无视, 换句话说,不执行
&&当两个运算量都是真时,其结果为真
因此,当左边已是0,右边的表达式不再求解。
|| 当两个运算量有一个为真时,其结果为真。 因此,当左边已是1,右边的表达式不再求解
a+b-c /*+和-的结合方向都是从左向右*/ /*b先与+结合计算a+b,然后执行减法*/ a=b=1 /*=的结合方向是从右向左,先计算b=1*/
运算符的目
一目运算符:运算所需变量为一个的运算符 双目运算符:运算所需变量为两个的运算符
三目运算符:运算所需变量为三个的运算符
算术运算符
算术运算
5 4 6 4 6 5
赋值运算符
赋值运算符 = 把右侧表达式的值赋给左侧的变量; 一般情况下,赋值运算符左侧只能是变量; 赋值运算符的优先级较低,“自右向左”结合; 运算符两侧类型不一致时,要进行类型转换; 赋值表达式可嵌套。 举例 a=5; /*表达式的值为5*/ a=b=3; /*a=(b=3)*/ a=(b=4)+(c=3); /*b=4, c=3, a=7*/
4
4
注意:在32位计算机中,int类型的变量占4字节的内存大 小,和long类型的大小一样,所以现在基本上可以直接使 用int类型,而不需要使用long类型。
int short int long float double
4 2 4 4 8
逗号运算符
逗号运算符一般形式
表达式1, 表达式2
其计算规则
比赋值运算符还低,结合性是“自左向右” 先计算表达式1,再计算表达式2,最后值为表达式2的值
第2章内容回顾
常量在程序中不能被更改,而变量在程序中可以被更改 C语言中的基本数据类型包括整型、单精度浮点型、双精度浮点型和字 符型 整型分为短整型、整型、长整型,每种整型又可分为有符号型和无符号 型 单精度浮点型和双精度浮点型变量可以存储实数 字符型变量可以存储单个字符,其值是该字符的ASCII 码 printf() 和 scanf() 函数属于格式输入输出函数 getchar() 和 putchar() 函数用来输入输出单个字符的函数
num2 = --num1; num1 = num1 - 1; num2 = num1; 前缀
num2 = num1; num-num1 = num1 - 1;
num2 = 4; num1 = 4;
后缀
num2 = num1--;
--
二元
num2 = num=num-15; num1 = 4;
算术运算符之示例
输出: 书的价格 = 60.750000 书的新价格 = 73.250000
赋值运算符探讨
• a*=b等价于a=a*b的话 那a*=(b+1)等价于a=a*b+1还是a=a*(b+1) • 那么表达式a*=b作为操作数时,它的值是多少? • Index_declared_by_zeffiris project_help[max_world] += 18; 你愿意把它写成a=a+b的形式吗?
赋值运算符
复合赋值运算符 在=前加上算术运算符或位运算符
运算符
+= -= *=
表达式
X += 5 X -= 5 X *= 5
计算
X=X+5 X=X-5 X=X*5
结果(假设 X=10)
15 5 50
/=
%=
X /= 5
X %= 5
X=X/5
X=X%5
2
0
赋值运算符之示例
#include <stdio.h> int main () book_price=book_price+12.50; { float book_price = 60.75; printf("\n 书的价格 = %f",book_price); book_price += 12.50; printf("\n 书的新价格 =%f\n",book_price); }
求下面算术表达式的值:
要求: (1)、首先自已通过所学得到结果 (2)、再到计算机上实现代码,得到结果 (3)、对比两次的结果,总结结果不同的原因 例1. x+a%3*(int)(x+y)%2/4 设:x=2.5,a=7,y=4.7 例2.(float)(a+b)/2+(int)x%(int)y 设:a=2,b=3,x=3.5, y=2.5
逻辑运算符例
#include<stdio.h> void main() {
int x=10,b=20; printf("!x+b=%d\n",!a+b);//0 printf("!(X+b)>20=%d\n",!(a+b)>20);//0 printf("3&&0||-2=%d\n",3&&0||-2);//1
> (num3 – num4)
真 假
num=40;
num/10 2 如果 gender = ‘m’ ‘f’ gender ‘m’
!= =
==
逻辑运算符
逻辑运算符用于连接一个或多个条件,判断这些条件是否 成立 逻辑运算符的类型为:
运算
逻辑“与” 逻辑“或” 逻辑“非”
运算符
表达式
operand1 && operand2 operand1 || operand2 !operand1
运算符的优先级
优先级: 运算符的运算次序按优先级由高到低执行 可以用圆括号( )改变运算符的执行次序 举例: a+b*c–d/e /*先算乘除,后算加减*/ /*乘除比加减优先级高*/ (a+b)*(c-d)/e /*先算加减,后算乘除*/
运算符的结合方向
结合方向: 当一个操作数两侧的运算符优先级相同时,运算次序 按照结合方向的规定进行。 自左向右,为左结合性,反之为右结合性。 举例:
第3章
运算符
预习检查
表达式由那些元素组成? C语言用什么值代表假和真呢? c = a+++b;后c的值是?
本章目标
写出下面表达式运算后a 的值,设a =24,其中,int a, n;
(1)、a+=a (2)、a*=2+3; (3)、a%=(n%=2),设n=5 (4)、a-=3.5; (5)、a/=a+a; (6)、a+=a-=a*=a 要求: (1)、预测结果 (2)、上机运行 (3)、总结赋值运算符的特点
算术运算符
描述
表达式
加法 减法 乘法
+ *
用于执行加法运算 用于执行减法运算 用于执行乘法运算
operandi+operand2 operandi-operand2 operandi*operand2
除法
取余 自增 自减
/
% ++ --
用于执行除法运算并获得商
用于获得除法运算后的余数 用于将操作数递增l 用于将操作数递减l
注意
逗号运算符的优先级最低, 逗号表达式的值是最后一个表达式的值 用于把多个表达式组合成一个表达式使用
运算符优先级与结合方向总结
不同优先级的运算符,运算次序按优先级由高到低执行 同一优先级的运算符,运算次序按结合方向的规定执行 可以使用圆括号( )明确运算次序 圆括号()具有最高的优先级
阶段总结
本章结构
表达式和运算符简介 赋值运算符 关系运算符
运算符
条件结构
逻辑运算符 Sizeof运算符 运算符的优先级
表达式
运算符
操作数
操作数
Z = ( X * 2 ) + ( 5 – Y )
表达式 表达 式 表达式
表达式
表达式由操作数和运算符的组合而成 表达式中的操作数可以是变量、常量或者子表达式 一个表达式也可以成为另一个表达式的操作数 运算符的主要类型有: 算术运算符: + - * / % ++ -赋值运算符: = += -= *= /= %= >>= <<= &= ^= |= 关系运算符: > >= < <= == != 逻辑运算符: && || ! 位运算符: << >> ~ | ^ & 条件运算符: ? : 逗号运算符: , 指针运算符: * & 求字节数运算符: sizeof 强制类型转换运算符: (type) 分量运算符: . -> 下标运算符: [] 其它运算符: ()
}
sizeof 运算符
使用 sizeof 运算符可以获得数据类型占用内存空间的大小 。其一般形式为: sizeof(type_name) sizeof(variable_name) sizeof 运算符的结果以字节为单位显示 sizeof 运算符 返回的大小 float num; sizeof(int); char 1 sizeof(num);
operandl/operand2
operandi%operand2 operandi++或 ++operandi operandi--或--opemndI
基本算术运算符
优先级 (从高到低)
* / % + (加) – (减)
结合方向(左结合)
+ (加) – (减) * / %:从左向右
注意:
两元远算符 两个整数相除,结果为整数,且直接舍弃小数部分,而不是采用四 舍五入。 两个数中只要有一个是浮点型数, 结果为浮点值。 模运算的两个操作数必须为整数。
算术运wk.baidu.com符之示例
#include <stdio.h> int main() { int a = 5, b = 3, c = 25, d = 12; float qu; /* 使用算术运算符 */ qu = a / b; // 除法 re = a % b; // 求模 printf ("商为 %f\n",qu); printf ("余数为 %d\n",re);
关系运算符
关系运算符
关系运算符用于测试两个操作数或两个表达式之间的关 系,其中操作数可以是变量、常量或表达式。
操作数
关系运算符
操作数
关系表达式的计算结果:逻辑值(真或假) 在C语言中,“0”表示“假”,“非0”表示“真”
关系运算符
num1=10; num2=5;num3=20;num4=10; (num1 + num2)