jin3第三章数据类型、运算符与表达式.ppt

上传人:本田雅阁 文档编号:3471136 上传时间:2019-08-31 格式:PPT 页数:94 大小:5.77MB
返回 下载 相关 举报
jin3第三章数据类型、运算符与表达式.ppt_第1页
第1页 / 共94页
jin3第三章数据类型、运算符与表达式.ppt_第2页
第2页 / 共94页
jin3第三章数据类型、运算符与表达式.ppt_第3页
第3页 / 共94页
jin3第三章数据类型、运算符与表达式.ppt_第4页
第4页 / 共94页
jin3第三章数据类型、运算符与表达式.ppt_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《jin3第三章数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《jin3第三章数据类型、运算符与表达式.ppt(94页珍藏版)》请在三一文库上搜索。

1、2019/8/31,1,第 三 章 数据类型、运算符与表达式,李 书 涛 ,2019/8/31,2,目录,1 基本数据类型 2 运算符和表达式 3 常用数学函数 4 变量初始化 5 本章小节,第三章 数据类型、运算符与表达式,2019/8/31,3,1 基本数据类型,1 基本数据类型 2.1.1 C语言的数据类型,2019/8/31,4,数据的描述 数据的操作,程序,类型,运算符,数据结构 算法,程序的任务是对数据进行处理,数据是程序处理的对象,而运算符是施加给这些数据的操作,数据和运算符是表达式的基本元素。,1. 程序与数据类型,1 基本数据类型,2019/8/31,5,1. 不同类型数据采

2、取不同的存储形式; 2. 不同类型数据在内存中占有不同的 存储空间; 3. 不同类型数据对应不同的取值范围; 4.不同类型数据确定了允许对其进行不 同的操作类型。,2. 数据类型的含义,1 基本数据类型,2019/8/31,6,按照数据在程序中的取值分为两类: 值保持不变-常量 x=2 + y 值随程序运行变化-变量,3. C语言的基本数据类型,1 基本数据类型,2019/8/31,7,1. 在程序运行中,其值保持不变 2. 表示方法:,整型 100,125,-100 实型 3.14 , 0.125 字符型 a, b 字符串常量 “string”,3. 符号常量: #define PI 3.1

3、4159,宏定义:给常量定义一个标识符,称宏名,大写。,2.1.2 常量与变量 一、常量,2019/8/31,8,3. 变量通过变量名来标识。,1. 在程序运行中,值发生变化;,2. 必须先定义,再使用;,int a, b;,类型 变量名表,256,3,变量名和内存中的存储单元相对应。编写程序时通过变量名来存、取存储单元。,二、变量,变量,2019/8/31,9,(1)以字母或下划线开头,(2)不能用系统中的关键字作为变量名,int a,b,A123,_b;,int a; A=5;,(3)变量名中的字母是区分大小写的。 sum、stu_name、_age、Lts_1_2、a2 32c、x.y、

4、start+9、c2.0 非法 NAME name 表示两个不同的标识符。,4. 有关变量名的规定,2019/8/31,10,有三种表 示形式,十进制 八进制 十六进制,1234,加前导0 01234,0125,加前导0x如0x123,0xffff,整型数据包括整型常量和整型变量, 整型数据以二进制补码形式存储。,例,100、-8、0;010、024;0x38、0X1F,2.1.3 整型数据 一、整型常量,2019/8/31,11,掌握要点 1. 有几种定义形式; 2. 每种形式占存储空间的大小不同; 3. 取值范围不同; 4. 输入输出格式不同。,二、整型变量,2019/8/31,12,六种

5、形式,基本整型 短整型 长整型 无符号整型 无符号短整型 无符号长整型,int short int long int unsigned int,占存储空间,一个变量,2 2 4 2,字节,unsigned short unsigned long,2 4,1. 定义形式,2019/8/31,13,类 型 说明符 长度 数的范围 基本型 int 2字节 -3276832767 短整型 short 2字节 -215215-1 长整型 long 4字节 -231231-1 无符号整型 unsigned 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长整型

