第02章数据精选文档.ppt
第02章数据2010年02月本讲稿第一页,共三十七页C数据类型基本类型构造类型指针类型空类型void定义类型typedef数值类型字符类型char枚举类型enum整 型浮点型单精度型float双精度型double短整型short长整型long整型int数组结构体struct共用体union2.1 C的数据类型本讲稿第二页,共三十七页2010年02月2.2 常量与变量的概念常量和符号常量变量本讲稿第三页,共三十七页2010年02月常量和符号常量o常量定义在程序运行过程中,其值不能改变的量。o常量来源由源程序确定。o常量类别数值常量、字符常量等等。o特殊常量符号常量,由#define宏定义确定。本讲稿第四页,共三十七页2010年02月o变量定义在程序运行过程中,其值可以改变的量o变量实质一个由用户取名的存储单元o变量来源对所有数据操作之前对变量定义,即向操作系统(OS)申请存储单元及其名称,存储地址由系统自动给定。o变量名称用户自由定义,但是必须符合“标识符”规定。(标识符规定只能由数字字符、大小写英文字母、下划线组成,第一个符号不能是数字。)变量不能与关键字同名。在C变量名称中,标示符对大小写敏感。o变量类型涵盖所有数据类型,如整形、字符型等等变量本讲稿第五页,共三十七页2010年02月2.3 整型数据整型常量的3种表示方法整形常量的类型整型变量整型变量的类型本讲稿第六页,共三十七页2010年02月整型常量的3种表示方法o十进制数:与数学中表示方法相同,如123、-456o八进制数:以0开头表示,如0123、-0456o十六进制数:以0 x开头表示,如0 x123、-0 xABC与有效数字无关本讲稿第七页,共三十七页2010年02月o系统自动识别。如123为int型,123456为long型o末尾加u、l,强制确定类型。如123u为unsigned int型,123l为long型。整形常量的类型本讲稿第八页,共三十七页2010年02月o存储形式:二进制、补码o类别:类型关键字占用内存表示数的范围基本整型int2字节-32768+32767长整形long4字节-231+231-1不带符号基本整型unsigned int2字节0+65535不带符号长整形unsigned long4字节0232-1整型变量本讲稿第九页,共三十七页2010年02月o整形变量的定义:类型名 变量名o整型数据的溢出整型变量(续)本讲稿第十页,共三十七页2010年02月2.4 实型数据实型常量的表示方法实型常量的类型实型变量实型变量的类型本讲稿第十一页,共三十七页2010年02月实型常量的表示方法o普通表示方式:数字+小数点 如:0.0,1.23,-2.36,.265,-.365,5.o指数表示形式:表示方法:(尾符)尾数e或E(阶符)整数阶数 例:1e2,5.2e3,-9e3,36.2E-6表示实数0的常见形式本讲稿第十二页,共三十七页2010年02月实型常量的类型o系统自动识别:将实数按double型识别o实数末尾加f或F,强制将实数按float型处理例:float x;x=1.23;x=x*4.56f;/*4.56按float数据处理,运算速度快。否则,后一个x将自动转换为double型,与默认为double型的4.56相乘,得到double型的乘积,然后转变为float型数值后赋值给x,速度慢*/本讲稿第十三页,共三十七页2010年02月默认小数点实型变量o实型数据在内存中的存放形式float实型例:1 0000011 0 11000000000000000000000尾数为+0.75阶数为负值,对10000011求补:0000011求反得:1111100+1得:1111101可见阶数即为:-125阶符阶码尾符尾码最终得到这个数的大小为:+0.75*2的-125次方即为二进制:+0.11的小数点左移125位本讲稿第十四页,共三十七页2010年02月o实型变量的分类o实型数据的舍入误差(自学)类型类型关键字占用内存位数单精度型float32双精度型double64长双精度型long double128实型变量(续)本讲稿第十五页,共三十七页2010年02月2.5 字符型数据字符常量字符变量字符数据在内存中的存储形式及其使用方法char型变量的特殊用途字符串常量本讲稿第十六页,共三十七页2010年02月字符常量o两种表示形式:1、单个字符,例:a、6等等2、单个特定字符或特定形式的数字,构成转移字符。例:n表示“回车”;012表示ASCII码为八进制12的字符“换行”;x41表示字符A等等。详情见教材表3.3。o字符常量实质:等价于这个字符的ASCII码值。例如:字符9与数值0 x39(即十进制57)等价。本讲稿第十七页,共三十七页2010年02月字符变量o只有一种类型:char型o定义一个字符变量举例:char c2;本讲稿第十八页,共三十七页2010年02月字符数据在内存中的存储形式及其使用方法o存储形式:保存这个字符的ASCII值,一个字节,最高位一般为0。例:char c;c=a;c=c+3;printf(“%cn”,c);输出结果为字符:d改动为:char c;c=0 x61;c=c+3;printf(“%cn”,c);输出结果为字符:d改动为:char c;c=a;c=c+3;printf(“%dn”,c);输出结果为数值:101本讲稿第十九页,共三十七页2010年02月char型变量的特殊用途o仅仅作为一个字节的整数类型使用。ochar型:表示数值的范围是-128+127ounsigend char型:表示数值的范围是0+255本讲稿第二十页,共三十七页2010年02月字符串常量o表示方式:“多个字符(包括转义字符)”o存储方式:存储逐个字符的ASCII码,并且在末尾自动添加一个字符0,即数值0,以此作为字符串的结束标记。o注意:a与“a”的不同。前者只保存单字符,后者保存双字符。o字符串常量不能往一个变量里面赋值。因为字符串的实质是该字符串的起始地址。字符串常量也不能往一个变量的地址里面赋值,因为变量一旦定义,该变量的地址就确定了,不能移动。字符串常量可以往一个指针变量里面赋值,相当于让指针指向这个字符串常量。本讲稿第二十一页,共三十七页2010年02月2.6 变量赋初值o含义:在程序中确定变量的初始值。程序运行时,该变量的值还可以改变(赋值即可)。o方法:定义变量的同时赋值即可。例:char c=h;int x=2;本讲稿第二十二页,共三十七页2010年02月2.7 不同数据类型间的混合运算o自动转换:不做任何要求时,系统自动向存储位数多、精度高的方向转换(教材P30图2-10)。但是赋值运算时,系统只能让数值自动转换为被赋值变量的类型后存储。例:float x;int i=3;x=i/2+3.0;计算及数据类型自动转换过程:i/2:它们的值都是int型,得到int型值1;1+3.0:1自动转换为double型1.0,与double型的3.0相加,得到double型的值4.0;double型的4.0自动转换为float型的4.0,存储到float型的x变量之中。本讲稿第二十三页,共三十七页2010年02月o强制转换:作用:可以将某个常量的值、变量的值、表达式的值转换为需要的类型,但是不改变上述常量、变量、表达式本身的数据类型。方法:(数据类型)常量(或变量、表达式)例:int i;float x=3.7;i=(int)x+3;i得到的值为6(不是7)。浮点数转换成整数时,自动截断取整,不四舍五入。将常量、变量、表达式用运算符正确地组合起来的式子;常量、变量本身也可以看作表达式本讲稿第二十四页,共三十七页2010年02月2.8 算术运算符和算术表达式本讲稿第二十五页,共三十七页2010年02月C运算符(34个,教材P325附录III)算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符 :|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数 :sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它 :()-本讲稿第二十六页,共三十七页算术运算符运算符功能目数优先级结合性注 意+加24-减*乘3/除分母不能为0;2整数相除余数舍弃。%求余被操作数需为整数。余数符号与被除数相同。+自增12只用于变量;运算符在变量前、后,功能不同-自减本讲稿第二十七页,共三十七页2010年02月算术运算符应用举例表达式表达式的值变量的值5/31-5/3-12%32-11%-3-2x=3;(x+)+584x=3;(+x)+594x=3;(x-)+582x=3;(-x)+572本讲稿第二十八页,共三十七页2010年02月表达式o定义:将常量、变量、表达式用运算符正确地组合起来的式子;常量、变量本身也可以看作表达式。o例:3+5、6+x、y=x*4+6、y=x=z=8、7o名称:以优先级最低的运算符的名称命名;(无运算符时直接称呼其为某某变量或常量。)例:3+4*x加表达式、算术表达式 3+4*x y关系表达式(的优先级为6)y=3+4*x赋值表达式(=的优先级为14)y=3+4*x,y+逗号表达式(,的优先级为15,最低)本讲稿第二十九页,共三十七页2010年02月2.9 赋值运算符和赋值表达式o运算符:=o优先级:14(很低,仅仅高于,)o结合性:从右往左o含义:=右边表达式的值送往=左边的变量中o赋值操作时,数据类型的自动转换:转换为被赋值的变量类型;转换规则与不同类型数据混合运算的转换规则不同。不同类型数据混合运算的转换数值尽量精确,目标类型不定,偶尔出错赋值操作中的转换目标类型确定,不考虑精确,更容易出错。本讲稿第三十页,共三十七页2010年02月o构成:某些2目运算符=o种类:10种+=、-=、*=、/=、%=、=、&=、=、|=o优先级、结合性:与=相同o功能:“变量 复合运算符(2目运算符=)表达式”相当于:“变量=变量 2目运算符(表达式)”o例:x*=y*4+5 相当于 x=x*(y*4+5)复合赋值运算符本讲稿第三十一页,共三十七页2010年02月赋值表达式及其表达式的值o赋值表达式构成 变量=(或复合赋值运算符)表达式o赋值表达式的值:即赋值时所赋的值o例:若y=4;则赋值表达式:x=y*y/2的值是8(与x得到的值相同)本讲稿第三十二页,共三十七页2010年02月2.10 逗号运算符及其表达式o运算符:,o优先级:15(最低)o结合性:从左往右o使用方法:表达式1,表达式2o逗号表达式:即“表达式1,表达式2”o逗号运算符的功能:先算表达式1,后算表达式2o逗号表达式的值:即表达式2的值o例:逗号表达式“x=5,y=x*x”运算结束之后:x的值为5,y的值为25,该逗号表达式的值为25o例:逗号表达式“x=5,y=x*x+,y=x/2”运算结束之后:x的值为6,y的值为3,该逗号表达式的值为3本讲稿第三十三页,共三十七页2010年02月作业o自我练习:2.3、2.4、2.11o书面完成,留待上机验证:2.6、2.10o附加题,书面完成,并设计程序上机验证:2.9、2.12o附 上机指导:2.9、2.12本讲稿第三十四页,共三十七页2010年02月上机指导o2.9.(1)main()float x=2.5,y=4.7;int a=7;printf(%fn,x+a%3*(int)(x+y)%2/4);getch();本讲稿第三十五页,共三十七页2010年02月上机指导o2.12.(6)main()int a=12;a+=a-=a*=a;printf(%dn,a);getch();本讲稿第三十六页,共三十七页2010年02月交作业方式o发到电子邮箱:发到电子邮箱:chuyq_o邮件主题示例邮件主题示例:通信通信081 张三张三(班级姓名,汉字)(班级姓名,汉字)o邮件内容示例邮件内容示例:/*0803*/(题号,表示第(题号,表示第8章习题第章习题第3题)题)main()/*0810*/(题号,表示第(题号,表示第8章习题第章习题第10题)题)main()(将编辑、调试运行通过的源程序保存之后,用写字板、记事本、或(将编辑、调试运行通过的源程序保存之后,用写字板、记事本、或Win-TC打开,全部复制到打开,全部复制到邮件,尽量不要采用附件的方式发送。若是未通过程序让我批阅,请务必在题号后面注明邮件,尽量不要采用附件的方式发送。若是未通过程序让我批阅,请务必在题号后面注明“未通过未通过”)本讲稿第三十七页,共三十七页