C语言程序设计教程(第3章(上) 运算符和表达式)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
小结
表达式是由什么构成的? 什么影响表达式中各运算符的运算顺序? 掌握单个运算符的要点是什么? 关系运算有多少种不同的结果? 求余运算要求什么样的运算对象?
信息科学与工程学院
课堂作业
1、请将下列代数式写成C语言表达式:
z ( x y ) (c y )
y ( ax
2
bx c )
信息科学与工程学院
高 double long unsigned int char,short 例2 int i; float f; double d; long l; 10+‘a’ +i*f - d/l int double double int double double float
说明:
必定的转换 运算对象类型不同时转换
低
例1 char ch; int i; float f; double d;
ch/i + f*d
int
- (f+i)
double double
int
double double
double double
double
double
信息科学与工程学院
一些注意要点:
★ 整数赋值给浮点数变量时没有问题 ★ float数赋给double类型变量时没有问题 ★ 短整数赋给长整数类型变量时没有问题 ★ 在不超出值的范围内,整数之间相互赋值一般 没有问题。 ★ 可以将字符类型看做表示范围较小的整型。 ★ double类型值赋给float类型变量时会有精度上 损失。
功能是:求表达式中变量名所代表的存 储单元所占的字节数;或是求表达式中常 量的存储单元所占的字节数;或是求表达 式中的数据类型表示的数据在内存单元中 所占的字节数。
信息科学与工程学院
练习
• sizeof(double) • sizeof(long) • sizeof(a) /* 其中float a;*/
• • •
信息科学与工程学院
3.2 算术运算符
• • • • 种类: + - * / % 算术运算符为双目运算符,要求它所带的 两个操作数必须为同种类型。运算结果也 为同种类型。 求余%运算的操作对象必须为整数。 运算符的优先级和结合性请参考附录B
信息科学与工程学院
• 当运算符所带的运算对象不合适时,系统 能够按照所示的方向自动对数据对象的类 型进行转换。
信息科学与工程学院
练习
• 请问该段代码运行后,a和b的值?它是如何运算 的?
b=4; a=b=2;
a=2,b=2
• 请问该段代码运行后,a和b的值?
b=4; a=5=b=7;
因5=b有语法错误,不能通过编译
信息科学与工程学院
复合赋值运算符
• 把赋值运算符跟其他运算符放在一起,就构成符 合赋值运算符。 • x+=2; => x=x+2; • a*=b-2 => a=a*(b-2); • 其他复合赋值运算运算符请看附录B
信息科学与工程学院
赋值表达式的类型转换
• 当赋值运算符左边的变量与赋值运算符右边的表达式 的数据类型不相同时,系统负责将右边的数据类型转 换成左边的数据类型。 • 此时,会有两种情况产生,一种是转换以后会丢失数 据,另一种是转换以后不会丢失数据。 • 这与赋值号两边的表达式的数据类型所占的字节数及 存储表示方式有关。也跟编译器有关。
信息科学与工程学院
3.1 表达式
• 函数体是由什么构成的? • 构成函数体的语句一般分为两种语句
定义语句 执行语句
• 执行语句又分两类
函数调用语句 表达式语句
信息科学与工程学院
表达式语句和表达式
• 表达式语句由表达式加分号“;”组成 • 表达式是由运算符和运算对象按照约定的 规则组合在一起的句子。 • a=1; • b=a+10; • b=a+10*2;
C语言系统对任何非0值都认定为是逻辑真,而将0认定 为逻辑假。 逻辑运算的结果仍然只有两个:1(逻辑真)和0(逻 辑假)。
信息科学与工程学院
结合方向和优先级
• 见附录B
优先级:!大于&&大于|| 结合性?
! :从右向左
&& :从左向右
|| Βιβλιοθήκη Baidu从左向右
信息科学与工程学院
练习
• • • • • • 逻辑运算最终会有多少种不同的结果? 逻辑运算的结果是什么数据类型? 1 a = 1>3 || 1 0 2>1 && 7>8 1 !(7>8) 提示:优先级查附录B
信息科学与工程学院
练习
• • • • • 请求以下语句的运行结果: 1/5 7%2 请问1.0/2的运算结果及其类型 请将下列代数式写成C语言表达式:
z 1 2 ( xy 2 )
信息科学与工程学院
3.3 赋值运算符
• • • • • • 含义 操作个数 运算结果是左边操作数的结果 左边的操作数(左值)必须为变量 赋值运算符的优先级小于算术运算符。 赋值运算符的结合性是从右到左
• 本部分需要掌握的知识点 各种不同运算符的意义,特别是赋值运算 表达式的组成规则以及其运算规则(优先 级和结合性) 运算过程中类型转换规则
信息科学与工程学院
内容安排
3.1 表达式 3.2 算术运算符 3.3 赋值运算符 3.4 不同数据类型数据间的混合运算 3.5 关系运算符 3.6 逻辑运算符 3.7 增1/减1运算符 *3.8 位逻辑运算符 3.9 其它运算符
信息科学与工程学院
上机实验二
• 《上机指导》实验2 基本数据类型与运算 符 提高部分: 实验作业 第1、第3题和第5题
信息科学与工程学院
附加材料:库函数的使用
信息科学与工程学院
表达式的求值规则
• 从左往右扫描表达式 • 优先级高的运算符先得到运算机会。 • 当优先级相同时,运算符的结合性决定那 一个先得到运算机会。
信息科学与工程学院
掌握单个运算符的要点
• • 运算符的运算意义 运算符带多少个操作数,要求是什么类 型,运算符和运算对象组合顺序 运算符的运算结果是什么类型 运算符的优先级 运算符的结合性
信息科学与工程学院
P65例3.13 求各种类型数据在内存中所占的位数。
#include "stdio.h" void main() { printf("char=%d bit\n",8*sizeof(char)); printf("short int=%d bit\n",8*sizeof(short int)); printf("常量10占用%d bit\n",8*sizeof(10)); printf("int=%d bit\n",8*sizeof(int)); printf("long int=%d bit\n",8*sizeof(long int)); printf("float=%d bit\n",8*sizeof(float)); printf("常量2.3占用%d bit\n",8*sizeof(2.3)); printf("double=%d bit\n",8*sizeof(double)); printf("\"china\"=%d bit\n",8*sizeof("china")); }
信息科学与工程学院
3.4 不同数据类型数据间的混合运算
• 自动转换
• 强制转换
• 赋值表达式的类型转换
信息科学与工程学院
自动转换
• 1.0 / 5
信息科学与工程学院
强制转换
•格式: (数据类型名) 操作对象 • 举例:
long a; short b = 30000,c=30000; a = (long)b + (long)c;
信息科学与工程学院
程序的运行结果是:
char=8 bit short int=16 bit 常量10占用32 bit int=32 bit long int=32 bit float=32 bit 常量2.3占用64 bit double=64 bit "china"=48 bit
信息科学与工程学院
信息科学与工程学院
练习
• 关系运算的结果是什么数据类型?为什么? • 表达式(2>3)+5的结果是多少? 5 • 2>3 == 1>4 的结果是多少? 1 • 以下代码运行后,b的值是多少?
int a=10,b; b=30<a<100;
0
信息科学与工程学院
3.6 逻辑运算符
1. &&(与) 带两个运算对象,当两个运算对象 都为真时,结果为真。 否则为假。 2. ||(或) 带两个运算对象,两个运算对象都 为假时,结果为假。否则为真。 3. !(非) 带一个运算对象,运算对象为真, 结果为假。否则为真。 注意:
信息科学与工程学院
例
j=3; k=++j; //k=4,j=4 //k=3,j=4 j=3; k=j++; j=3; printf(“%d”,++j); //4 j=3; printf(“%d”,j++); //3 a=3;b=5;c=(++a)*b; //c=20,a=4 a=3;b=5;c=(a++)*b; //c=15,a=4
信息科学与工程学院
带副作用的表达式
• 在C语言中,如果逻辑运算符的左操作数已 经能够确定表达式的解,则系统不再计算 右操作数的值。 • 以下代码执行之后x、y、c的值是多少?
x=y=2; c=(x= =0 && (y=4)) ;
x=2
c=0
y=2
信息科学与工程学院
3.7 增1/减1运算符
• ++和--。 这两个运算符都是单目运算符,其功能分别是将变 量自身的内容增1和减1。 • 共有两种方式 前缀形式,即它们在操作数前,如++i; 后缀形式,即它们在操作数后,如i++。 • 运算方法 前缀形式是先增(减)1,后被引用; 后缀形式是先被引用,后增(减)1。
信息科学与工程学院
C语言程序设计
信息科学与工程学院
上一章内容回顾
标识符的构成规则是什么? 有那些基本数据类型?请说出这些数据类 型的说明符、输入输出格式符? 一般整数表示的值大概范围? 什么是字符串常量?如何输出? 字符类型跟整型类型的异同? 作业讲解(放在后面)
信息科学与工程学院
第3章(上) 运算符和表达式
信息科学与工程学院
思考
i=10++; 上述代码的执行结果: 出现编译错误!
信息科学与工程学院
使用须知
见P65 尽量不要跟其他运算符混合使用
信息科学与工程学院
*3.8 位逻辑运算符
• (自学)
信息科学与工程学院
3.9 其它运算符
• 逗号运算符 • 求字节数运算符
信息科学与工程学院
逗号运算符
• 形式:
表达式1,表达式2,表达式3,…… 逗号表达式的求值过程是:先求解表达式1, 再求解表达式2,……,并将最后一个表达式的 解作为逗号表达式的解。 例:c=(a=10,b=3); c=3
信息科学与工程学院
求字节数运算符
• 其语法格式为: sizeof(表达式) 表达式可以是变量名、常量、以及 数据类型名。
信息科学与工程学院
举例说明:使用整数变量来表达字符数据
#include "stdio.h" void main() { int c; /* char c;*/ c='B'; printf("c=%c", c+’a’-’A’); }
运行结果: c=b
信息科学与工程学院
3.5 关系运算符
• 所谓关系运算,实际上就是比较两个数值的大小。 那么,比较两个数值的大小的运算符就是关系运 算符。 • 关系运算符有六个>、>=、<、<=、==、!=。 • 关系表达式的运算结果为真或假,C语言用整数1 表示真,整数0表示假。 • 关系运算符都是双目运算符,并且都是从左向右 结合的。 • 关系运算要求两个同类型的操作数 • 优先级(附录B)