6、 unsigned long 4字节 0232-1,2. 整型变量的取值范围,类 型 说明符 长度 数的范围 基本型 int 2字节 -3276832767 无符号整型 unsigned 2字节 065535,有符号与无符号整型数的区别,int 最高位为符号位1为 负数补码 unsigned 最高位为数值位=215=32768,则:unsigned a= 216-1=65535,而int a=-1,则:unsigned a= 215=32768,而int a=-32768,2019/8/31,15,int型数存储长度为16位二进制(2Byte),0 0 0 0 0 0 0 0 0 0 0 0

7、0 0 0 1,=215-1=32767,0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1,0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,=1,=3,上面的数再加1是多少?,=-215=-32768,例,补码表示,int型表示数的范围:- 32768 32767,3. 输入输出形式 : %d,%ld,%x,%o,%u,?,int型数的表示范围,2019/8/31,16,1. 求法:正数的补码与原码相同;负数的补码对原码除符号位外,按位变反,末位加1,即得补码。或者由反码加1也可求得补码。,+0补 =

8、 - 0补 =0,数的补码表示,2. 补码的表示范围 当n=8时,补码的表示范围是:,+最大数补=0 1111111 -最大数补=1 0000000,-128+127,由此可得补码表示范围的公式是,2n1(2n11),2019/8/31,17,数的补码举例,已知:a=4,b=16,设n=8 计算 4 -16,根据 a补+b补= a+b补有: a+b补 =+4补+16补,1 1 1 1 0 1 0 0,结果为负时得到负数的补码, 需再求补得原码:10001100,16 原= 10010000,连同符号 一起运算,解答,4 补 = 00000100,16 反= 11101111,16 补= 111

9、10000,-12,2019/8/31,18,包括实型常量和实型变量,两种表 示形式,小数 指数,0.123 123e-3,实型常量只能用十进制形式表示,不能用八进制和十六进制,1e3、1.8e-3、-123e-6、-.1e-3 e5、1e-3.2、e、.e-03,2.1.4 实型数据 一、实型常量,指数格式:,数符尾数e阶符阶码,2019/8/31,19,1. 定义形式,三种形式,单精度 双精度 长双精度,float double long double,2. 占存储空间,一个变量,4 8 16,字节,实型常量不区分单精度和双精度,二、实型变量,2019/8/31,20,4. 输入输出形式

10、%f, %lf,3. 变量的取值范围,实型数据在计算机中以指数形式存储,单精度float变量占四个字节。一个字节存放指数部分, 三个字节存数值部分。,2-23 = |尾数| = 1-2-23,float型数的表示范围,最小尾数= 2-23,二进制 7位,二进制 23位,单精度实型,数符 尾数,阶码,阶符,最大尾数= 1-2-23,2019/8/31,22,2.1.5 字符型数据 一、字符型常量,字符型常量 字符型变量,1. 用单引号包含的一个字符是字符型常量,2 .只能包含一个字符,例,a,A, 1 abc “a”,2019/8/31,23,有些以“”开头的特殊字符称为转义字符,n 换行 t

11、横向跳格 r 回车 反斜杠 ddd ddd表示1到3个八进制数字 xhhh hhh表示1到3个十六进制数字,请牢记!,printf(“%d t %d t”,a,b); printf(“%d n%d n”,a,b);,若:a为1,b为0, 则,3. 转义字符,输出: 1 0 1 0,转义字符表示法,2019/8/31,25,ddd 表示1到3个八进制数字对应ASCII字符 xhhh 表示1到3个十六进制数字对应ASCII字符 101 141 60 x41 x61 x30,printf(“%c,%c,%cn”,a,b,c); printf(“%c,%c,%cn”,x,y,z);,若:a =101

