《第2章数据的存储与运算.ppt》由会员分享,可在线阅读,更多相关《第2章数据的存储与运算.ppt(85页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第2 章 数据的存储与运算2.1 数据在计算机中是怎样存储的2.2 整型数据的运算与分析2.3 实型数据的运算与分析2.4 字符型数据的运算2.5 符号常量2.6 算术运算符和算术表达式2.7 C 运算符和C 表达式2.8 提高部分2.1 2.1 数据在计算机中是怎样存储的数据在计算机中是怎样存储的2.1.1 数据在计算机中是以二进制形式存储的2.1.2 位、字节和地址2.1.3 不同类型数据的存储方式P16 计算机内部的信息都是用二进制表示 计算机存储器是用半导体集成电路构成的 有两种稳定的工作状态:“导”与“截止”,即电脉冲的“有”与“无”分别用“1”和“0”表示2.1.1 2.1.1 数
2、据在计算机中是数据在计算机中是以二进制形式存储的以二进制形式存储的P16 若相邻的8 个二极管元件中第1,3,5,7 个元件处于“导通”状态,第2,4,6,8 个元件处于“截止”状态,用“10101010”表示 导通 截止 导通 截止 导通 截止 导通 截止 1 0 1 0 1 0 1 0 2.1.1 2.1.1 数据在计算机中是数据在计算机中是以二进制形式存储的以二进制形式存储的P162.1.1 2.1.1 数据在计算机中是数据在计算机中是以二进制形式存储的以二进制形式存储的P16十进制数 二进制数0 01 12 103 114 1005 101十进制数 二进制数6 1107 1118 10
3、009 100110 10102.1.2 位、字节和地址 位(bit),又称“比特”。每一个二极管元件称为一个“二进制位”,是存储信息的最小单位。它的值是“1”或“0”字节(byte),又称“拜特”。一般将8 个“二进制位”组织成一组,称为“字节”。这是人们最常用的存储单位P172001200220032004200520062.1.2 位、字节和地址 地址。计算机的存储器包含许多存储单元,操作系统把所有存储单元以字节为单位编号P173457892.1.3 不同类型数据的存储方式 整数的存储方式u 一个十进制整数,先转换为二进制形式u 如整数10,以二进制形式表示是1010P180 0 0 0
4、 1 0 1 00 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0用一字节存放用两字节存放负数按补码形式存放2.1.3 不同类型数据的存储方式 实数的存储形式u 对于实数,一律采用指数形式存储u123.456 标准化指数形式为0.123456 103P18+.12345+3数符 数值部分指数符号 指数2.1.3 不同类型数据的存储方式 字符的存储方式u 对于字符,按ASCII 代码存放uA 的ASCII 代码是65(1000001)P180 1 0 0 0 0 0 12.2 2.2 整型数据的运算与分析整型数据的运算与分析2.2.1 整型数据运算程序举例和分析2.2.2 整型常量与
5、整型变量P192.2.1 2.2.1 整型数据运算程序举例和分析整型数据运算程序举例和分析 例2.1 鸡兔同笼。在一个茏子里同时养着一些鸡和兔子,你想了解有多少只鸡和多少只兔,主人对你说:我只告诉你鸡和兔的总头数是16 和总脚数是40,你能不能自己计算有多少只鸡和多少只兔?P192.2.1 2.2.1 整型数据运算程序举例和分析整型数据运算程序举例和分析 解题思路:u 设x 代表鸡的数量,y 代表兔的数量,总头数为h,总脚数为fu 列出下面的方程式:x+y=h(1)2x+4y=f(2)u 解方程得到:P192.2.1 2.2.1 整型数据运算程序举例和分析整型数据运算程序举例和分析#inclu
6、de void main()int h,f,x,y;h=16;f=40;y=(f-2*h)/2;x=h-y;printf(“%d%dn”,x,y);P19定义整型变量h,f,x,y使h 的值等于16使f 的值等于40计算兔的个数计算鸡的个数2.2.1 2.2.1 整型数据运算程序举例和分析整型数据运算程序举例和分析#include void main()int h,f,x,y;h=16;f=40;y=(f-2*h)/2;x=h-y;printf(“%d%dn”,x,y);P19输出鸡和兔个数124%d,%d2.2.1 2.2.1 整型数据运算程序举例和分析整型数据运算程序举例和分析#inclu
7、de void main()int h,f,x,y;h=16;f=40;y=(f-2*h)/2;x=h-y;printf(“%d%dn”,x,y);P19输出鸡和兔个数12,4%d,%d cock=%d,rabbit=%d2.2.1 2.2.1 整型数据运算程序举例和分析整型数据运算程序举例和分析#include void main()int h,f,x,y;h=16;f=40;y=(f-2*h)/2;x=h-y;printf(“%d%dn”,x,y);P19输出鸡和兔个数12,4cock=%d,rabbit=%dcock=12,rabbit=42.2.1 2.2.1 整型数据运算程序举例和分
8、析整型数据运算程序举例和分析 定义变量的一般形式是:类型名 变量名;u 例如:int h,f,x,y;u 变量都必须在使用前定义,指定其类型u 赋值:h=37;f=88;P192.2.2 2.2.2 整型常量与整型变量整型常量与整型变量 常量和变量u 常量是指在程序运行过程中其值不能改变的量u 变量是指在程序运行过程中其值可以改变的量P222.2.2 2.2.2 整型常量与整型变量整型常量与整型变量 常量和变量u 要注意区别变量名和变量值P2216h2000存储单元变量名变量地址变量值2.2.2 2.2.2 整型常量与整型变量整型常量与整型变量 常量和变量u 要注意区别变量名和变量值P2216
9、h2000执行h=37;372.2.2 2.2.2 整型常量与整型变量整型常量与整型变量u 变量名的取名规则l 变量名第一个字符必须是字母或下划线,其后字符必须是字母、数字或下划线P22合法:sum,average,_total,Class,day,month,Student_name,tan,li_ling不合法:Zhang-sun,Students,$123,33,3D642.2.2 2.2.2 整型常量与整型变量整型常量与整型变量变量名的取名规则l 变量名第一个字符必须是字母或下划线,其后字符必须是字母、数字或下划线l 大小写字母代表不同的字符,一般,程序中的变量名用小写字母表示l 变量
10、名的长度不是无限的l 变量名尽量简单易记、见名知意l 在同一函数中,不同变量不能取相同名P222.2.2 2.2.2 整型常量与整型变量整型常量与整型变量变量必须“先定义,后使用”l 根据定义变量时指定的类型,编译系统为变量分配相应的存储单元l 凡未被事先定义的,系统不把它认作变量名,保证程序中变量名使用得正确l 指定了每一变量属于一个类型,就便于在编译时据此检查在程序中要求对该变量进行的运算是否合法P222.2.2 2.2.2 整型常量与整型变量整型常量与整型变量u 变量类型相当于建造房屋的图纸,按照同一套图纸可以建造出许多套外形和结构完全相同的房屋,它们具有相同的特征u 类型是抽象的,变量
11、是具体的u 图纸相当于一系列的规则和要求,依照它进行施工。但光有图纸是不能住人的,只有建成的房屋才能住人u 类型不占存储单元,不能用来存储数据,而变量占存储单元,可以用来存储数据P222.2.2 2.2.2 整型常量与整型变量整型常量与整型变量 整型常量的表示形式u 除了常用的十进制形式外,还允许使用八进制形式和十六进制形式表示的数 整型变量的种类u 基本整型,类型名为intu 长整型,类型名为long intu 短整型,类型名为short intuP222.3 2.3 实型数据的运算与分析实型数据的运算与分析2.3.1 实型数据的运算举例2.3.2 实型常量的表示形式2.3.3 实型变量P2
12、42.3.1 2.3.1 实型数据的运算举例实型数据的运算举例 例2.2 分期付款的计算。张先生为购房,向银行贷款,贷款额为D 元,每月准备还P 元,月利率为R,求需要多少个月才能还清。P24m 是还清贷款所需月数d=324500,p=3245,r=0.8%2.3.1 2.3.1 实型数据的运算举例实型数据的运算举例(1)d 和p 是整数,r 是一个小数,因此程序中要分别定义整型变量和实型变量。(2)公式中用到对数log,这个对数是以10 为底的。对数log 的函数log10P242.3.1 2.3.1 实型数据的运算举例实型数据的运算举例#include#include void main(
13、)int d,p;float r,m;d=324500;p=3245;r=0.008;m=(log10(p)-log10(p-d*r)/log10(1+r);printf(“month=%fn”,m);printf(“total=%fn”,m*p);P24用到数学函数时定义整型变量d,p定义实型变量r,m赋值求m 的值2.3.1 2.3.1 实型数据的运算举例实型数据的运算举例#include#include void main()int d,p;float r,m;d=324500;p=3245;r=0.008;m=(log10(p)-log10(p-d*r)/log10(1+r);prin
14、tf(“month=%fn”,m);printf(“total=%fn”,m*p);P24输出m 的值计算并输出还款数total=655436.127930month=201.983404输出实数时2.3.1 2.3.1 实型数据的运算举例实型数据的运算举例#include#include void main()int d=324500,p=3245;double r=0.008,m;m=(log10(p)-log10(p-d*r)/log10(1+r);printf(“month=%fn”,m);printf(“total=%fn”,m*p);P24定义变量时赋初值定义double 型无警告
15、错2.3.2 2.3.2 实型常量的表示形式实型常量的表示形式 实数在计算机语言中常称为浮点数u 十进制小数形式 如:0.123,123.23,0.0u 指数形式 如:123e3 或123E3P262.3.3 2.3.3 实型变量实型变量 实型变量的分类u 单精度实型变量(float 型)u 双精度实型变量(double 型)u 长双精度实型变量(long double 型)P272.3.3 2.3.3 实型变量实型变量 实型变量的分类 实型数据的舍入误差u 实型变量是由有限的存储单元组成的u 能提供的有效数字总是有限的u 在有效位以外的数字将被舍去u 会产生一些误差P272.3.3 2.3.
16、3 实型变量实型变量 实型变量的分类 实型数据的舍入误差例2.3 实型数据的舍入误差P27#include void main()float a;a=1234.1415926;printf(a=%fn,a);a=1234.1416027 位有效位2.3.3 2.3.3 实型变量实型变量 实型变量的分类 实型数据的舍入误差 把实数按双精度数处理u 把程序中的实常量处理成双精度型,分配8 个字节,以提高精度。P27a=1234.1415926;双精度 单精度 编译时有警告最好:double a;2.4 2.4 字符型数据的运算字符型数据的运算2.4.1 字符数据运算的简单例子2.4.2 字符常量和
17、字符变量2.4.3 字符串常量P292.4.1 2.4.1 字符数据运算的简单例子字符数据运算的简单例子 例2.4 逐个输出英文字母C,H,I,N,A。然后按反序输出,即A,N,I,H,C。P29#include void main()char a=C,b=H,c=I,d=N,e=A;printf(“%c%c%c%c%cn”,a,b,c,d,e);printf(“%c%c%c%c%cn”,e,d,c,b,a);定义字符变量2.4.1 2.4.1 字符数据运算的简单例子字符数据运算的简单例子 例2.4 逐个输出英文字母C,H,I,N,A。然后按反序输出,即A,N,I,H,C。P29#includ
18、e void main()char a=C,b=H,c=I,d=N,e=A;printf(“%c%c%c%c%cn”,a,b,c,d,e);printf(“%c%c%c%c%cn”,e,d,c,b,a);用单撇号括起来输出字符CHINA ANIHC2.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 字符常量u 字符常量是用单撇号括起来的一个字符u 英文字母可以作为字符常量u 键盘上的字符都可以作为字符常量u 小写字母和大写字母是不同的字符常量P292.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 转义字符u 转义字符必须以反斜杠“”开头u“”后只能有一个字符(或代表字符的
19、8 进制或16 进制数)P292.4.2 2.4.2 字符常量和字符变量字符常量和字符变量t 跳到下一个输出区b 消除前一个已输出的字符r 将当前的输出位置返回在本行开头f 将当前的输出位置移到下页的开头0 常用于字符串中,作为串结束标志 代表一个反斜杠字符“”代表一个单撤号字符”代表一个双撤号字符ddd 1 3 位8 进制数所代表的字符xhh 1 2 位16 进制数所代表的字符P292.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 字符变量u 用来存放字符常量u 只能放一个字符u 字符变量的定义形式:char 字符变量列表;P292.4.2 2.4.2 字符常量和字符变量字符常量
20、和字符变量 字符数据与整型数据在一定条件下通用uchar c=a;与char c=97;等价P292.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 字符数据与整型数据在一定条件下通用u 例2.5 将两个整数分别赋给两个字符变量,再将字符数据按字符和整数形式输出。#include void main()char c1=97,c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);P29char c1=a,c2=b;a b97 982.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 字符数据与整型数据在一定条件下通用u 例2.5 将
21、两个整数分别赋给两个字符变量,再将字符数据按字符和整数形式输出。字符a 的存储(用ASCII 代码存放)P290 1 1 0 0 0 0 1按%c 输出:a按%d 输出:97printf(“%c%cn”,97+1,a+1);输出什么?2.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 字符数据与整型数据在一定条件下通用u 例2.5 将两个整数分别赋给两个字符变量,再将字符数据按字符和整数形式输出。P29b bprintf(“%d%dn”,97+1,a+1);输出什么?98 982.4.2 2.4.2 字符常量和字符变量字符常量和字符变量 字符数据与整型数据在一定条件下通用u 例2.6
22、 将小写字母转换为大写字母。#include void main()char c1=a,c2=b;c1=c1-32;c2=c2-32;printf(%c,%cn,c1,c2);P29a97 A65b98 B66c99 C67规律是?A,B2.4.3 2.4.3 字符串常量字符串常量 字符串常量是一对双撇号括起来的字符序列How do you do.CHINAa都是合法的字符串P332.4.3 2.4.3 字符串常量字符串常量 字符串常量是一对双撇号括起来的字符序列u 是字符常量u 是字符串常量u 二者的含义是不同的P33char c;c=a;正确char c;c=”a”;错误存放字符a 的存储
23、单元存放字符串”a”的存储单元 a 0a2.5 2.5 符号常量符号常量2.5.1 符号常量的作用2.5.2 符号常量的性质和使用方法P342.5.1 2.5.1 符号常量符号常量的作用的作用 例2.7 求以r 为半径的圆周长c 和圆面积s,再求以r 为半径的圆球体积v。P35 c=2*3.1415926*r;s=3.1415926*r*r;v=4/3*3.1415926*r*r*r;#include void main()double r=3.67,c,s,v;c=2*3.1415926*r;s=3.1415926*r*r;v=4/3*3.1415926*r*r*r;printf(“c=%f
24、ns=%fnv=%fn”,c,s,v);c=23.059290s=42.313797v=155.291633有错4.0/3.0#include void main()double r=3.67,c,s,v;c=2*3.1415926*r;s=3.1415926*r*r;v=4.0/3.0*3.1415926*r*r*r;printf(“c=%fns=%fnv=%fn”,c,s,v);c=23.059290s=42.313797v=207.055511pow(r,2)pow(r,3)#include#include#include void main()double r=3.67,c,s,v;c
25、=2*3.1415926*r;s=3.1415926*pow(r,2);v=4.0/3.0*3.1415926*pow(r,3);printf(“c=%fns=%fnv=%fn”,c,s,v);c=23.059290s=42.313797v=207.055511#define PI 3.1415926PIPIPI#include#include void main()double r=3.67,c,s,v;c=2*PI*r;s=PI*pow(r,2);v=4.0/3.0*PI*pow(r,3);printf(“c=%fns=%fnv=%fn”,c,s,v);c=23.059290s=42.31
26、3797v=207.055511#define PI 3.1415926符号常量2.5.2 2.5.2 符号常量的性质和使用方法符号常量的性质和使用方法#define 不是C 语句,行末没有分号#define 是一个“预编译命令”符号常量一般用大写,以示与变量区别 好处:u 含义清楚u 在需要改变一个常量时能做到“一改全改”u 用符号常量能保护所代表的数据不被破坏P362.6 2.6 算术运算符和算术表达式算术运算符和算术表达式2.6.1 算术运算符2.6.2 算术表达式P382.6.1 2.6.1 算术运算符算术运算符P381.基本的算术运算符:+:加法运算符-:减法运算符*:乘法运算符/:
27、除法运算符%:求余运算符(要求两侧均为整数。如19%4,结果为3)2.6.1 2.6.1 算术运算符算术运算符P38 两个整数相除的结果为整数u 如5/3 的结果值为,舍去小数部分u 如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2uVC+采取“向零取整”的方法u 如5/3=1,-5/3=-1,取整后向零靠拢2.6.1 2.6.1 算术运算符算术运算符P38 如果参加+、-、*、/运算的两个数中有一个数为float 或double 型,则结果都是double 型,因为系统将所有float 型数据都先转换为double 型,
28、然后进行运算。这是为了提高运算精度。2.6.1 2.6.1 算术运算符算术运算符P382.自增、自减运算符:作用是使变量的值增或减u+i,-i:在使用i 之前,先使i 的值加(减)1ui+,i-:在使用i 之后,使i 的值加(减)12.6.2.2.6.2.算术表达式算术表达式P39 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式 运算对象包括常量、变量、函数等2.6.2.2.6.2.算术表达式算术表达式P39 各类数值型数据间的混合运算uchar 和short 型转换为int 型ufloat 型一律转换为double 型u 整型(包括int,short
29、,long)数据与double 型数据进行运算,先将整型转换为double 型2.6.2.2.6.2.算术表达式算术表达式P39 各类数值型数据间的混合运算 10+a+i*f-d/e先将a 转换成整数97,运算结果为107i 为整型f 为float 型d 为double 型e 为long 型2.6.2.2.6.2.算术表达式算术表达式P39 各类数值型数据间的混合运算 10+a+i*f-d/e107先将i 与f 转成double 型,运算结果为double 型i 为整型f 为float 型d 为double 型e 为long 型2.6.2.2.6.2.算术表达式算术表达式P39 各类数值型数据
30、间的混合运算 10+a+i*f-d/e107double 型先将107 转换成双精度型,结果为double 型i 为整型f 为float 型d 为double 型e 为long 型2.6.2.2.6.2.算术表达式算术表达式P39 各类数值型数据间的混合运算 10+a+i*f-d/e107double 型double 型转换为double 型double 型最终结果为double 型 i 为整型f 为float 型d 为double 型e 为long 型2.6.2.2.6.2.算术表达式算术表达式P39 强制类型转换u 在表达式中也可以利用“强制类型转换”运算符将数据转换成所需的类型(doub
31、le)a(将转换成double 类型)(int)(x+y)(将x+y 的值转换成int 型)(float)(5%3)(将5%3 的值转换成float 型)2.6.2.2.6.2.算术表达式算术表达式P39 强制类型转换u 强制类型转换的一般形式为:(类型名)(表达式)例2.8 强制类型转换。#include void main()float f=3.6;int i;i=(int)f;printf(f=%f,i=%dn,f,i);f 3.600000,i=3不改变f 的值2.6.2.2.6.2.算术表达式算术表达式P39 强制类型转换u 强制类型转换的一般形式为:(类型名)(表达式)有两种类型转
32、换u 系统自动进行的类型转换u 强制类型转换2.7 C2.7 C运算符和运算符和CC表达式表达式2.7.1 C 运算符2.7.2 C 表达式P41(1)算术运算符(+-*/%)(2)关系运算符(!)(3)逻辑运算符(!|)(4)位运算符(|)(5)赋值运算符(及其扩展赋值运算符)(6)条件运算符(?:)2.7.1 C2.7.1 C运算符运算符P41(7)逗号运算符(,)(8)指针运算符(*)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)成员运算符(.-)(12)下标运算符()(13)其他(如函数调用运算符()2.7.1 C2.7.1 C运算符运算符P41 箅
33、术表达式。如2+6.7*3.5+sin(0.5)关系表达式。如x0,y0&y0(表示x0 与y0同时成立,&是逻辑运算符,代表“与”)赋值表达式。如a=5.6 逗号表达式。如a=3,y=4,z=8 用逗号连接若干个表达式,顺序执行这些表达式,整个逗号表达式的值是最后一个表达式的值(今为8)2.7.2 C2.7.2 C表达式表达式P422.8 2.8 提高部分提高部分2.8.1 求补码的方法2.8.2 整型常量的表示形式2.8.3 整型变量的类型2.8.4 整型常量的类型2.8.5 运算符的优先级与结合性P422.8.1 2.8.1 求补码的方法求补码的方法 计算机不论对正数和负数都按“补码”形
34、式存放到存储单元 对于正数来说,补码就是该数的“原码”(该数的二进制形式)负数的补码不是它的原码P42 求-1 的补码的方法是:0 0 0 0 0 0 0 1原码1 1 1 1 1 1 1 0诸位取反反码1 1 1 1 1 1 1 1反码加1补码2.8.1 2.8.1 求补码的方法求补码的方法P42 求一个负数的补码的方法是:u 取该数(不考虑数的符号)的二进制形式,它就是原码u 对该原码逐位“取反”(逐位把0 变1,把1 变0),得到其“反码”u 将得到的反码加12.8.1 2.8.1 求补码的方法求补码的方法P42 求-10 的补码的方法是?0 0 0 0 1 0 1 0原码1 1 1 1
35、 0 1 0 1诸位取反反码1 1 1 1 0 1 1 0反码加1补码2.8.1 2.8.1 求补码的方法求补码的方法P422.8.2 2.8.2 整型常量的表示形式整型常量的表示形式 在语言中,整常数可用3 种形式表示:u10 进制整数,如123,-456u8 进制整数,特点是逢8 进1。在程序中凡以0 开头的数都认作8 进制数u16 进制整数。特点是逢16 进1。用0 9、a f 分别代替0 15。在程序中凡以0 x 开头的数都认作16 进制数P43a=83;/*10 进制数*/a=0123;/*8 进制数*/a=0 x53;/*16 进制数*/可以定义和使用以下6 种整型变量:u 有符号
36、基本整型 signed int u 无符号基本整型 unsigned int u 有符号短整型 signed short intu 无符号短整型 unsigned short intu 有符号长整型 signed long intu 无符号长整型 unsigned long int2.8.3 2.8.3 整型变量的类型整型变量的类型P44 在计算机语言中,常量是有类型的,这也是计算机的特点 数据是要存储的,不同类型的数据所分配的字节和存储方式是不同的 整型变量有类型,因此整型常量也应该有类型,才能在赋值时匹配u 根据常量的大小、数后面加的字母l 或L、u 或U 判断其类型2.8.4 2.8.4 整型常量的类型整型常量的类型P45 先按运算符的优先级别高低次序执行 如果优先级别相同,则按规定的“结合方向”处理2.8.5 2.8.5 运算符的优先级与结合性运算符的优先级与结合性P45