欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

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

    • 资源ID:2581079       资源大小:278.51KB        全文页数:63页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第三章 数据类型、运算符与表达式,3、1 C语言的数据类型 3、6 变量赋初值 3、2 常量和变量 3、7 混合运算 3、3 整型数据 3、8 算术运算 3、4 实型数据 3、9 赋值运算 3、5 字符型数据 3、10 逗号运算 3、11 位运算,3、1 C的数据类型 所谓数据结构指的是数据的组织形式。,基本类型 构造类型 指针类型 空类型,整型 实型 字符型 枚举型,数组类型 结构体类型 共用体类型,单精度型 双精度型,C语言中的数据有常量和变量之分,它们分属于以上类型。,数据类型,在程序中对用到的所有数据变量都必须指定其数据类型。,3、2 常量和变量 1、常量 在程序运行过程中其值不能改变的量称为常量。一般从其字面形式即可判别。 整型常量:12,0,345 实型常量:44.6, -1.23, 1.2E-3, 6e+2 字符常量:a、D、d 字符串常量: “This is a program.” 2、符号常量 符号常量:用一个标识符代表一个常量。,#define PRICE 30 main() int num=10,total; total=num*PRICE; /*相当于total=num*30;*/ 运行结果: total=300,符号常量使用注意事项,(1) 一般符号常量用大写字母取名 (2) 符号常量的值在其作用域内不能改变 即程序里不能出现 PRICE=40;语句,3、变量,1)标识符: 用来作为变量名、符号常量名、函数名、数组名、 文件名等的有效字符序列称为标识符 规定:(1)标识符只能由字母,数字和下划 线组成,且以字母或下划线开头 建议不超过 8 个字符。 (2)大小写分别表示不同的标识符。,2)关键字(保留字): 一些在编译过程中起特殊作用的标识符。 如:char, int, short, float, double if, else, while,等共计32个,3)变 量,程序运行过程中其值可以改变的量称为变量。变 量应该有名字,并在内存中占有一定的存储单元。,变量名是一个标识符。,合法的变量名: sum, _above, class1, basic,不合法的变量名: M.D.John, 3D64, ab, #33, $234,注意:(1)变量名一般用小写字母表示 (2)起变量名应遵循“见名知义”原则 (3)变量名不能与关键字同名。,4) 变量的定义及其目的,例:int a,b,c; char c1,c2;,其目的为: (1)凡未被定义的,不作变量名使用; (2)指定变量类型后,系统编译时可分配相应 的存储单元; (3)定义变量类型便于编译时检查此变量所 进行的运算是否合法。,C中变量应先定义后使用。,计算机内部的数据和C语言的数据都是以二进制补码表示的。补码的最高位为符号位,若为0,该数为正数;若为1,该数为负数。符号位与数值位一起参与运算。,正数的补码即其本身。负数的补码可这样求出: (1)先求该数的绝对值,再求出对应正数的二进制编码; (2)对二进制编码按位取反; (3)对最低位加1。,补充:数的补码表示,求-2的补码(以两个字节表示),(1)求-2的绝对值,|-2|=2, 二进制编码为:0000 0000 0000 0010,(2)按位取反得:1111 1111 1111 1101,(3)最低位加1: 1111 1111 1111 1101,1,1111 1111 1111 1110,3、3 整型数据,1、整型常量,C整常数有三种表示形式: 十进制:123,456,0 八进制:以0开头, 如: 0123 等于十进制数83 011 等于十进制数9 十六进制:以0x或0X打头 如:0x123 等于十进制数291 0x12 等于十进制数18 注:负数在计算机中表示形式?,2、 整型变量,整型变量,基本整型 int,短整型 shortint,长整型 long(int),无符号型,无符号整型unsigned int,无符号长整型unsigned long,无符号短整型unsigned short,3、 整型变量的定义及使用,程序中用到的变量都必须先定义,例如:,运行结果: a+u=22 , b+u= - 14,4、 整型数据的溢出,一个int型变量的最大允许值是32767,如果再加 1,其结果会是怎样一种情况?,0111111111111111 数值:32767,+,0000000000000001 数值: 1,1000000000000000 数值:-32768,=,它就好像汽车的里程表一样,达到最大值后,又 从最小的开始计数.,5、 整型常量的类型,1. 值在3276832767的整常数,认为它是int型, 可赋给 int 型和 long int 型变量; 2. 值超过上述范围,而在2 21的整常数, 认为它是 long int 型,可赋给 long int 型变量; 3. 只有非负的整常数可赋给 unsigned型变量, 但 值不能超出该 unsigned 型变量的取值范围; 4. 整常量后加一个l 或L,则认为其为 long int 型 常量, 如:123L,0L,432L 此常用于函数调用中,使形参类型匹配于实参类型。,31,31,3、4实型数据,1、实型常量,1)十进制数形式:由数字和小数点组成 如: 0.0 , 0.123, -34.6, .678 , 90. 注意:小数点必须有,且其前后数字不能同时缺省。 2)指数形式(科学计数法):由尾数,指数和 字母e或E组成 如:123E3 代表 123×10 注意:E前必须有数字,E后必须为整数 E5 3.4E5.6 不合法,3,3)规范化的指数(输出)形式:即在字母e或E之前的小数部分中,小数点左边应有一位且只能有一位非零的数字。 如:2.3478e2、3.099E5 等等. 4)实型数据在内存的存放形式:实型数据是按指数形式存储的,系统把一个实型数据分成小数部分(.xxxxx)和指数部分(采用规范化的指数形式),分别存放. 如:3.14159,小数部分占的位数越多,精度越高;指数部分占的位数越多,可表示数值范围越大.,2、实型变量,单精度型(float) 32位 7位有效数字 10 10 双精度型(double) 64位 1516 位有效数字 10 10,38,38,308,308,定义实型变量: float x , y ; double z , a, b ;,3、实型变量的赋值 实型常量不分 float型和double型,系统按double型处理,若按float型处理,可在数值后面加f或F. 一个实型常量可赋给一个实型变量( float型或double型),根据变量类型截取实常量中相应的有效位数。 例: float x ; double y ; 则: x=222222.222 y=222222.222,注意实型数据的舍入误差;应当避免将一个很大的数和一个很小的数直接相加减;同理1.0/3*3!=1,3.5 字符型数据,1、字符常量 1) 一般形式字符常量: 用单引号括起来的单个字符。如: A,?,= 2) 转义字符序列: 以开头的字符序列,可表示任何 可输出的字母字符,专用字符,图形字符 和控制字符如n为换行控制符,n 换行将当前位置移到下一行开头 t 水平制表(跳到下一个tab位置) b 退格,将当前位置移到前一列 r 回车,将当前位置移到本行开头 f 换页,将当前位置移到本页开头 反斜杠字符 单引号(撇号)字符 ” 双引号字符 ddd 1到3位8进制数所代表的字符 xhh 1到2位16进制数所代表的字符,2、 字符变量 用来存放一个字符常量。,定义形式: char c1,c2 ;,赋值:c1 = O ; c2 = K;,则:,printf(%c %c n ,c1 , c2);,输出:O K,一个字符变量在内存中占一个字节。,3、 字符数据在内存中的存储形式及其使用方法,1)字符数据在内存中存放的是其ASCII值。 例: char c1, c2; c1 = a ; c2 = b ; 则:,97,98,c1,c2,2) C中,整型数据和字符型数据之间可通用 (1)程序中,字符数据既可按字符形式输出, 也可以整数形式输出。 由输出格式字符串 %c 和 %d 决定。 (2)字符数据可进行算术运算,字符变量 既可赋值以字符常量,也可赋以相应的 ASCII值。 C的整型数据与字符数据间可相互赋值。,运行结果: a b A B,4、 字符串常量,一对双引号括起来的字符序列。例: a, How do you do., China , abcn, $123.45,C规定:,在内存中,系统自动在每个字符串的 结尾加上一个字符串结束标志0,以便 系统据此判断字符串结束标志。,所以,“a” 在内存中占两个字节。,a,0,char c ; c = a ; c = a ;,C 中无专门的字符串变量,如需要,可用 字符数组来存放。,注意:字符常量和字符串常量不可混淆。,3.6 变量赋初值,例1: int a=3; float f=3.56; char c=a;,例2: int a,b,c=3;,错例: int a=b=c=3;,此些变量的初始化不是在编译阶段完成,而是在程序执行本函数时赋予初值的,相当于有一个赋值语句。,3.7 数值型数据间的混合运算,C中,整型,字符型,实型(包括单精度, 双精度)数据可出现在一个表达式中进行 混合运算。,类型自动转换规则,高,低,double float,long,unsigned,int char, short,例:int i ; float f ; double d ; long e ;,则:10 a+ i * f - d / e 合法,转换次序: (1)计算 10a, 结果为整数107 (2)计算 i*f , 结果为double型 (3)整数107与i*f的积相加,结果为double型 (4)计算 d/e , 结果为double型 (5)将10a+i * f 的结果与 d/e 的商 相减,结果为double型。,3、8 算术运算符和算术表达式,1、运算符的种类、优先级和结合性 语言中运算符和表达式数量之多, 在高级 语言中是少见的。正是丰富的运算符和表达式使 语言功能十分完善。 这也是语言的主要特点 之一。 语言的运算符不仅具有不同的优先级, 而 且还有一个特点,就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符 优先级别的规定,还要受运算符结合性的制约, 以 便确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其它高级语言的运算符所没有的,因此 也增加了语言的复杂性。,2. 算术运算符和算术表达式,1) 基本算术运算符 * / %(模除,或称求余) 例:7 % 3 值为 1 5/3 = 1, -5/3 = -1,若参加运算的两个数中有一个为实数,则 结果为double型。,求余运算(%)要求参与运算的量均为整型。 其结果等于两数相除后的余数。,main( ) printf(“nn%d,%dn“,20/7,-20/7); printf(“%f,%fn“,20.0/7,-20.0/7); 参与运算量均为整型时, 结果也为整型,舍去小数。 如果运算量中有一个是实型,则结果为双精度实型。 本例中,20/7,-20/7的结果均为整型,小数全部舍 去。而 20.0/7和-20.0/7由于有实数参与运算,因此 结果也为实型。,2) 算术表达式,表达式是由常量、变量、函数和运算符组合起来 的式子。 一个表达式有一个值及其类型, 它们等于 计算表达式所得结果的值和类型。表达式求值按运算 符的优先级和结合性规定的顺序进行。 单个的常量、 变量、函数可以看作是表达式的特例。 算术表达式是由算术运算符和括号连接起来的式 子, 以下是算术表达式的例子: a+b (a*2)c (x+r)*8-(a+b)7 +i sin(x)+sin(y) (+i)-(j+)+(k-),注意:C语言算术表达式的书写形式类似于数学中 的代数表达式,但有区别: (1) a * b 不能写为 a×b、ab 、a.b (2) c / d 不能写为 c÷d 、,c,d,(3) e-(f+(g-h)/(i-j)+k 不能写为 e-f+(g-h)/(i-j)+k (4) 3.14*r*r 不能写为*r*2 或 3.14*r2 (5) sin( x ) 不能写为 sinx (6) log( x ) 不能写为 lnx log10( x ) 不能写为 logx,10,3、 算术运算符的优先级和结合性,1) 优先级:指表达式运算时应按运算符的优先级别高低次序进行,例: ( ) 高 * / % + - 低 如:a-b*c 相当于 a-(b*c ),2) 结合性:先按运算符的优先级别高低依次进行 .若在一个运算对象两侧的运算符的优先级相同, 则按规定的“结合方向”处理。 算术运算符的结合方向自左向右:运算对象先 与左面的运算符结合.称为 左结合性。 例: a-b+c 相当于 (a-b)+c,4、 强制类型转换运算,作用 :将一个表达式转换成所需类型 形式 :(类型名)(表达式) 例:(double)a (int) (x+y) (float) (5%3) 说明:强制类型转换时,得到一个所需类型的 中间变量,而原来变量的类型未发生变化。 举例:float x=2.5; int i; i=(int)x;,5、自增,自减运算符 自增运算符记为“+”,其功能是使变量的值自增1。 自减运算符记为“-”,其功能是使变量值自减1。 可有以下几种形式: +i i自增1后i再参与表达式整体的其它运算。 -i i自减1后i再参与表达式整体的其它运算。 i+ i参与表达式整体的运算后,i的值再自增1。 i- i参与表达式整体的运算后,i的值再自减1。 在理解和使用上容易出错的是i+和i-。 特别是当 它们出在较复杂的表达式或语句中时,常常难于弄清,因 此应仔细分析。,注意: 1)自增、自减运算符只能用于变量,而不能用于 常量或表达式。如 5+ (a+b)+ 都是不合法的。 2)+和-的结合方向是“自右向左”。如 -i+ 应理解为-(i+) 而不是 (-i)+ 3)自增、自减运算符常用于循环语句中,使循环变量自动加1,也用于指针变量,使指针指向下一个地址.,main( ) int i=8; printf(“%dn“,+i); 9 printf(“%dn“,-i); 8 printf(“%dn“,i+); 8 printf(“%dn“,i-); 9 printf(“%dn“,-i+); -8 printf(“%dn“,-i-); -9 i的初值为8,第2行i加1后输出为9;第3行减1后输出 为8;第4行输出i为8之后再加1(为9);第5行输出i为9 之后再减1(为8) ;第6行输出-8之后再加1(为9),第7 行输出-9之后再减1(为8)。,main() int i=5,j=5,p,q; p=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); printf(“%d,%d,%d,%d“,p,q,i,j); ip,i+1i,i+1-i,i+1-i j+1-j,j+1-j,j+1-j,j+j+j-q 这个程序中,对P=(i+)+(i+)+(i+)应理解为三 个i相加,故P值为15。然后i再自增1三次相当于加3故i 的最后值为8。 而对于q 的值则不然,q=(+j)+(+j)+(+j)应理 解为q先自增1,再参与运算,由于q自增1三次后值为8, 三个8相加的和为24,j的最后值仍为8。,3、9 赋值运算符和赋值表达式 1、简单赋值运算符和表达式 简单赋值运算符记为“=”。由“= ”连接 的式子称为赋值表达式。其一般形式为: 变量=表达式 例如: x=a+b w=sin(a)+sin(b) y=i+ + -j 赋值表达式的功能是计算表达式的值再赋予左边 的变量。赋值运算符具有右结合性。因此 a=b=c=5 可理解为 a=(b=(c=5),关于简单赋值运算符及赋值表达式的说明: 1)在其它高级语言中,赋值构成了一个语句,称为 赋值语句。 而在C中,把“=”定义为运算符,从而组 成赋值表达式。 凡是表达式可以出现的地方均可出现 赋值表达式。例如,式子x=(a=5)+(b=8)是合法的。它 的意义是把5赋予a,8赋予b,再把表达式a=5,b=8的值 相加,和赋予x,故x应等于13。 2)在语言中也可以组成赋值语句,按照语言规 定, 任何表达式在其未尾加上分号就构成为语句。因 此,如x=8;a=b=c=5;都是赋值语句。,赋值时的类型转换 如果赋值运算符两边的数据类型不相同, 系统将自 动进行类型转换,即把赋值号右边的类型换成左边的类 型。具体规定如下: 1.实型赋予整型,舍去小数部分。前面的例子已经 说明了这种情况。 2.整型赋予实型,数值不变,但将以浮点形式存放, 即增加小数部分(小数部分的值为0)。 3.字符型赋予整型,由于字符型为一个字节, 而整 型为二个字节,故将字符的ASCII码值放到整型量的低八 位中,高八位为0。 4.整型赋予字符型,只把低八位赋予字符量。,main() int a,b=322; float x,y=8.88; char c1='k',c2; a=y; x=b; a=c1; c2=b; printf(“%d,%f,%d,%c“,a,x,a,c2); 本例表明了上述赋值运算中类型转换的规则: a为整型,赋以实型量y值8.88后只取整数8。 x为实型,赋以整型量b值322, 后增加了小数部分。 字符型量c1赋以a变为整型, 整型量b赋予c2 后取其低八位成为字符型(b的低八位 为01000010,即十进制66,按ASCII码对应于字符B)。,2.复合赋值符及表达式 在赋值符“=”之前加上其它二目运算符可构成复 合赋值符。如+=,-=,*=,=,%=,=,&=,=,|=。 构成复合赋值表达式的一般形式为: 变量 双目运算符=表达式 它等效于 变量=变量 运算符 表达式 例如: a+=5 等价于a=a+5 x*=y+7 等价于x=x*(y+7) r%=p 等价于r=r%p 复合赋值符这种写法,对初学者可能不习惯, 但十 分有利于编译处理,能提高编译效率并产生质量较高的 目标代码。,3、10 逗号运算符和逗号表达式 在语言中逗号“,”也是一种运算符,称为逗号 运算符。 其功能是把两个表达式连接起来组成一个表达 式,称为逗号表达式。其一般形式为: 表达式1,表达式2 其求值过程是分别求两个表达式的值,并以表达式2 的值作为整个逗号表达式的值。,main() int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); z=(x=a+b),(b+c); printf(“z=%d,y=%d,x=%d“,z,y,x); a-2,b-4,c-6,x-0,y-0 x-a+b,y-x z- b+c,本例中,z等于整个逗号表达式的值,也就是表达式2 的值,x是第一个表达式的值。,2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达 式的值,并不一定要求整个逗号表达式的值。 3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说 明中,函数参数表中逗号只是用作各变量之间的间隔符。,对于逗号表达式还要说明几点: 1.逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。例如: 表达式1,(表达式2,表达式3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式: 表达式1,表达式2,表达式n 整个逗号表达式的值等于表达式n的值。,3、11 位运算,C语言是为描述系统而设计的,因此它具有汇编语言所能完 成的一些功能。在系统软件中,常要处理二进制位的问题。例 如:将一个存储单元中的各二进位左移或右移一位,两个数按位 相加等等。C语言提供了位运算功能,与其他语言相比更具有其独 特的优越性。 所谓位运算是指进行二进制位的运算。,1.位运算和位运算符,C语言提供了下列位运算符: 运算符 含 义 解 释 & 按位与 若两个二进位都为1,结果为1,否则为0 | 按位或 若两个二进位都为0,结果为0,否则为1 按位异或 若两个二进位同号,则结果为0,否则为1 单目取反 对一个二进制数按位取反:1变0,0变1 右 移 将一个二进制数全部右移,对于无符号数, 左端补0;对于有符号数:正数补0,负数补 1(算术右移)。 右移一位相当于除以2。,说明: 1)位运算中除了外,均为二目运算符,即要求两侧各有 一个运算量。 2)运算量只能是整型或字符型数据,不能为实型数据。,1、&运算 例如:3&5 00000011 & 00000101 00000001,特殊用途: 1)清零:原来数中为1的位,新数中相应位为0。 2)保留某些指定位:新数中对应位为1。 3)保留某一位:新数中该位取1。,2、|运算 例如:3&5 00000011 | 00000101 00000111,3、运算 例如:3&5 00000011 00000101 00000110,3、运算特殊用途 1)使特定位翻转:新数翻转位 置1。 2)保留原值:与0相 3)交换两个数,不用临时变量。,4、运算 例如:5 00000101 11111010,运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他位运算符都高,例如:a&b,先进行a运算,然后进行&运算。,5、左移运算符00111100 左移1位相当于该数乘以2。但此结论只适合于该数左移时舍弃位中不包含1的情况。,6、右移运算符 例如:a=15;a=a2; 00001111=00000011 右移1位相当于该数除以2。但是需注意到符号位问题。,7、位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符 如:&=, |=, =, =, = 例如:a&=b 相当于 a=a&b.,8、不同长度数据进行位运算 如果两个数据长度不同,进行位运算时,系统会将二者按右端对齐。 如:a&b (a为long ,b为int) 注意:如果b为正数,则左侧16位补0。若b为负数,左侧补满1。如果b为无符号整数,则左侧补满0。,小 结 1.的数据类型 基本类型,构造类型,指针类型,空类型 2.基本类型的分类及特点 类型说明符 字节 数值范围 字符型 char 1 C字符集 基本整型 int 2 -3276832767 短整型 short int 2 -3276832767 长整型 long int 4 -231231-1 无符号型 unsigned 2 065535 无符号长整型 unsigned long 4 0232-1 单精度实型 float 4 10-3810+38 双精度实型 double 8 10-30810+308,3.常量前缀、后缀 前缀:八进制整常数加0 十六进制整常数加0X或0x 后缀?长整型加L或l 4.常量类型 整数,长整数,无符号数,浮点数,字符,字符串, 符号常数,转义字符。 5.数据类型转换 ·自动转换:在不同类型数据的混合运算中,由系统自动实 现转换,由少字节类型向多字节类型转换。 不同类型的 量相互赋值时也由系统自动进行转换,把赋值号右边的类 型转换为左边的类型。 ·强制转换:由强制转换运算符完成转换。,7.表达式 表达式是由运算符连接常量、变量、函数所组成的 式子。 每个表达式都有一个值和类型。 表达式求值按 运算符的优先级和结合性所规定的顺序进行。,6.运算符优先级和结合性 一般而言,单目运算符优先级较高,赋值运算符优先级 低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、 赋值运算符具有右结合性。,8.位运算符: 运算符 含 义 & 按位与 | 按位或 按位异或 单目取反 右 移,

    注意事项

    本文(第三章数据类型运算符与表达式.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




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

    三一文库
    收起
    展开