12、,b =141,c= 60; 若:x =x41 ,y =x61,z= x30;,转义字符举例 课堂作业,输出: A,a,0 输出: A,a,0,表示A 表示a 表示0,表示A 表示a 表示0,2019/8/31,26,1. 定义形式:,2. 占存储空间,一个字节,1 字节,char 变量表,一个字符变量只 能包含一个字符,3. 输入输出形式 %c,a ASCII值为 97 内存中存储形式,0 1 1 0 0 0 0 1,4. 字符型数据在内存中以相应的ASCII值存储,二、字符型变量,2019/8/31,27,在ASCII范围以内,整型数据 与字符型数据可以通用,!,main( ) char

13、c ; c = c; printf ( “%c”, c ); ,c,?,例,题目中有几个c,哪些是等价的?,运行结果:,字符型数据的特点,2019/8/31,28,1. 双引号内的一串字符 “china”,2. n个字符组成的字符串常量,在内存中占空间为 n+1 个字节。,c,h,i,n,a,0,字符串结 束标记,3. C 中没有专用的 字符串变量。,“This is C string” 串长 16 “a” 串长 1 “ ” (空格)串长 1 “” (不含空格)串长 0,三、字符串常量,2019/8/31,29,&,变量是存放在内存上的,内存的每一个字节成为一个单元,每个单元有一个编号,这个编

