C语言程序设计--第5讲 运算符与表达式

上传人:豆浆 文档编号:24901290 上传时间:2017-12-08 格式:PDF 页数:44 大小:748.57KB
返回 下载 相关 举报
C语言程序设计--第5讲  运算符与表达式_第1页
第1页 / 共44页
C语言程序设计--第5讲  运算符与表达式_第2页
第2页 / 共44页
C语言程序设计--第5讲  运算符与表达式_第3页
第3页 / 共44页
C语言程序设计--第5讲  运算符与表达式_第4页
第4页 / 共44页
C语言程序设计--第5讲  运算符与表达式_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《C语言程序设计--第5讲 运算符与表达式》由会员分享,可在线阅读,更多相关《C语言程序设计--第5讲 运算符与表达式(44页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计 第 5讲 语言的运算符 : (1)算术运算符 ( + - * / %) (2)关系运算符 ( = = | ) (5)赋值运算符 (及其扩展赋值运算符) (6)条件运算符 (?:) (7)逗号运算符 (,) (8)指针运算符( *(指向) 和 (取地址) ) (9)求字节数运算符( sizeof() ) (10)强制类型转换运算符( (类型) ) (11)分量运算符( -) (12)下标运算符( ) (13)其他 (如函数调用运算符() 算术运算符和算术表达式 (1)基本的算术运算符 : ( 加法运算符,或正值运算符。如 : +、 +) ( 减法运算符,或负值运算符。如 : -、

2、 -) * (乘法运算符。 如 : *) ( 除法运算符。如 :) ( 模运算符,或称求余运算符) ,两侧均应为整型数据 , 如 :的值为)。 #include stdio.h void main() int a=7, b=3 ,c; float x=8, y=2 ; printf(a/b= %dn, a/b); printf( a%b= %dn, a%b); printf(x/y = %fn, x/y); printf(x%y = %fn, x%y); 课堂练习:写出以下程序的执行结果 (2) 算术表达式: 用算术运算符和括号将运算对象 (也称操作数)连接起来的、符合语法规则的式子,称为 算

3、术表达式 。 运算对象包括常量、变量、函数等。 例如 : * .5 a 合法的表达式 2a*b+3c 非法表达式 运算符的优先级 语言规定了运算符的优先级和结合性。 在表达式求值时,按运算符的优先级别高低次序执行,例如先乘除后加减。 规定了各种运算符的结合方向 (结合性 ) 算术运算符的结合方向为“ 由左至右 ”,即先左后右 。 (3)强制类型转换运算符 强制类型转换运算符可以将一个表达式转换成 所需类型。 一般形式 :(类型名) (表达式 ) 例如: (double) 将的值转换成 double类型 (int)(x+y) 将 x+y的值转换成整型 (float)( 5%3) 将 5%3的值转

4、换成 float型 强制转换 (类型关键字 )表达式 int m=5; (float)m/2; float (m)/2; float m/2; float (m/2); 表达式的结果被转换为设定的类型,但 变量本身的类型和值不变 练习:写出下列程序的执行结果: #include void main() double x=3.6; int i; i = (int) x; printf(x=%lf, i=%dn, x,i); 写出下列程序的执行结果: #include void main() double x=3.6; int i; i = (int) x; printf(x=%lf, i=%f

5、n, x, (int) x); (4) 自增 (+)、自减 (-)运算符 作用是使变量的值增或减 如 : , (在使用之前,先使的值加(减) , (在使用之后,使的值加(减) m = n+; m = n-; 等价于 m=n; m=n; n=n+1; n=n-1; m = +n; m = -n; 等价于 n=n+1; n=n-1; m=n; m=n; i+不 +i的区别: 先执行, 再使用的值; 先使用的值, 再执行。 例如: 设 i= ; i的值先 +1,变成 4, 再赋给 , j的值为 ; 先将 i的值 3赋给 , 值为,然后 =i+1= 注意: (1)自增运算符(),自减运算符()包含赋值

6、操作,所以 只能用于变量 , 而丌能用于常量或表达式。 (2)和的结合方向是“ 自右至左 ”。 练习:写出下列程序的输出结果 int main() int a, b, c, k; a=1; b= a+ *(1-a) ; printf(a=%d, b=%dn, a, b); a=1; b= +a *(1-a) ; printf(a=%d, b=%dn, a, b); a=1; k= ( a + )+( a+ ); printf(k=%d, a=%dn,k, a ); 练习:写出下列程序的输出结果 #include stdio.h int main() int a, b, c, k=2; a=1;

7、 b= (c=2) * a+ ; printf(a=%d, b=%dn, a, b); a=1; b= (1-a) * +a ; printf(a=%d, b=%dn, a, b); a=1; k= ( + a )+( + a ); printf(k=%d, a=%dn,k,a ); return 0; (5) 有关表达式使用中的问题说明 ANSI C并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。 例如 : 对表达式 b = (1-a) * +a ; 并丌是所有的编译系统都先计算 (1-a), 然后 计算 +a 。 丌同的编译器可能出现丌同的结果。有时会出现一些令人容易搞

8、混的问题,因此务必小心谨慎。 丌建议在一条语句同时出现需要计算并改变其值的变量。 语言中有的运算符为一个字符,有的运算符由两个字符组成 ,为避免误解,最好采取大家都能理解的写法。 例如 : 丌要写成 i+ + +j 的形式, 而应写成 (i+ +) +j的形式 练习:写出下列程序的输出结果 #include stdio.h int main() int a=3; printf(%d, %d, a, a+); return 0; 在调用函数时,参数的求值顺序,标准并无统一规定。 例如: 的初值为,如果有下面的函数调用: printf( , , i+) VC从左至右求值,输出“,”。 TC对函数参

9、数的求值顺序是自右而左,输出“,”。 以上这种写法丌宜提倡, 最好改写成 j = i+; printf(%d, %d, j, i) 赋值时的类型转换 如果赋值运算符两侧的类型丌一致 , 但都 是数值型或字符型时 , 在赋值时要进行类型 转换 。 将浮点型数据 ( 包括单 、 双精度 ) 赋给整型变量时, 舍弃浮点数的小数部分 ( 并非 4舍 5入 ) 。 如 :为整型变量 , 执行 “ i=3.56” 的结果是使 的值为 , 以整数形式存储在整型变量中 . 将整型数据赋给单、双精度变量时,数值丌变, 但以浮点数形式存储到变量中。 如 : 将 23赋给 float变量,即执行 f=23,先将 2

10、3转换成23.0000,再以精度的浮点数格式存储到变量中。 将 23赋给 double型变量 d,即执行 d=23,则将 23转换成浮点数 , 然后以双精度浮点数形式存储到变量 d中。 将一个 double型数据赋给 float变量时,截取其前面 7位有效数字,存放到 float变量的存储单元( 4个字节)中。但应注意数值范围丌能溢出。 如 : float f; double d=123.456789e100; f=d; 就出现溢出的错误。 如果将一个 float型数据赋给 double变量时,数值丌 变,有效位数扩展到 16位,在内存中以 8个字节存储 字符型数据赋给整型变量时,由于字符只占

11、 1个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量存储单元的低位中。 第一种情况 : 如果所用系统将字符处理为无符号的字符类型,或程序已将字符变量定义为 unsigned char型,则将字符的 8位放到整型变量低位,高位补零 例: int main() int i; i= 376; printf(“%d”,i); 376 表示为 8进制数 376所对应的十进制数,所对应的 ASCII码。 其十进制数值为254,转换成二进制为 11111110 第二种情况 : 如果所用系统(如 Turbo C+)将字符处理为带符号的(即 signed char), 若 字符最高位为,则整型

12、变量高位补 ; 若 字符最高位为,则高位全补 。 这称为“符号扩展”,这样做的目的是使数值保持丌变,如变量(字符 376 )以整数形式输出为,的值也是。 将一个 int、 short、 long型数据赋给一个 char型变量时,只将其低 8位原封丌劢地送到 char型变量(即舍弃高位)。 例如: int i=289; char c=a; c=i; c的值为 33, 如果用“ %c” 输 出 c,将得到字符“ !” 。 p63 将带符号的整型数据( int型)赋给 long型变量时,要进行符号扩展,将整型数的 16位送到long型低 16位中 : 如果 int型数据为正值(符号位为),则 lon

13、g型变量的高 16位补; 如果 int型变量为负值(符号位为),则 long型变量的高 16位补,以保持数值不改变。 反之,若将一个 long型数据赋给一个 int型变量,只将 long型数据中低 16位原封不动地送到整型变量(即截断)。 短 长 :符号扩展 长 短 : 截断(截取相应长度的低位) 由于 c语言使用灵活,在不同类型数据之间赋值时,常常会 出现意想不到的结果,而编译系统并不提示出错,全靠程序员的经验来找出问题。这就要求编程人员知道这些赋值规则。 在学习这部分内容时不必死记,可以通过自学和上机实践来掌握。 短 为无符号数、正数 长 高位补零 短 为负 长 高位补 1 不同类型的整型数据间的赋值规则归结为: (3) 复合的赋值运算符 在赋值符 “ ” 之前加上其他运算符 , 可以构成复 合的运算符 。 例如 : 等价于

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号