语言程序设计教师:张晓欢授课班级:软件工程12级4、5、6、7、8班第二章C语言的存储与运算常用的数据类型介绍算术运算符和表达式C运算符和表达式本章主要内容数据在计算机中的存储形式数据:是程序处理的对象。例如:整数、实数、字符等。位(bit):存储信息的最小单位。它的值是0或1。字节(Byte):最常用的信息存储单位。8个二进制位是一个字节。地址:存储器中每个以字节为单位的存储单元的编号,可以唯一的确定该存储单元。数据在计算机中的存储形式…...…...2000200120022005内存02003计算机内部的信息都是用二进制表示的。常用的数制有:十进制、二进制、八进制、十六进制数制间相互转换规则:N进制数转换为10进制数转换方法:是将N进制的数按位权展开求和。(1)二进制数转换成十进制数:(10110.01)2=1×24+0×23+1×22+1×21+0×20+0×2-1+1×2-2=16+0+4+2+0+0+0.25=(22.25)10(2)八进制数转换成十进制数:(1325.65)8=1×83+3×82+2×81+5×80+6×8-1+5×8-2=512+192+16+5+0.75+0.078125=(725.828125)10(3)十六进制数转换成十进制数:(12DA.4B)16=1×163+2×162+13×161+10×160+4×16-1+11×16-2=4096+512+208+10+0.25+0.04296875=(4826.29296875)10数据在计算机中的存储形式十进制数转换成N进制数转换方法:将N进制数,整数部分“除N取余,从下至上”,小数部分“乘N取整,从上至下”。十进制整数转换成二进制整数(口诀:“除2倒序取余”)。例如:(175)10=(10101111)2十进制小数转换成二进制小数(口诀:“乘2倒序取整”)。例如:(0.6875)10=(0.1011)2八进制、十六进制与二进制方法相同数据在计算机中的存储形式二进制和八进制数之间的相互转换二进制→八进制转换方法:一位八进制数可用三个二进制数来表示。因此二进制数转换成八进制数,只要以小数点为界,向左向右每三位二进制数用一个八进制数来代替即可,不足三位的用0补足。例:(1011100101.0101)2=(1345.24)8利用以下方法和技巧:(001011100101.010100)2(1345.24)8八进制→二进制转换方法:把一个八进制数转换成二进制数,只要将一位拆分成三位即可。例:(734.52)8=(111011100.10101(734.52)8(111101100.101010)2数据在计算机中的存储形式二进制与十六进制数之间的相互转换二进制→十六进制转换方法:一位十六进制数可用4个二进制数来表示。因此二进制数转换成十六进制数,只要以小数点为界,向左向右每4位二进制数用一个十六进制数来代替即可,不足4位的用0补足。(1011100101.0101)2=(2E5.5)16利用以下方法和技巧:(001011100101.0101)(2E55)16十六进制→二进制转换方法:把一个十六进制数转换成二进制数,只要将一位拆分成四位即可。(7D3.A2)16=(011111010011.10100010)2(7D3.A2)16(011111010011.10100010)2数据在计算机中的存储形式数制间的转换途径有多种,在应用时一定要灵活。一般初学者可以把二进制作为桥梁,这样使任何数制间的转换都与二进制发生关系,运算思路容易理解,转换方法容易掌握。有了理论性的讲授后,再辅助以一定的练习,学生便可在短时间掌握各种进制之间的转换方法,就能在以后的学习中熟能生巧,并加深对进制在计算机中作用的理解。数据在计算机中的存储形式不同类型数据的存储方式:1、整数的存储方式将整数转化为二进制数存储在存储单元中,长度不够时用0补足。2、实数的存储方式将实数化为标准化指数形式。在计算机中一般用4个字节存储实数,前三个字节存放数值部分,后一个字节存放指数部分。3、字符的存储方根据ASCII码表,将字符替换为对应的数字,再将数字化为二进制数,位数不时够用0补足。数据在计算机中的存储形式数据有两种基本表现形式:常量和变量。常量:在程序运行过程中其值不能改变的量。变量:程序运行过程中其值可以改变的量。a、一个变量应该有一个名字b、在内存中占据一定的存储单元c、在该存储单元中存放变量的值。d、区分变量名、变量地址、存储单元、变量值的关系。e、变量名命名原则:即由数字,字母,下划线组成,其中数字不能开头。变量命名注意事项:见教材P23数据在计算机中的存储形式整型常量与整型变量1)整型常量十进制整型常量:例如12,-24八进制整型常量:例如012,058十六进制整形常量:例如0x12,0x582)整型变量可以使用的整型类型有:基本整形:int短整型:shortint长整型:longint还可以在每个类型前面加上修饰词:signed或unsigned定义整型变量格式为:inta;常用的数据类型介绍整数计算应用题——鸡兔同笼问题解:设有鸡x只,兔y只,总头数为h,总脚数为f.x+y=h2x+4y=f解得:x=h-yy=(f-2*h)/2请编程求解。常用的数据类型介绍实型常量和变量1)实型常量两种表示形式:1.十进制小数形式例如:0.123,0.0,123.4562.指数形式例如:123.456e0,123E4,0.125e-2注意:e(E)前面必须有数字e(E)后面必须是整数一个实数在输出时按规范化指数形式输出。常用的数据类型介绍实型常量和变量2)实型变量分为3类:单精度:float双精度:double长双精度:longdouble由于长度的限制,有些实型变量值会将多余的位去掉,并四舍五入。例:#includestdio.hvoidmain(){floatp=3.1415926585;printf(“a=%f\n”,p);}必要时可将实数用双精度来进行存储。常用的数据类型介绍实型常量和变量2)实型变量实型数据应用例题——教材P24页#includestdio.h#includemath.hvoidmain(){intd,p,n;floatr,m;d=324500;p=3245;r=0.008;m=(log10(p)-log10(p-d*r))/log10(1+r);printf(month=%f\n,m);printf(total=%f\n,m*p);}常用的数据类型介绍字符型常量和字符型变量1)字符型常量ASCII码表中的每个字符都是一个字符常量,在书写时用单引号括起来。例如:‘A’,‘a’。2)转义字符有些字符是不能显示在屏幕上的,我们用转义字符来代替。例如回车,退格等。•转义字符参考:\a:蜂鸣,响铃•\b:回退:向后退一格\f:换页•\n:换行,光标到下行行首\r:回车,光标到本行行首•\t:水平制表\v:垂直制表•\\:反斜杠\':单引号•\“:双引号\ddd:三位八进制•\xhh:二位十六进制\0:空字符(NULL),什么都不做常用的数据类型介绍3)字符型变量字符型变量的定义:char字符变量名列表;如:charc1,c2;字符型变量的赋值:c1=‘a’;c2=‘b’;字符数据在一定条件下可以与整型数据通用:例:#includestdio.hvoidmain(){charc1=97,c2=98;printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}常用的数据类型介绍字符串常量字符串常量表示时用一对双引号括起来。如:“china”,”a”printf(“helloworld”);有如下程序:charc;c=‘a’;正确c=“a”错误字符串的长度=所包含字符个数+1常用的数据类型介绍字符常量首先看一个程序——教材P35页#includestdio.hvoidmain(){doubler=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\ns=%f\nv=%f\n”,c,s,v);}程序存在问题:1)4/3得到整数,改为4.0/3.02)r*r,或r*r*r很麻烦,改用数学函数pow(r,2)或pow(r,3)3)多次使用3.1415926很麻烦,引入符号常量常用的数据类型介绍字符常量•以上程序改为:#includestdio.h#includemath.h#definePI3.1415926voidmain(){doubler=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=%f\ns=%f\nv=%f\n,c,s,v);}常用的数据类型介绍赋值运算符和赋值表达式一、赋值运算符赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。赋值运算符和赋值表达式二、类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。①将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:i为整型变量,执行“i=3.56”的结果是使i的值为3,以整数形式存储在整型变量中.赋值运算符和赋值表达式②将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。如:将23赋给float变量f,即执行f=23,先将23转换成23.00000,再存储在f中。将23赋给double型变量d,即执行d=23,系统将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到变量d中。赋值运算符和赋值表达式③将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。如:floatf;doubled=123.456789e100;f=d;就出现溢出的错误。如果将一个float型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储。赋值运算符和赋值表达式④字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为4个字节,因此将字符数据(8个二进位)放到整型变量存储单元的低8位中。赋值运算符和赋值表达式⑤将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:inti=289;charc=′a′;c=i;i=28900000000000000000000000100100001c=0010000133-!赋值运算符和赋值表达式三、复合的赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。例如:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3以“a+=3”为例来说明,它相当于使a进行一次自加3的操作。即先使a加3,再赋给a。赋值运算符和赋值表达式注意:如果b是包含若干项的表达式,则相当于它有括号。如:①x%=y+3②x=x%(y+3)(不要错写成x=x%y+3)凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符:+=,-=,*=,/=,%=,=,=,&=,∧=,|=赋值运算符和赋值表达式四、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:变量赋值运算符表达式例如:“a=5”是一个赋值表达式赋值运算符和赋值表达式对赋值表达式求解的过程是:①求赋值运算符右侧的“表达式”的值;②赋给赋值运算符左侧的变量。例如:赋值表达式“a=3*5”的值为15,执