14、号就是地址。,定义变量: int k;编译系统根据类型为k分配内存,输入变量的值:scanf(“%d”, &k 就代表了变量 k 在内存中的地址。,通过变量名对变量的访问,这种操作称为直接访问: int k; scanf(“%d”,关于地址的概念,2.1.6 指针型数据,2019/8/31,30,C 提供了另一种方式,将变量 k的地址存放在另一个变量处(假定为pk),通过访问 pk,就可以间接地访问变量k,这种方式称为间接访问。,变量 int k; 变量 pk 中存放 k 在内存中的地址,变量pk 就是一个指针变量,指向变量k,存放k的地址 。因此:指针就是地址。,间接访问,*,间接访问的概念

15、,2019/8/31,31,int a=10,c=5; float b=3.5; char str; int *pa; float *pb;,pa=,间接访问举例,2019/8/31,32,让变量使用之前有值,初始化,方法,int a=5; int a,b,c=5; int a=b=c=5;,初始化不是在编译时进行,而是在程序运行时完成的。,2.1.7 变量的初始化,定义变量的同时为其赋值称初始化,2019/8/31,33,C语言的基本数据类型小结,类 型 说明符 长度 数的范围 字符型 char(ASCII码) 1字节 0127 整 型 int(-215215-1) 2字节 -3276832

16、767 长整型 long 4字节 -231231-1 单精度 float 4字节 10- 381038 双精度 double 8字节 10- 30810308 长双精度 long double 16字节 10- 4931104932,2019/8/31,34,一、运算符,运算符,运算分量,x = 5 + b * c,对数据进行 运算的符号,被加工 的数据,+,表达式,算术运算符 赋值运算符 关系运算符 逻辑运算符 逗号运算符 条件运算符 ,C 中运算符,共34种,2 运算符和表达式,2 运算符和表达式 2.2.1 运算符和表达式概述,2019/8/31,35,2. 表达式的运算结果称为 表达式

17、的值,1. 运算符和运算分量构成 表达式,算术表达式 关系表达式 逻辑表达式 赋值表达式 逗号表达式 条件表达式 ,二. 表达式,2019/8/31,36,* 运算符的种类与功能,* 运算符与运算分量的关系,个数,类型,A + B,(ab) ? a: b,目,关系,不同类型的变量, 允许的操作不同,单目运算符 双目运算符 三目运算符,三.学习运算符应掌握的要点,单目运算符 双目运算符 三目运算符,2019/8/31,37,*优先级: 运算符的执行顺序,*结合性:优先级相同时的结合方向,*运算结果的类型,X=5+8 a100,X=a+b*c,a+b-c 572 a=b=5,结果?,单目运算符的优

18、先级高于双目运算符 单目运算符从右向左结合 双目运算符从左向右结合,运算符的优先级与结合性,2019/8/31,38,1. 共有5个:+,-,*,/,%,2. “-”作为 负号时为单目,单目: -,双目:*, /, %,双目:+,-,5. 优先级:,6. 结合性: 从左向右,3. %运算只适用于整型数,算术运算的结 果为什么类型,取模(求余数) a=10%4 a的值为2,?,2.2.2 算术运算符和算术表达式,4. /运算用于整型和实型时不同,2019/8/31,39,1. 模(求余数) % 运算,令:a=10; b=4; 求a % b与b % a;,结果: a / b= 2,令:a=10;

19、b=4; x=10.0; y=4.0; 求a / b与x / y;,结果: x / y=2.5,结果: a % b=2, b % a=4,算术运算符举例,2. / 运算用于整型时称整除;用于实型时称实除。,2019/8/31,40,2.2.3 关系运算符与关系表达式,关系运算和逻辑运算经常作为条件语句和循环语句中的条件,其结果为一逻辑值。,A和 B中至少有一个大于 C,如何用C语言描述,A和 B全部大于 C,A为不大于100 的 偶 数,关系运算是一种比较运算,将两个值(表达式)进行比较,判断比较的结果是否符合给定的条件: 符合结果为1;否则结果为0。,关系运算 逻辑运算,2019/8/31,

20、41,大于 , 大于等于 =,小于 , 不等 != 小于等于=,恒等=,,1. 六个关系运算符,=, != 的优先级低于其余四个,2. 优先级,关系运算的优先级高于赋值,低于算术运算,区别 赋值,3. 结合性 从左向右,abc,一、关系运算符,关系表达式的结果是一个逻辑值,根据关系是否满足,分别 取值,1. 关系运算符与运算分量构成关系表达式,int i=1,j=7,a; a=i+(j%4!=0) a的值?,结果:a=2,3. 使用关系表达式 注意事项,!,(1) 数学上,判断x是否在区间 a,b 时,习惯上写成a=x=b,但在C 中,必须写成 a=x & x=b,&,(2) 字符是按ASCI

21、I 存储的,因此a0的值为逻辑 1,二、关系表达式,满足,取1 否则,取0,例如:,1.0/3.0 * 3.0 = 1.0的逻辑值为0,( 3 ) 当判断两个浮点数是否相等时,由于存储上的误差,可能会有错误的结果,例如:数学上恒等式: 1.0 / 3.0 * 3.0 = 1.0,但在C语言中:,( 4 ) 在数学中,5278 无效,但C中是允许的,( 5 )关系表达式的结果可以当成整型数,例如:,int a=3,b=5,c=7,d; 求:d = a c,逻辑1,17,逻辑0,d的值 为0,使用关系表达式注意事项,2019/8/31,44,1. 有三个,&(与):两边为1,结果为1 (或):两边

22、有一个为1,结果为1 ! (非):非1为0,非0为1 !1=0,!0=1,2. 优先级:!的优先级高于&和 (),逻辑运算与其他运算相比: 非 ! 的优先级最高,与&和或 的优先级低于其他。,3. 结合性:与和或是从左向右,非是从右向左,2.2.4 逻辑运算符与逻辑表达式 一 、逻辑运算符,2019/8/31,45,逻辑运算符的真值表,逻辑值用1和0表示,2019/8/31,46,2、逻辑运算,“0”“假” “1”“真”,逻辑变量有两种状态:,研究事物的逻辑关系时,用逻辑变量代表各个事件。,逻辑运算符连接逻辑变量,构成逻辑表达式,结果为逻辑值。,开为 1 关为 0,1、逻辑变量,2019/8/

23、31,47,两个条件中只要有一 个成立,结果就成立,锁打开:1 锁关闭:0 有钥匙:1 无钥匙:0,逻辑或真值表:,A B C 0 0 0 0 1 1 1 0 1 1 1 1, 逻辑或 | (加,+,V ),2019/8/31,48,开关合:1 开关开:0 灯 亮:1 灯 灭:0,两个条件都个成立 结果才成立,两个开关A、B 控制一盏灯C,A,B,C,逻辑与真值表:,A B C 0 0 0 0 1 0 1 0 0 1 1 1, 逻辑与& (乘,),2019/8/31,49,2. 表达式的值为逻辑的1和0,表示真与假,任何非零实数均可作为逻辑上的1,例:a=5,b=7,c=4,d=3 x=(a+

24、b)(c+d)&(da),先做算术运算,再做关系判断,将最后结果赋给x,1. 用逻辑运算符将关系运算表达式或逻辑量连接起来构成逻辑表达式,5 2 7 8,从左向右运算 (52)逻辑值为1 (17)逻辑值为0 (08)逻辑值为0,整个表达式的值为 0,二、逻辑表达式,结果:x=(12)(7)&(0)=1 & 0 = 0,3. 在逻辑表达式中,并不是所有的逻辑运算都必须执行,如果&的一边已经为0,结果一定为 0,如果 的一边已经为 1 ,结果一定为 1。,(1) a a,b均为非0, 再判断c;若a为0时,不必判断 b和 c,结果一定为 0不必判断 b和 c,结果一定为 1 (2 ) a b c,

25、若a为非0,不必判断 b和 c,结果一定为 1,已知 :a=1,b=2,c=3,d=4,m=1,n=1 执行 (m=ab)&(n=cd) 之后 : m=? n=?,由于 ab的值为 0,m=0 不再判断( n=cd )的值,因此,n 维持原有的值,m=0 n=1,逻辑运算的特点,求逻辑表达式的值 1 ) 17 3 ) !(2 3) !(25) 5 ) !(4=6) & (3=7),如何表示闰年,逻辑运算举例一,逻辑表达式 结果 1 ) 17 1 & 0 = 0 3 ) !(2 3) !(25) ! 0 = 1 5 ) !(4=6)&(3=7) ! 1 = 0,课堂作业,2019/8/31,52

