资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,*,*,C,语言程序设计,第二章 数据的存储与运算,第,2,章 数据的存储与运算,2.1,数据在计算机中是怎样存储的,2.2,整型数据的运算与分析,2.3,实型数据的运算与分析,2.4,字符型数据的运算,2.5,符号常量,2.6,算术运算符和算术表达式,2.7 C,运算符和,C,表达式,2.8,提高部分,1,2.1,数据在计算机中是怎样存储的,2.1.1,数据在计算机中是以二进制形式存储的,2.1.2,位、字节和地址,2.1.3,不同类型数据的存储方式,P16,2,计算机内部的信息都是用,二进制,表示,计算机存储器是用半导体集成电路构成的,有两种稳定的工作状态:“导”与“截止”,即电脉冲的“有”与“无”,分别用“,1,”,和“,0,”,表示,2.1.1,数据在计算机中是以二进制形式存储的,P16,3,若相邻的,8,个二极管元件中第,1,3,5,7,个元件处于“导通”状态,第,2,4,6,8,个元件处于“截止”状态,用“,10101010”,表示,导通 截止 导通 截止 导通 截止 导通 截止,1 0 1 0 1 0 1 0,2.1.1,数据在计算机中是以二进制形式存储的,P16,4,2.1.1,数据在计算机中是以二进制形式存储的,P16,十进制数,二进制数,0,0,1,1,2,10,3,11,4,100,5,101,十进制数,二进制数,6,110,7,111,8,1000,9,1001,10,1010,5,2.1.2,位、字节和地址,位,(bit),,又称“比特”,。每一个二极管元件称为一个“二进制位”,是,存储信息的最小单位,。它的值是“,1”,或“,0”,字节,(byte),,又称“拜特”,。一般将,8,个“二进制位”组织成一组,称为“字节”。这是人们,最常用的存储单位,P17,6,2001,2002,2003,2004,2005,2006,2.1.2,位、字节和地址,地址,。计算机的存储器包含许多存储单元,操作系统把所有存储单元以字节为单位编号,P17,3,4,5,7,8,9,7,2.1.3,不同类型数据的存储方式,整数的存储方式,一个十进制整数,先转换为二进制形式,如整数,10,,以二进制形式表示是,1010,P18,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,用一字节存放,用两字节存放,负数,按,补码,形式,存放,8,2.1.3,不同类型数据的存储方式,实数的存储形式,对于实数,一律采用指数形式存储,123.456,标准化指数形式,为,0.123456,10,3,P18,+,.12345,+,3,数符,数值部分,指数符号,指数,9,2.1.3,不同类型数据的存储方式,字符的存储方式,对于字符,按,ASCII,代码,存放,A,的,ASCII,代码是,65,(,1000001,),P18,0,1,0,0,0,0,0,1,10,2.2,整型数据的运算与分析,2.2.1,整型数据运算程序举例和分析,2.2.2,整型常量与整型变量,P19,11,2.2.1,整型数据运算程序举例和分析,例,2.1,鸡兔同,笼,。在一个茏子里同时养着一些鸡和兔子,你想了解有多少只鸡和多少只兔,主人对你说:我只告诉你鸡和兔的总头数是,16,和,总脚数是,40,,你能不能自己计算有多少只鸡和多少只兔,?,P19,12,2.2.1,整型数据运算程序举例和分析,解题思路:,设,x,代表鸡的数量,,y,代表兔的数量,总头数为,h,,总脚数为,f,列出下面的方程式:,x+y=h (1),2x+4y=f (2),解方程得到:,P19,13,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,定义整型变量,h,f,x,y,使,h,的值等于,16,使,f,的值等于,40,计算兔的个数,计算鸡的个数,14,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,%d,15,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,4,%,d,%d,cock=%d,rabbit=%d,16,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,4,cock=%d,rabbit=%d,cock=12,rabbit=4,17,2.2.1,整型数据运算程序举例和分析,定义变量的一般形式是:,类型名 变量名,;,例如:,int,h,f,x,y,;,变量都必须在使用前定义,指定,其,类型,赋值:,h=37;f=88;,P19,18,2.2.2,整型常量与整型变量,常量和变量,常量是指在程序运行过程中其值不能改变的量,变量是指在程序运行过程中其值可以改变的量,P22,19,2.2.2,整型常量与整型变量,常量和变量,要注意区别,变量名,和,变量值,P22,16,h,2000,存储单元,变量名,变量地址,变量值,20,2.2.2,整型常量与整型变量,常量和变量,要注意区别变量名和变量值,P22,16,h,2000,执行,h=37;,37,21,2.2.2,整型常量与整型变量,变量名的取名规则,变量名第一个字符必须是字母或下划线,其后字符必须是字母、数字或下划线,P22,合法,:,sum,,,average,_total,Class,day,month,Student_name,,,tan,,,li_ling,不合法,:,Zhang-sun,,,Students,,,,,$123,,,33,,,3D64,22,2.2.2,整型常量与整型变量,变量名的取名规则,变量名第一个字符必须是字母或下划线,其后字符必须是字母、数字或下划线,大小写字母代表不同的字符,一般,程序中的变量名用小写字母表示,变量名的长度不是无限的,变量名尽量简单易记、见名知意,在同一函数中,不同变量不能取相同名,P22,23,2.2.2,整型常量与整型变量,变量必须,“,先定义,后使用,”,根据定义变量时指定的类型,编译系统为变量分配相应的存储单元,凡未被事先定义的,系统不把它认作变量名,保证程序中变量名使用得正确,指定了每一变量属于一个类型,就便于在编译时据此检查在程序中要求对该变量进行的运算是否合法,P22,24,2.2.2,整型常量与整型变量,变量类型相当于建造房屋的图纸,,按照同一套图纸可以建造出许多套外形和结构完全相同的房屋,它们具有相同的特征,类型是抽象的,变量是具体的,图纸相当于一系列的规则和要求,依照它进行施工。但光有图纸是不能住人的,只有建成的房屋才能住人,类型不占存储单元,,不能用来存储数据,而,变量占存储单元,,可以用来存储数据,P22,25,2.2.2,整型常量与整型变量,整型常量的表示形式,除了常用的十进制形式外,还允许使用,八进制,形式和,十六进制,形式表示的数,整型变量的种类,基本整型,类型名为,int,长整型,类型名为,long,int,短整型,类型名为,short,int,P22,26,2.3,实型数据的运算与分析,2.3.1,实型数据的运算举例,2.3.2,实型常量的表示形式,2.3.3,实型变量,P24,27,2.3.1,实型数据的运算举例,例,2.2,分期付款的计算。张先生为购房,向银行贷款,贷款额为,D,元,每月准备还,P,元,月利率为,R,,求需要多少个月才能还清。,P24,m,是还清贷款所需月数,d=324500,,,p=3245,,,r=0.8%,28,2.3.1,实型数据的运算举例,(1)d,和,p,是整数,,r,是一个小数,因此程序中要分别定义整型变量和实型变量。,(2),公式中用到对数,log,,这个对数是以,10,为底的。对数,log,的函数,log10,P24,29,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);,printf(“month,=%,fn”,m,);,printf(“total,=%,fn”,m,*p);,P24,用到,数学函数,时,定义整型变量,d,p,定义,实,型变量,r,m,赋值,求,m,的值,30,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);,printf(“month,=%,fn”,m,);,printf(“total,=%,fn”,m,*p);,P24,输出,m,的值,计算并输出还款数,total=655436.127930,month=201.983404,输出实数时,31,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,型无警告错,32,2.3.2,实型常量的表示形式,实数在计算机语言中常称为浮点数,十进制小数形式,如:,0.123,123.23,0.0,指数形式,如:,123e3,或,123E3,P26,33,2.3.3,实型变量,实型变量的分类,单精度实型变量(,float,型),双精度实型变量(,double,型),长双精度实型变量(,long double,型),P27,34,2.3.3,实型变量,实型变量的分类,实型数据的舍入误差,实型变量是由有限的存储单元组成的,能提供的有效数字总是有限的,在有效位以外的数字将被舍去,会产生一些误差,P27,35,2.3.3,实型变量,实型变量的分类,实型数据的舍入误差,例,2.3,实型数据的舍入误差,P27,#include,void main(),float a;,a=,1234.141,5926;,printf(a=%fn,a);,a=,1234.141,6,02,7,位有效位,36,2.3.3,实型变量,实型变量的分类,实型数据的舍入误差,把实数按双精度数处理,把程序中的实常量处理成双精度型,分配,8,个字节,以提高精度。,P27,a=1234.1415926;,双精度,单精度,编译时有警告,最好:,double,a;,37,2.4,字符型数据的运算,2.4.1,字符数据运算的简单例子,2.4.2,字符常量和字符变量,2.4.3,字符串常量,P29,38,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,);,定义字符变量,39,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,);,用单撇号括起来,输出字符,CHINA,ANIHC,40,2.4.2,字符常量和字符变量,字符常量,字符常量是用单撇号括起来的一个字符,英文字母可以作为字符常量,键盘上的字符都可以作为字符常量,小写字母和大写字母是不同的字符常量,P29,41,2.4.2,字符常量和字符变量,转义字符,转义字符必须以反斜杠,“”,开头,“”,后只能有一个字符,(,或代表字符的,8,进制或,16,进制数,),P29,42,2.4.2,字符常量和字符变量,t,跳到下一个输出区,b,消除前一个已输出的字符,r,将当前的输出位置返回在本行开头,f,将当前的输出位置移到下页的开头,0,常用于字符串中,作为串结束标志,代表一个反斜杠字符“,”,代表一个单撤号字符,”,代表一个双撤号字符,ddd,1,3,位,8,进制数所代表的字符,xhh,1,2,位,16,进制数所代表的字符,P29,43,2.4.2,字符常量和字符变量,字符变量,用来存放字符常量,只能放一个字符,字符变量的定义形式:,char,字符变量列表,;,P29,44,2.4.2,字符常量和字符变量,字符数据与整型数据在一定条件下通用,char c=,a,;,与,char c=,97,;,等价,P29,45,2.4.2,字符常量和字符变量,字符数据与整型数据在一定条件下通用,例,2.5,将两个整数分别赋给两个字符变量,再将字符数据按字符和整数形式输出。,#include,void main(),char c1=,97,c2=,98,;,printf(“%c,%cn”,c1,c2);,printf(“%d,%dn”,c1,c2);,P29,char c1=,a,c2=,b,;,a b,97 98,46,2.4.2,字符常量和字符变量,字符数据与整型数据在一定条件下通用,例,2.5,将两个整数分别赋给两个字符变量,再将字符数据按字符和整数形式输出。,字符,a,的存储(用,ASCII,代码存放),P29,0,1,1,0,0,0,0,1,按,%c,输出:,a,按,%d,输出:,97,47,printf(“%c,%cn”,97+1,a+1);,输出什么?,2.4.2,字符常量和字符变量,字符数据与整型数据在一定条件下通用,例,2.5,将两个整数分别赋给两个字符变量,再将字符数据按字符和整数形式输出。,P29,b b,printf(“%d,%dn”,97+1,a+1);,输出什么?,98,98,48,2.4.2,字符常量和字符变量,字符数据与整型数据在一定条件下通用,例,2.6,将小写字母转换为大写字母。,#include,void main(),char c1=a,c2=b;,c1=c1-,32,;,c2=c2-,32,;,printf(%c,%cn,c1,c2);,P29,a97,A65,b98,B66,c99,C67,规律是?,A,B,49,2.4.3,字符串常量,字符串常量是一对双撇号括起来的字符序列,How do you do.,CHINA,a,都是合法的字符串,P33,50,2.4.3,字符串常量,字符串常量是一对双撇号括起来的字符序列,是字符常量,“,”,是字符串常量,二者的含义是不同的,P33,char c;,c=,a,;,正确,char c;,c=,”,a,”,;,错误,存放字符,a,的存储单元,存放字符串,”a”,的存储单元,a,0,a,51,2.5,符号常量,2.5.1,符号常量,的作用,2.5.2,符号常量的性质和使用方法,P34,52,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;,53,#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,=%fns=%,fnv,=%,fn”,c,s,v,);,c=23.059290,s=42.313797,v=155.291633,有错,4.0/3.0,54,#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.059290,s=42.313797,v=,207.055511,pow(r,2),pow(r,3),#include,55,#include,#include,void main(),double r=3.67,c,s,v;,c=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.059290,s=42.313797,v=207.055511,#define PI 3.1415926,PI,PI,PI,56,#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.059290,s=42.313797,v=207.055511,#define PI 3.1415926,符号常量,57,2.5.2,符号常量的性质和使用方法,#define,不是,C,语句,行末没有分号,#define,是一个,“,预编译命令,”,符号常量,一般,用大写,,,以示,与变量,区别,好处:,含义清楚,在需要改变一个常量时能做到,“,一改全改,”,用符号常量能保护所代表的数据不被破坏,P36,58,2.6,算术运算符和算术表达式,2.6.1,算术运算符,2.6.2,算术表达式,P38,59,2.6.1,算术运算符,P38,1.,基本的算术运算符,:,+,:,加法运算符,-,:,减法运算符,*,:,乘法运算符,/,:,除法运算符,%,:,求余运算符,(,要求,两侧均,为整数。如,19%4,,结果为,3,),60,2.6.1,算术运算符,P38,两个整数相除的结果为整数,如,5/3,的结果值为,舍去小数部分,如果除数或被除数中有一个为负值,舍入方向不固定,。,例如,,-5/3,,有的系统中得到的结果为,-1,,在有的系统中则得到结果为,-2,VC+,采取“向零取整”的方法,如,5/3=1,,,-5/3=-1,,取整后向零靠拢,61,2.6.1,算术运算符,P38,如果参加,+,、,-,、,*,、,/,运算的两个数中有一个数为,float,或,double,型,则结果都是,double,型,因为系统将所有,float,型数据都先转换为,double,型,然后进行运算。这是为了提高运算精度,。,62,2.6.1,算术运算符,P38,2.,自增、自减运算符:,作用是使变量的值增或减,+i,,,-i,:在使用,i,之前,先使,i,的值加(减),1,i+,,,i-,:在使用,i,之后,使,i,的值加(减),1,63,例,j=3;k=+j;,j=3;k=j+;,j=3;,printf(,“,%d,”,+j,);,j=3;,printf(,“,%d,”,j,+);,a=3;b=5;c=(+a)*b;,a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/,/c=20,a=4,/,/c=15,a=4,(1)j=+i;,(2)j=i+;,若,i,的初始值为,3,i=4;,j=4;,i=4;,j=3;,+i,,,-i,先增(减),1,,再使用,i,i+,,,i-,先使用,i,,,再增(减),1,第二章,2.8,算术运算符和算术表达式,64,第二章,2.8,算术运算符和算术表达式,说明:,+-,不能用于常量和表达式,如,5+,(,a+b)+,+-,结合方向:,自右向左,优先级:,+-,-*/%-+-,例,j+k;(j+)+k;,65,分析:,(,1,),+,、,-,、,-,(取负)是同级运算符,结合方向:,自右向左,。,(,2,),-i+,等价于,-,(,i+,),(,3,)对于括号内的自增运算,又要先使用,i,,再使,i,增加,1,。,运算结果:,i,的值为,3,,,j,的值为,-2,。,第二章,2.8,算术运算符和算术表达式,例,:,i=2;j=,-,i+;,printf(,“,%d,”,“,%d,”,i,j);,66,第二章,2.8,算术运算符和算术表达式,例:,main(),int,i=2;,printf(,“,i,=%d,i=%d,i=%dn,”,i,i+,+i);,3-3,输出结果:,i=4,i=3,i=3,67,2.6.2.,算术表达式,P39,用算术运算符和括号将运算对象(也称操作数)连接起来的、符合语法规则的式子,称为算术表达式,运算对象包括常量、变量、函数等,68,2.6.2.,算术表达式,P39,各类数值型数据,间的混合运算,char,和,short,型转换为,int,型,float,型一律转换为,double,型,整型,(,包括,int,short,long,),数据与,double,型数据进行运算,先将整型转换为,double,型,69,2.6.2.,算术表达式,P39,各类数值型数据,间的混合运算,10+a+i*f-d/e,先将,a,转换成整数,97,,运算结果为,107,i,为整型,f,为,float,型,d,为,double,型,e,为,long,型,70,2.6.2.,算术表达式,P39,各类数值型数据,间的混合运算,10+a+i*f-d/e,107,先将,i,与,f,转成,double,型,运算结果为,double,型,i,为整型,f,为,float,型,d,为,double,型,e,为,long,型,71,2.6.2.,算术表达式,P39,各类数值型数据,间的混合运算,10+a+i*f-d/e,107,double,型,先将,107,转换成双精度,型,,结果为,double,型,i,为整型,f,为,float,型,d,为,double,型,e,为,long,型,72,2.6.2.,算术表达式,P39,各类数值型数据,间的混合运算,10+a+i*f-d/e,107,double,型,double,型,转换为,double,型,double,型,最终结果为,double,型,i,为整型,f,为,float,型,d,为,double,型,e,为,long,型,73,2.6.2.,算术表达式,P39,强制类型转换,在表达式中也可以利用,“,强制类型转换,”,运算符将数据转换成所需的类型,(,double)a,(将转换成,double,类型),(,int,)(,x+y,),(将,x+y,的值转换成,int,型),(float)(5%3),(将,5%3,的值转换成,float,型),74,2.6.2.,算术表达式,P39,强制类型转换,强制类型转换的一般形式为,:,(类型名)(表达式),例,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,的值,75,2.6.2.,算术表达式,P39,强制类型转换,强制类型转换的一般形式为,:,(类型名)(表达式),有两种类型转换,系统自动进行的类型转换,强制类型转换,76,2.7 C,运算符和,C,表达式,2.7.1 C,运算符,2.7.2 C,表达式,P41,77,(1),算术运算符,(,+-*/%,),(2),关系运算符,(!),(3),逻辑运算符,(!,|,),(4),位运算符,(,|,),(5),赋值运算符,(及其扩展赋值运算符),(6),条件运算符,(?:),2.7.1 C,运算符,P41,78,(7),逗号运算符,(,,),(8),指针运算符,(,*,),(9),求字节数运算符,(,sizeof,),(10),强制类型转换运算符,(,(,类型,),),(11),成员运算符,(,.-,),(12),下标运算符,(,),(13),其他,(如函数调用运算符(),2.7.1 C,运算符,P41,79,箅术表达式,。如,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 C,表达式,P42,80,2.8,提高部分,2.8.1,求补码的方法,2.8.2,整型常量的表示形式,2.8.3,整型变量的类型,2.8.4,整型常量的类型,2.8.5,运算符的优先级与结合性,P42,81,2.8.1,求补码的方法,计算机不论对正数和负数都按,“,补码,”,形式存放到存储单元,对于正数来说,补码就是该数的,“,原码,”(,该数的二进制形式,),负数的补码不是它的原码,P42,82,求,-1,的,补码的方法是:,1,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,求补码的方法,P42,83,求,一个负数的,补码的方法是:,取该数,(,不考虑数的符号,),的二进制形式,它就是原码,对该原码逐位,“,取反,”(,逐位把,0,变,1,,把,1,变,0),,得到其,“,反码,”,将得到的反码加,1,2.8.1,求补码的方法,P42,84,求,-10,的,补码的方法是,?,1,0,0,0,1,0,1,0,原码,1,1,1,1,0,1,0,1,诸位取反,反码,1,1,1,1,0,1,1,0,反码加,1,补码,2.8.1,求补码的方法,P42,85,2.8.2,整型常量的表示形式,在语言中,整常数可用,3,种形式表示,:,10,进制整数,如,123,,,-456,8,进制整数,特点是逢,8,进,1,。在程序中凡以,0,开头的数都认作,8,进制数,16,进制整数。特点是逢,16,进,1,。用,0,9,、,a,f,分别代替,0,15,。在程序中凡以,0 x,开头的数都认,作,16,进制数,P43,a=83;/*10,进制数,*/,a=0123;/*8,进制数,*/,a=0 x53;/*16,进制数,*/,86,可以定义和使用以下,6,种整型变量:,有符号基本整型,signed,int,无符号基本整型,unsigned,int,有符号短整型,signed short,int,无符号短整型,unsigned short,int,有符号长整型,signed long ,int,无符号长整型,unsigned long ,int,2.8.3,整型变量的类型,P44,87,在计算机语言中,常量是有类型的,这也是计算机的特点,数据是要存储的,不同类型的数据所分配的字节和存储方式是不同的,整型变量有类型,,因此,整型常量也应该有类型,才能在赋值时匹配,根据常量的大小、数后面加的,字母,l,或,L,、,u,或,U,判断其类型,2.8.4,整型常量的类型,P45,88,先按运算符的优先级别高低次序执行,如果优先级别相同,则按规定的,“,结合方向,”,处理,2.8.5,运算符的优先级与结合性,P45,89,1.,赋值运算符,简单赋值运算符,符号:,=,格式:,变量标识符,=,表达式,作用:将一个数据(常量或表达式)赋给一个,变量,类型转换,:,在赋值时,将赋值符右边值的类型转换成与其左边变量类型一致的类型。,3.4,赋值运算符和赋值表达式,(1),实型,整型(字符型),取整数部分,去掉小数部分,实型,(2),整型、字符型,补足有效位,例:,float f=23;23.00000,(,7,位),double f=A;65.00 000 000 000 000,(,16,位),a=b;,(a+b)=c,90,复合赋值运算符,种类,:,+=-=*=/=%=,=,&=|=,共,10,个:由赋值运算符与算术、位移、位逻辑运算,符组成,含义:,exp1 op=exp2,exp1=exp1 op exp2,x%=3,相当于,x=x%3,复合运算符是一个运算符,但功能上,是两个运算符功能的组合。,a*=b+c,相当于,a=a*,(b+c),a=2;a+=a*=a;,例:,a+=b,相当于,a=a+b,91,2.,赋值表达式,由,赋值运算符将一个变量和一个表达式连接起来的式子。,第二章,2.9,赋值运算符和赋值表达式,它的一般形式为:,92,说明,:,结合方向:,自右向左,优先级,:,14,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换,规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例,3=x-2*y;,a+b=3;,例,float f;,int i;,i=10;,f=i;,则,f=10.0,例,int i;,i=2.56;/,结果,i=2;,例,:a=b=c=5,a=(b=5),a=5+(c=6),a=(b=4)+(c=6),a=(b=10)/(c=2),/,表达式值为5,,a,b,c,值为5,/b=5;a=5,/,表达式值11,,c=6,a=11,/,表达式值10,,a=10,b=4,c=6,/,表达式值5,,a=5,b=10,c=2,93,说明,:,结合方向:,自右向左,优先级,:,14,左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换,规则,:,使赋值号右边表达式值,自动,转换成其左边变量的类型,例,:,int,a=2;,a%=4-1;,a+=a*=a-=a*=3;,例:,a=12;,a+=a-=a*a,/a=-264,等价于,a=a+(a=a-(a*a),/a=0,等价于,a=a+(a=a*(a=a-(a=a*3),例:,a=12;,a+=a-=a*=a,94,2.10,逗号运算符和逗号表达式,形式,:,逗号表达式,1,,逗号表达式,2,,,,逗号表达式,n,求值规则,:,从左至右依次计算各表达式的值,优先级:,最低,结合性:,自左至右,表达式的值:,最后一个表达式的值(即表达式,n,的值),第二章,2.10,逗号运算符和逗号表达式,用途:,常用于循环,for,语句中,95,例,:,a b y,逗号表达式,y=a=4,b=5,a+b;4 5 4 9,y=(a=4,b=5,a+b);4 5 9 9,y=(a=4,b=5),a+b;4 5 5 9,y=a=(4,b=5),a+b;5 5 5 10,第二章,2.9,赋值运算符和赋值表达式,96,第二章,2.9,赋值运算符和赋值表达式,练习:,a=3*5,a*4,a=3*5,a*4,a+5,练习:,x=(a=3,6*3),x=a=3,6*a,练习:,a=1;b=2;c=3;,printf(“%d,%d,%d”,a,b,c,);,printf(“%d,%d,%d”,(a,b,c),b,c,);,/a=15,表达式值60,/a=15,表达式值20,/,赋值表达式,表达式值18,,x=18,/,逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,97,例,:,#include,main(),int x,y=7;,float z=4;,x=(y=y+6,y/z);,printf(x,=%dn,x);,运行结果:,x=3,第二章,2.10,逗号运算符和逗号表达式,98,注意,:,C,语言常用逗号作为分隔符,例如,:,int a=3,b=4,c=5;,printf(,%d,%d,%d,a,b,c,);,printf(%d,%d,%d,a,(a,b,c),c,);,第二章,2.10,逗号运算符和逗号表达式,99,第二章 小结,第二章 小结,1,、算术运算符以及算术表达式,2,、赋值运算符以及赋值表达式,3,、逗号运算符以及逗号表达式,100,1.,以下结果为整数的表达式(设有,int,i,;,char c,;,float f;,)(),A.i,f B.i*c C.c+f D.i+c+f,2.,设,n,10,,,i,4,,,则赋值运算,n,i,1,执行后,,n,的值是()。,A.0 B.3 C.2 D.1,3.,求表达式的值:,1+2/3+4%5+(8,9),4.,若给出说明,int,i=3,j=5;,确定下面表达式的值及执行后,i,和,j,的值:,(,1,)(,i/2,),+4,(,2)(j%3)*i,(,3,)(,i+,),-(-j),(,4,),j=(i+=2),习题:,101,5.,设,int,j=12;,请问执行,j+=j-=j*j;,后,j,的值实是多少?,j,的值是(,-264,),6.,设,int,i=2,j=3,k=4,a=4,b=5,c=3;,请问执行表达式,(a=i,k)&(c,=,i,j,k,),后,,a,b,c,的值分别是多少?,a,b,c,的值分别是,1,0,2,102,7.#include“,stdio.h,”,main(),int,i,j,k,q,;,i=9;,j=10;,k=i+;,q=+j;,printf(“k,=%,d,q,=%,dn”,k,q,);,K=9,q=11,103,8.,修改下列程序,使其能够正确运行。,#include,stdio.h,main(),integer I;,long j;,printf(“Enter,an integer:);,scanf(“%d”,&i,);,j=I*I;,printf(“I,=%d j=%,dn,j);,104,正确程序入下:,#include,“,stdio.h,”,main(),int,I;,long j;,printf(“Enter,an integer:,”,);,scanf(“%d”,&,I,);,j=I*I;,printf(“I,=%d j=%,dn,”,I,j,);,105,上机作业:,1,、,P41 2.7,2,、编写程序输入三个整数,求它们的平均值并输出。,106,求平均值方法一,:,main(),int,a,b,c,sum,;,printf(“Enter,three integer:”);,scanf(“%d,%d,%d”,&a,&b,&c,);,sum=(a+b+c)/3;,printf(“aver,=%,dn”,sum,);,107,求平均值方法二,:,main(),int,a,sum,;,printf(“Enter,three integer:”);,scanf(“%d”,&a,);,sum=,sum+a,;,scanf(“%d”,&a,);,sum=,sum+a,;,scanf(“%d”,&a,);,sum=,sum+a,;,pr
展开阅读全文