26、,要判别用year表示的某一年是否闰年,闰年的条件是符合下面二者之一: 1 ) 能被4整除,但不能被100整除,如2008; 2 ) 能被400整除,如2000。 上面两个者条件可以用一个表达式来表示:,闰年的表示,( year%4=0 & year%100!=0 ) | year%400=0,2019/8/31,53,用C语言描述: 1 ) a小于b或小于c 2 ) a和b都大于c 3 ) a和b中有一个大于c 4 ) a是非正奇数 5 ) a是偶数 6 ) a不能被b整除 7 ) a是正奇数,且b是负偶数,逻辑运算举例二,用C语言描述: 1 ) ac & bc 3 ) ac | b c 4

27、 ) !(a0 & a%2 != 0) 5 ) a%2 = 0 6 ) a%b != 0 7 ) (a0 & a%2 != 0) & (b0 & b%2 = 0),课堂作业,2019/8/31,54,k =k+1,k + + 先使用变量k的值,再加 1,+ + k 先加1,再使用变量 k的值,k = k-1,k - - 先使用变量k的值,再减 1,- - k 先减1,再使用变量k 的值,k=3; printf( “%d”, k + +); 输出 3 后, k 的值为 4,i =3; printf( “%d”, + + i );,输出4,2.2.5 自增、自减运算符 1. 变量自身加(减)1:+

28、与- -,2019/8/31,55,2. 只能用于变量,不能用于表达式和常量,(i+k) + , - - 3,3. 优先级:高于双目算术运算符,4. 结合性:从右向左,main() int a , b , s ; a = 5 ; b = 5 ; s= a+b ; printf(“%d,%d,%dn”,a,b,s); s= a+ +b; printf(“%d,%d,%dn”,a,b,s); s= +a+b; printf(“%d,%d,%dn”,a,b,s); s= - -a +b; printf(“%d,%d,%dn”,a,b,s); s= a- - +b; printf(“%d,%d,%dn

29、”,a,b,s); s= a + b; printf(“%d,%d,%dn”,a,b,s); ,应用举例,课堂作业,2019/8/31,57,s = a + b ; s = a+ +b ; s = +a +b ; s = - -a +b ; s = a- - +b ; s = a + b ;,a=5,b=5,5+5=10 5+5=10 7+5=12 6+5=11 6+5=11 5+5=10,a b s 5 5 10 6 5 10 7 5 12 6 5 11 5 5 11 5 5 10,题目分析,s,例题分析一,2019/8/31,58,例1:y = 5 ; x = y+ * +y ;,结果:

30、X = 6 * 6 = 36; y = 7,题目分析,例题分析二,例2:i = 5 ; a = i+ * i+ ; b = +i * +i ;,结果: a = 5 * 5 = 25; i = 7 b = 9 * 9 = 81; i = 9,i=3; k=i+ + i+ + i+;,i=3; k= +i + (+i) + (+i);,i=? k=?,i=6,k=9,i=6,k=18,2.2.6 位运算 共有六种运算符 一、位运算符 优先级 结合性,运算规律,真值表, 按位右移(双目) 11 ( ) 按位左移(双目) 11 ( ) & 按位与 (双目) 8 ( ) 按位异或(双目) 7 ( ) 按

31、位或 (双目) 6 ( ) 按位反 (单目) 14 ( ),实例:已知:int x=7,y=10,z=1;设字长为8位,求:,2 (0000 0111 & 0000 1010 = 0010) 1 (0000 0111 & 0000 0001 = 0001) 15 (0000 0111 0000 1010 = 1111) 11 (0000 1010 0000 0001 = 1011) 13 (0000 0111 0000 1010 = 1101) 8 ( 0000 0111 ) = 1111 1000 7 28 (0000 0111 2 = 0000 0010) 1 (0000 0111 2 =

32、 0000 0001),x & y = x & z = x y = y z = x y = x = x = x2 = x2 =,说明,关于:右移一位 = 缩小 1/2 关于:左移一位 = 扩大 2 倍 关于: 因为: x = 按位求反 = 求反运算 求负 = 求补 = 求反 + 1 所以: 求反 = 求负 1 x = -x 1 例:7 =-7-1= - 8 ; 而:(- 8) =- (- 8)-1=7 注意: 1.位运算是对二进制的位进行运算 2.只能对int型、char型和long型进行位运算,2019/8/31,62,1. 将一个常量或一个表达式的值赋给一个变量称为赋值,x = 5 y =

33、 x + 10,2. 可以将一个实型赋给一个整型,或将一个整型赋给一个实型,int x; x=5.3; x的值为 5 float y; y=5; y的值为 5.000000,3. 赋值运算的优先级,比算术运算低,4. 赋值运算的结合性,从右向左,x = y = 5,2.2.7 赋值运算与条件运算 一. 赋值运算符与赋值表达式,x+=n x=x+n,赋值运算符两侧出现相同的变量,x=x+n x=x-n x=x*n x=x/n x=x%n,x + = n x - = n x * = n x / = n x % = n,算术运算与赋值运算相结合,X与n均为整数,n 为常数,二. 组合赋值运算符和组合

34、赋值表达式,格式:变量 双目操作符 = 表达式;,双目操作符:+、-、*、/、%、&、,功能等价于:变量 =变量 双目操作符 表达式;,2019/8/31,64,例,main() int a,b,c,d,e; a=2, b=5,c= 6,d=10; a + =b; b- =c; c * =d; d / =a; a%=d; printf(“%d,%d,%d,%d,%dn”, a , b , c , d , a ); ,结果?,0,-1,60,1,0,a的值是否相同?,应用举例,main( ) int a=3, b=2, c=4, d=8, x; a+=b*c; b-=c/b; printf(“%

35、d,%d,%d,%dn”,a,b,c*=2*(a-c),d%=a); printf(“x=%dn”,x=a+b+c+d); ,a=a+b*c=3+2*4=11,b= b-c/b =2 - 2 = 0,c=c*2*(a-c)=4*2*(11- 4)=56,d=d%a=8%11=8,输出:,11,0,56,8 x=75,应用举例,一 、条件运算符,是C语言中唯一的一个三目运算符,表达式1 ? 表达式2 : 表达式3,功能:将条件语句化成赋值语句,格式:,判断表达式1的值,若为非0,将表达式2的值赋给x,否则,将表达式3的值赋给x.,2. 功能:,x=(ab)?a:b; 当 a=9,b=5时,x=9

36、,条件运算要求有三个运算分量,并且不论条件是否成立,都必须是为同一个变量赋值。,2.2.8 条件运算符与条件表达式,二 、条件表达式,1. 格式: X=(表达式1)?(表达式2):(表达式3);,3. 条件运算符的优先级:高于赋值,低于其他,4. 结合性:从右向左,z=(ab)?a:(ad)?c:d;,5. 数据类型可以不同:,xy?a:b,执行:int x=10,y=9; int a,b,c; a=(- -x=y+)?-x:+y; b=x+; c=y; 后a,b,c?,a, b, c A) 9, 9, 9 B) 8, 8, 10 C) 8,10, 9 D) 1,11,10,X为9 y为10,

37、X为8,条件运算的特点,2019/8/31,68,若w,x,y,z,m均为int型变量,则执行下面语句后的m值为: w=1;x=2;y=3;z=4; m=(wx)? w: x; m=(my)? m : y; m=(mz)? m:z; A) 1 B) 2 C) 3 D) 4,若w=1,x=2,y=3,z=4,则表达式 wx?w:yz?y:z的值是: A) 4 B)3 C)2 D)1,练习,条件运算举例,2019/8/31,69,执行以下语句后,输出结果是: int w=3,z=7,x=10; printf(“%d,”,x10?x+100:x-10); printf(“%d,”,w+|z+) ;

38、printf(“%d,”,!wz); printf(“%d,”,w A) 0 ,1,1,1 B) 1,1,1,1 C) 0, 1,0,1 D) 0,1,0,0,算术运算 关系运算 逻辑运算 条件运算,综合举例,2019/8/31,70,一、逗号运算符,(表达式 1,表达式 2 , ,表达式 n),用于连接几个表达式,二、求解过程,顺序求解几个表达式,三、优先级,逗号运算符的优先级最低,四、结合性,从左向右,五、逗号表达式,逗号表达式的值为最后一个表达式的值(表达式n 的值),X = ( ( a=4*5 , a*2 ) , a+6 ),a为?,20,x为?,26,2.2.9 逗号运算符,结构体类

39、型中引用结构体成员分量,结构体变量名 . 结构成员名 结构体指针名 - 结构成员名,struct char name20; int age; char sex; stud1,stud2;,stud1.age=22;,二. “( )”和“ ”运算符,( )运算符:改变表达式的执行次序,类型转换运算, 函数的参数表等。 运算符:下标运算符,数组定义和数组元素的引用。,在C语言所有的运算符中,“.”,“-”,( ), 的优先级最高,2.2.10 其它运算 一. “.”和“-”运算符,2019/8/31,72,“*”是指针运算符,间接访问指针所指对象的内容 “&”是地址运算符,取变量在内存中的地址,i

40、nt a=10,c=5; float b=3.5; char str; int *pa; float *pb;,pa=,printf(“%d,%d,%f,%fn”,a,*pa , b, *pb);,四. type 运算符,type为某种类型标识符,(类型标识符)表达式,将表达式的结果强制转换为括号中指定的类型,单目运算符,三. “*”和“&”运算符,2019/8/31,73,格式: sizeof (表达式或数据类型) 功能: 求运算对象在内存中所占的字节数,求:printf(“%d,%dn”, sizeof ( int ), sizeof ( char ) );,五. sizeof 运算符,结

41、果:2,1,求:printf(“%d“, sizeof(“ASTn01212“);,结果:10,2019/8/31,74,运算符小结,算术运算符: +,-,*,/,% 赋值运算符: = 关系运算符: ,=, , ,sizeof( ),(type),,不同数据类型需先转换成同一类型,然后进行运算,方式,自动进行-隐式转换 强制进行-显式转换,一、隐式转换(算术转换),优先级低的向优先级高的转换,int i; float f; double d; long e; 表达式:10+a+i*f-d/e 的结果为: double,2.2.11 混合运算及数据类型转换,2019/8/31,76,格式: (类

42、型)表达式,(int) (10+a+i*f-d/e),将该结果强制转换为整型,例:int i;float f; 求:(int)f%i,取模运算要求运算分量是整数,所以先将 f 转换为整型,再做%运算,三、赋值转换,赋值符号右边的类型向左边的转换,int x; float y = 5.3; x=y;,int x=5; float y; y=x;,二、显式转换(强制转换),结果: x=5,结果: y=5.000000,2019/8/31,77,1. 优先级:分为1 15级,不同级别混合运算时,按优先级先高后低。,2. 结合性,相同级别进行运算时,按结合性处理。,单目、条件、赋值运算符的结合性是自右

43、向左。,其它运算符的结合性是自左向右。,四、优先级与结合性,2019/8/31,78,1. (8 3) 结果,1111 0111 3 11111110取 00000001,a=8; b=5; c=2; 求 b a ? a*c : a%c 结果 5 -9 16 0,3. a=8; b=5; c=2; 求 a / b * b 结果,优先级相同 ,按结合性 自左向右。,综合举例,1,16,5,课堂作业,2019/8/31,79,一 、C中的基本数据类型,要掌握每一种类型的定义方式(关键字),在存储空间中所占的字节数,存储形式,取值范围。,二 、 C中的运算符的几个要点(功能、与运算分量的关系、优先级

44、 、结合性、运算结果的类型)。,三 、算术运算符中的%只使用在int类型。,四、 自增,自减运算的特点,灵活使用k+,+k。,数据类型与运算符总结,数据类型与运算符总结,2019/8/31,80,数据类型与运算符总结,数据类型与运算符总结,五 、复合的赋值运算规则。,六 、 逗号运算表达式的值是最后一个表达式的值。,七、 不同类型数据转换时的优先顺序。,八 、算术运算、关系运算、赋值运算、逗号运算的优先级。,九、 常用转义字符的特点 ddd 、xhhh等只占一个字节。,2019/8/31,81,数据类型与运算符总结,数据类型与运算符总结,十、 常用的常量表示方法 十进制 100 ; 整数 八进

45、制 0123 ; 十六进制 0xf3d ; 实数的小数,指数形式 ; 字符常量 a; 字符串常量“ a ”。,十一、单目运算,双目运算的优先级和结合性特点,熟记基本概念和规则!,运算符的优先级和结合方向 1,运算符的优先级和结合方向 2,值得注意的几个问题 1. 取模(求余数),求: 10 % 3 = 10 %-3 = -10 % 3 = -10 %-3 =,计算结果如右:,1 1 -1 -1,结论:结果符号与被除数一致,2. 自反赋值 变量 双目操作= 表达式,功能,变量 =变量 双目操作 表达式,int a=10,b=5; 求:a*=b+1; printf(“a=%dn”,a);,a=60

46、,计算结果如下:,结论:表达式作为整体参加运算,课堂作业,2019/8/31,85,自反赋值,int x=5; 求:x+=x-=x*x;,结果:x = - 40,int x=3; 求:x+=x-=x*x;,结果:x = - 12,课堂作业,运算符的优先级,2019/8/31,87,3 常用数学函数,3 常用数学函数,1. 使用数学函数必须include命令引入math.h文件,它通常放在程序的开始,即如下面的格式: #include 2. 常用数学函数 abs( ) 求绝对值,用法:int abs(int x); labs( ) 求绝对值,用法:long labs(long x); fabs( ) 求绝对值,用法:double fabs(double x); sin( ) 计算sin(x)值,用法:double sin(double

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1