收藏 分销(赏)

谭浩强C语言全书word版.ppt

上传人:精**** 文档编号:12293588 上传时间:2025-10-07 格式:PPT 页数:116 大小:311.50KB 下载积分:20 金币
下载 相关 举报
谭浩强C语言全书word版.ppt_第1页
第1页 / 共116页
谭浩强C语言全书word版.ppt_第2页
第2页 / 共116页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,谭浩强C语言全书word版,数据与类型,一个简单,程序的功能,是,接收输入数据,、用某种方式,处理数据,,产生特定的数据作为,结果输出,。,C语言把程序处理的,数据,分成一些集合。属于同一集合(类型)的数据具有相同的,性质,:,取值范围+所进行的操作。,C语言能够用,不同方法,处理,不同的数据类型,。,例:,计算银行存款利息、按字母表排列名单。,C的,基本类型,包括,字符型、整数类型、实数类型、枚举型,。,程序中处理的,每个数据,都属于某个基本数据类型,基本类型,都有固定的,表示方式,,并确定了可能表示的,数据范围,及所能,进行的操作(运算),C规定了这些类型的名字(类型名)。,2.1 数据类型,程序中,要对各种各样的,数据进行描述和操作,,,用到的数据都必须指明其类型,。,数据类型的作用,:,指出了应为数据分配的,存储空间的大小,规定了数据所能,进行的操作,数据类型,基本类型,构造类型,整型,(,int,),实型,字符型(,char,),枚举,(,enum,),单精度型(,float,),双精度型(,double,),数组,结构型(,struct,),联合体(,union,),数据与类型,空类型(,void,),指针,照字面意义显示它们的数值。,例:2、3.6、-8.2和”Hello World!”,直接写在程序里的数据,在程序运行过程中其,值不变的量叫做常量,。,可分为整型常量、实型常量(浮点常量)、字符常量等(,C规定了各种常量的书写形式,)。,2.3.1 整型常量,整型常量,就是整常数。,整型常量分为三类,(,差别:,是每个类型使用的存储单元的数量、取值范围不同),基本型 int,(占32bit的内存单元):,-2,31,2,31,-1,表示:123 304 25278,2.3常量(字面量、常数),0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,长整型 long int,(占用32位的内存单元):-21474836482147483647,表示:123456789,l,123,L,VC+中,基本型和长整型,占用字节数一样。,无符号型,(没有一位的符号位),unsigned int:,取值范围:,04 294 967 295,,即,02,32,-1,unsiged long:,表示:123,u,123456789,ul,2.3常量(字面量、常数),1整型常量的3种表示形式,在C语言中,使用的整常数有,八进制、十六进制和十进制三种。,例如:,十进制整数:2001、-18、0,八进制整数:,0,2001、-017,十六进制整数:,0X,2001、,0X,AB12,2.3常量(字面量、常数),2.2 数与字符在计算机内存中的表示,2.2.1 机器数和真值,1机器数,在计算机中,只有“0”和“1”两种数码。数的正、负符号,也必须使用“0”和“1”。,用,“0”表示正,,,“1”表示负,,其余位仍然表示数值。如果一个整数在内存中占用16位,整数+10的二进制形式为1010,其在内存中的存储情况如图所示:,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,2.2 数与字符在计算机内存中的表示,例如16位无符号数的最大值是:(1111111111111111),2,,也就是65535。,2.2.2 原码、反码和补码,1原码,整数,X,的原码是指:其,数符位0表示正,1表示负,,其,数值部分是,X,的绝对值的二进制表示,。,例如:,+1,原,=,0,0000001,+127,原,=,0,1111111,-1,原,=,1,0000001,-127,原,=,1,1111111,2.2 数与字符在计算机内存中的表示,2反码,整数,X,的反码是指:,对于正数,,,与原码相同,;,对于负数,,,数符位为1,,其,数值部分是,X,的绝对值取反,,即,1变0,0变1,。,例如:,+1反=,0,0000001,+127反=,0,1111111,-1反=,1,1111110,-127反=,1,0000000,2.2 数与字符在计算机内存中的表示,3补码,整数,X,的补码是指:对于,正数,,,与原码相同,;对于,负数,,,数符位为 1,,其,数值部分,是对应,的,反码加1,。,例如:,+1补=,0,0000001,+127补=,0,1111111,-1补=,1,1111111,-127补=,1,0000001,2.2 数与字符在计算机内存中的表示,2真值,带符号位的机器数,对应的数值称为机器数的真值。,【例2.4】,写出带符号位的机器数(00100001),2,和(10100011),2,的真值。,(,0,0100001)2=+33,(,1,0100011)2=-35,3无符号数,当计算机字长的,所有二进位都用来表示数值,时,称为无符号数。,2.2 数与字符在计算机内存中的表示,2.2.4 ASCII码,在计算机中,字符的使用占有很大的比重,,字符包括各种文字、数字、符号和控制符。,在计算机内部,它们也都要,用二进制来表示,。对,字符的编码方法,很多,使用最普遍的是美国标准信息交换码(American Standard Code for Information Interchange),简称,ASCII码,,见附录A。,实型常量也称为(浮点型常量、实数或者浮点数)。,实型常量的分类(差别:,每个类型使用的存储单元不同,取值范围不同,),单精度,实型数(float,占32位):10,-38,10,38,双精度,实型数(double,占64位):10,-308,10,308,单精度,实型数的,有效数字在67位,双精度,为,1516位,.取值范围见课本P26页),实型常量的表示:,C语言将实型常量作为双精度处理:9.234,单精度实数:9.234,f,2.3.1 实型常量,实数只采用十进制,有以下两种形式:,十进制小数形式,:由数码0 9和小数点组成。,例如:0.0 .25 5.789 0.13 300.267.8230,指数形式:,2002.168,e,0,2.002168,e,3,注意:,e前面不能没有数字;,e后面的数字必须为整数,也不能加圆括号。,如:1E(-3)、E-5、1e2.1都是错误的。,2.3.1 实型常量,2.3.3,字符常量,字符类型,的数据主要用于程序的,输入和输出,。,类型名为:,char,字符常量的表示形式,:用,单引号,括起来的一个字符。,例如:,a b =+?3,字符常量的特点,:,字符常量,只能用单引号括起来,,不能用双引号或其它括号。,字符常量,只能是单个字符,,不能是字符串。,特殊规定:字符常量的,值是一个整数,(,字符常量的值就是该,字符的,ASCII,码值,见,P27),例如:,48+,0,2.3.3 字符常量,字符型数据与整型数据,的关系,【例2.5】写出下列程序的运行结果。,#include,void main(),int i,j;,i=65;j=i+1;,printf(%c,%cn,i,j);,/*以字符形式输出*/,printf(%d,%dn,i,j);,/*以整数形式输出*/,运行结果如下:,A,B,65,66,2.3.3 字符常量,数字字符和数不同:例如:,1,和,1,字符类型的数据也不是标识符:例如:,x,和,x,转义字符:,一种,特殊的字符常量,。,以反斜线“,”,开头,后跟一个或几个字符,,用来,表示那些无法写出的字符,。,(,见,P27),换行符,n,双引号,”,单引号,反斜号,044,和,x40,表示字符,$,和,,均是转义字符,,反斜线字符,起着特殊的作用:,不同于字符原有的意义,,故称,“转义”字符。,字符串常量:由一对,双引号,括起的字符序列。,例如:,Computer,及,program-1,。,程序,主要用于输入、输出,。,例如:printf(,World,hello!,n,);,字符串常量与字符常量,之间主要有以下区别:,引用符号,不同:字符常量由单引号括起来,字符串常量由双引号括起来。,容量不同,:字符常量只能是单个字符,字符串常量则可以含一个或多个字符。,字符串结束的标志,:,字符,0(,ASCII,码为,0),。,例如,字符串,CHINA,的长度是,6,个字符。,2.3.4 字符串常量,2.3.4 字符串常量,A 0,A,内存中实际存放的是这些字符的ASCII码,例如:字符,A,的形式和字符串,”A”,的形式,2.3.5 符号常量,补例1(bch2_11.c):,求半径为2cm的圆的周长和面积,#include,main(),printf(,circle=,%f,n area=,%f,n,2*,3.14,*2,3.14,*2*2,);,问题:要求提高3.14精度,解决方法:用一个,标识符(符号名),来表示的常量称为符号常量。,符号常量在使用之前必须先定义,,其一般形式,为:,#define,常量名,常量值,(注意:,常量名用大写,),例如:,#define,PI,3.1415926,2.3.5 符号常量,修改后的程序清单(bch2_12.c),#include,#define,PI,3.1415926,main(),printf(,circle=,%f,n area=,%f,n,2*,PI,*2,PI,*2*2,);,编译时将main函数体中的所有符号常量,PI,全部用3.1415926代替,作用是便于程序阅读和修改。,使用符号常量的优点:,一个常量改变时,能做到“,一改全改,”,2.3.5 符号常量,常量值可以是整型、实型及字符型。注意该语句后,不使用分号,。,一个,#define,语句只能定义一个符号常量。一经定义,以后在程序中所有出现该,常量名,的地方均代之以该,常量值,。这样的好处是:如果要修改程序中的某个常量时,只要修改其定义语句即。,注意符号常量所代表的值在程序运行中不能再改变,赋值语句不能对它重新赋值。例:PI=5.6,习惯上符号常量的标识符用,大写字母,,变量标识符用小写字母,以示区别。,2.4 变量,变量:在程序运行过程中其,值可以改变的量,。,2.4.1 整型变量,2.4.2 实型变量,2.4.3 字符变量,退出,2.4 变量,上节中的例题,只能计算半径为2cm的圆的周长和面积,如果要,计算,不同半径,的圆的周长和面积,则需修改程序。如何使,程序具有通用性,?(即:对不同的数据实现同样的计算),变量的含义:,计算机程序中处理的,所有数据,,都必须,存储,在计算机,内存,单元中,并应能从内存中,取回,。每个内存都有惟一的地址,,数据是,按地址,存取。,45,12,1652,2548,存储器地址,2.4 变量,变量名,是,以一个名字,代表,一个内存单元地址,,从而实现,按名称存取数据,。对程序编译时,由编译系统给每一个,变量名,分配对应的,内存地址,。,45,12,1652,2548,存储单元地址,num1,num2,57,total,3000,num1=45;,/*将45存储到名称为num1的内存单元中*/,num2=12;total=num1+num2;,变量名:,2.4 变量,对变量的基本操作有两个:,将,数据存入,变量中(,赋值,),取得变量,里当时保存的,值,(,取值,),变量具有,保持值,的性质,即:如果给某变量赋了一个值,此后取该值时,每次得到的总是这个值,,直到再次给它赋值,。,由于赋值操作,在程序执行过程中,,一个变量在各个时刻所保存的值可能不同,。,2.4 变量,变量的三要素:,数据类型、存储值、在存储器中的位置(变量名表示)。,每种类型的变量,只能保存一种固定类型的值,。可分为,整型变量、实型变量、字符变量,、数组变量、指针变量、结构变量、联合变量等。,2.4 变量,变量的命名,在程序中,,常量,是可以不经说明而直接引用的,而,变量则必须先定义后使用。,每一个变量都应该有一个名字,命名规则为(见名知义):,1、以字母或下划线开始,只能跟字母、数字和下划线。,2、不能是关键字。,变量的定义形式:,数据类型 变量名字,int,k,n,sum;,/*只能保存int值*/,double,x,y,z;,/*只能保存double值*/,k,n,sum,2.4 变量,变量定义的语句格式:,类型符,变量名1,变量名2,,变量定义的意义:,系统给每一个变量名,分配一个内存地址,;,编译时根据变量的类型分配一定的内存单元;,根据变量的类型,检查,该变量所进行的,运算是否合法,例:,int,num1,num2,total,;,1652,2548,存储器地址,num1,num2,total,3000,补例:dch2_13.c显示,变量地址,与所占,存储器字节数,。,#include,int main(),int,num=22;,short int,num1=10;,printf(“num=,%d,num的地址是:,%d,n,.,num,&,num);,printf(n计算机使用,%d,字节存储n,sizeof,(int);,printf(num1=,%d,num1的地址是:,%d,n,num1,&,num1);,printf(n计算机使用,%d,字节存储n,sizeof,(short int);,return 0;,2.4.2 整型变量,在书写变量声明时,应注意以下几点:,允许在一个类型说明符后,说明多个相同类型的变量,。各变量名之间用,逗号间隔,。类型说明符与变量名之间至少用一个,空格间隔,。,最后一个变量名之后必须,以,分号,;,结尾,。,变量说明必须放在变量使用之前,,通常放,在函数体的开头部分。,可在说明变类型的同时给变量,赋初值,。,格式为:,类型说明符,变量名,1=,初值,1,,变量名,2=,初值,2,,,.;,2.4.2 整型变量,2.4.1 整型变量,整型变量:,只能保存整型值的变量。,整型变量的分类(按照分配的内存单元),整型变量可分为以下几类:,基本型(,类型说明符为,int),在内存中占2个字节(C+中占4个字节),其取值为基本整常数(-3276832767)。,短整型,(short int),:(占2个字节),长整型(,类型说明符为,long int或long),在内存中占4个字节,其取值为长整常数(-2,31,2,31,-1)。,无符号型(,类型说明符为,unsigned,)。,无符号型又可,与上述三种类型匹配,而构成:无符号基本型、无符号短整型及无符号长整型。,(1),无符号基本型,(065535),类型说明符为,unsigned int或unsigned,。,(2),无符号长整型,(02,32,-1):,类型说明符为,unsigned long,(3),无符号长整型,(065535),类型说明符为,unsigned short,2.4.1 整型变量,整型变量的定义,变量说明的一般形式为:,类型说明符 变量名1,变量名2,.;,例如:,int,a,b,c;,/*a,b,c为整型变量)*/,long,x,y;,/*x,y为长整型变量*/,unsigned,p,q;,/*p,q为无符号整型变量*/,2.4.2 整型变量,例如:,inti=10;,int limit=MAXLINE+1;,/*MAXLINE是符号常量*/,int j,k,=10;,int lower=0,upper=100,step=20;,例2.82.9(p21),整型变量赋值的注意事项:,给变量赋值时,一定要注意它的,取值范围。,P32,2.4.2 整型变量,1、printf函数,printf()函数是,有格式的输出函数,,能够,对任意类型,的内部数值,按照指定格式的字符形式显示,。,printf函数调用的一般形式:,printf(“,格式控制字符串,输出项序列,),功能:输出程序运行的结果(任意类型的数据),例:printf(,“,%f,%f,2*,PI,*2,PI,*2*2,);,说明:,printf函数是一个标准库函数,在使用时有两个参数:,格式控制字符串,及,输出项序列,:,格式控制字符串包括两部分:按照,原样不动输出的普通字符,和用于,格式转化说明符,。,2.6.2 带格式数据的输入与输出,格式转化说明符:,以%开始并用一个转换字符结束,,决定输出项的类型及位置;,格式转化说明符,见表2-8,%c 显示一个字符,%d 显示一个整数,%f显示一个实数,除格式转化说明符以外,的字符原样输出,printf(“,格式控制字符串,输出项序列,),例:,printf(,circle=,%f,n area=,%f,n,2*PI*2,PI*2*2,);,若,格式控制串里没有出现,%,,则printf语句里无输出项序列,,输出的内容,为格式控制字符串本身。,printf,(,World,hello!n,);,2.6.2 有格式的输出,2.4 变量,补例1(bch2_1.c):,求圆的周长和面积,#include,#define PI,3.1416f,main(),float r,c,area;,/*定义r、c、area变量*/,printf(r=);,r=2.;,/*给r赋值*/,c=2*PI*r;,/*给变量c赋值*/,area=PI*r*r;,/*给变量area赋值*/,printf(,circle=,%f,n,area=,%f,n,c,area,);,2,r,c,area,c=2*PI*r;,area=PI*r*r;,例2.7:写出下列程序的运行结果,main(),int,a=1;,int,b=-1;,unsigned,c,d;,c=a;,d=b;,/*d是无符号型,符号位作为数值*/,printf,(%d,%d,%d,%u,%d,%u,n,a,b,c,c,d,d);,2.4.2 整型变量,运行结果:,1,-1,1,1,-1,4294967295,补充:整型数在内存中的存放形式,数据在内存中是以二进制形式存放的。数的正、负符号,也必须使用“0”和“1”。,用,“0”表示正,,,“1”表示负,,其余位仍然表示数值。,如果定义一个整数变量i:,int i;,i=10;,如果整数在内存中占用16位,整数+10的二进制形式为1010,其在内存中的存储情况如图所示(,原码,):,实际上,数值是以,补码,的形式表示的。,正整数的补码,和该数的原码相同。,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,补充:整型数在内存中的存放形式,负数的补码:将该数的绝对值的二进制形式,按位取反再加1.,例如:-10的补码是:,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,10的原码,取反,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,再加1,即-10的补码,例2.8:写出下列程序的运行结果,main(),short int a,b;,unsigned short i,j;,/*unsigned long i,j;*/,a=32767;,b=a+1;,/*b=32768产生溢出*/,i=65535;,j=i+1;,/*j=65536产生溢出*/,printf(a=,%d,b=,%d,i=,%u,j=,%u,n,a,b,i,j);,注意:,不同种类的整型变量的取值范围!(见课本P32页),2.4.2 整型变量(P30),运行结果:,32767,-32768,65535,0,b,j产生溢出错。,例2.8:写出下列程序的运行结果,main(),int a,c;,unsinged b;,a=30;,b=20;,c=a+b;,/*不同种类的整型变量可以进行运算*/,printf(a+b=%d,c);,运行结果:,a+b=50,2.4.2 整型变量,2.4.2 实型变量,分类和大小,(见课本P32页),实型变量就是,只能保存实数值,的变量。,分为,单,精度实数、,双,精度实数和,长双精度,实型三种。,其说明格式分别为(注意取值范围,见表2-4):,单精度:float,变量名1,变量名2,.;,双精度:double,变量名1,变量名2,.;,长双精度:long double,变量名1,变量名2,.;,实型变量的定义与整型变量一致,例2.102.11,补例:dch2_11.c不同类型的变量所占的字节数,2.4.2 实型变量,补例,(ch2_8b.c),#include,main(),float a;,a=3.141592612f;,printf(a=%fn,a);,运行结果为:,a=3.141593,分析:a是float类型,有效数字为67位。,例2.9(ch2_10.c):写出下列程序的运行结果,main(),float,x1,x2,x3;,double,y1,y2;,x1,=1.234567899e8,f,;,/*单精度:有效数字为67位*/,x2,=1234567.899e2,f,;,/*单精度:有效数字为67位*/,x3=x1+1;,/*单精度:有效数字为67位*/,printf,(,“,x1=,%f,nx2=,%f,nx3=,%f,n,x1,x2,x3,);,y1,=1.234567899e8,;,/,*,教材错,,双精度:有效数字为1516位*/,y2=y1+1;,/*双精度:有效数字为1516位*/,printf,(,y1=,%fny2=%fn,y1,y2);,2.4.2 实型变量,运行结果:,x1=1234567,92.000000,x2=1234567,92.000000,x3=1234567,92.000000,y1=123456789.9,00000,y2=123456790.9,00000,问题:,x1与y1相等,但x3与y2为何不同?,例2.10(ch2_11.c):写出下列程序的运行结果,#include,void main(),float x1,x2,x3,x4;,double y1,z1,z2,z3;,x1=1234.567899,f,;,x2=99876.54321,f,;,x3=x1*x2;,x4,=1234.567899,f,*99876.54321,f,;,printf(,x3=,%f,nx4=,%f,n,x3,x4,);,y1,=1234.567899*99876.54321;,printf(,y1=,%f,n,y1,);,z1=1234.567899;,z2=99876.54321;,z3=z1*z2;,printf(,z3=,%f,n,z3);,2.4.2 实型变量,X4与y1、z3的类型不同,则精度不同。,2.4.3 字符型变量,字符变量:,用来存放字符常量。只能保存,单个字符,。,说明格式为:,char,变量名1,变量名2,.;,例如:,char,a,b;,字符变量的值,是该变量所代表的,ASCII码,例如:对字符变量a,b赋予x和y值:,a=x;,b=y;,实际上是在a,b两个单元内存放字符x、y的ASCII码,a,b,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,1,所以也可以把字符型变量,看成是整型量,。C语言允许,对整型,变量赋以,字符值,,也允许对,字符,变量赋以,整型值。,以下两个语句的意义相同:,char ch,=65,/*65是字符A的ASCII码*/,char ch,=A,在,输出时,,允许把,字符变量,按,整型量,输出,也允许把,整型,量按,字符量,输出。整型变量为二字节,字符变量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。,【例2.12】(见课本),【例2.13】(见课本),【例2.14】(见课本),2.4.3 字符变量,字符型数据赋给整型变量时,字符只占一个字节,整型变量为2个字节,,将字符数据8位放到整型变量低8位中。,2.4.2 整型变量,例2.11(ch2_12.c):写出下列程序的运行结果,#include,void main(),char,c1,c2;,c1=A;,/*A*/,c2=c1+1;,/*B*/,printf(,%,c,%c,n,c1,c2,);,/*以字符形式输出*/,printf(,%d,%d,n,c1,c2,);,/*以整数形式输出*/,2.4.3 字符变量,运行结果:,A,B,65,66,例2.5:写出下列程序的运行结果,main(),int,i,j;,i=65;,j=i+1;,/*j=66*/,printf,(%c,%cn,i,j);,/*以字符形式输出*/,printf,(%d,%dn,i,j);,/*以整数形式输出*/,2.3.3 字符常量,例2.12(ch2_13.c):写出下列程序的运行结果,#include,main(),int,i;,char,c;,c=0 x41;,i=B;,printf,(,%c,%d,n,c,i,),;,/*c以字符形式输出,i以数值形式输出*/,2.4.3 字符变量,运行结果:,A,66,2.5 常用运算符和表达式,2.5.1 算术运算符,2.5.2 自增自减运算符,2.5.3 表达式,2.5.4 逻辑运算,2.5.5 条件运算符和条件表达式,退出,运算符的种类(P35),C程序里,描述计算的最基本结构是表达式,表达式,由被运算的对象,和,表示运算的特殊符号,,按照一定的规则构成。,1.算术运算符,用于各类,数值运算,,包括,加(+)、减(-)、乘(*)、除(/)、求余%(,或称模运算)。它们是,双目运算符,,使用时需要,两个运算量,参与运算。,2.关系运算符,用于,比较运算,。包括大于()、小于(=)、小于等于()六种。,6.赋值运算符,用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。,运算符的种类,7.条件运算符,这是一个三目运算符,用于条件求值(?:)。,8.逗号运算符,用于把若干表达式组合成一个表达式(,)。,9.指针运算符,用于取内容(*)和取地址(&)二种运算。,10.求字节数运算符,用于计算数据类型所占的字节数(sizeof)。,11.特殊运算符,有括号(),下标等。,运算符的种类,2.5.1 算术运算符,1.加法运算符“+”,加法运算符为,双目运算符,,即,有两个运算对象,参与运算。如x+y,5+6等。,2.减法运算符“-”,作为,减法运算符,时为,双目运算符,,如x-y,6-5等。,作为,负值运算符,时为,单目运算,,如-y,-8等。,3.乘法运算符“*”,双目运算,如x*y,5*6等。,4.除法运算符“/”,除法运算符,与参与运算量的数据类型,有关。具体地说,分为以下两类:,其一:,参与,运算量均为整型,时,,结果也为整型,,舍去小数。(例:7/4结果为1,17/3结果为5),其二:,如果,运算量中有一个是实型,,则,结果为双精度实型。,(例4.0/2,结果为2.0),应该特别,注意运算的规则,,按原来的数学运算规则去推断,可能出现一些意想不到的错误结果。,2.5.1 算术运算符,5.求余运算符(模运算符)“%”,求余数,:参与运算的量必须均为,整型,。求余运算的结果的,符号与被除数相同,,其,值,等于,两数相除后的,余数,。,对于求余运算,应该从其结果的,符号和值,两方面来理解。,例:24%2=017%3=215%4=3,15%(-7)=1(-15)%7=-1,2.5.1 算术运算符,6.不同数值类型间的混合运算(P40),整型、单精度型、双精度型,等不同数值类型的数据可以进行混合运算。因为字符型数据可以看作整型,,故整型、实型(包括单精度型与双精度型)及字符型之间,可进行混合运算。,但是,在运算时,不同类型数据,必须转换为同一类型数据,。其转换规律是:自动转换(由系统自动进行,无须干预),,就高不就低,(把低级类型转换为高级类型,再进行运算)。转换等级(P38 图2-9)如下:,低级 高级,字符型 整型 单精度型 双精度型,2.5.1 算术运算符,例如:2+3*,4.5,式中2、3被转换为double类型的值,得到的结果为double类型,2、算术表达式,算术表达式:由,算术运算符(,和,括号),将,运算对象,连接起来的式子。,运算对象,包括:常量、变量、函数等。,例如:x,*,y,/,z,+,2002.168,-,15,%,(,-,7),+,A,优先级:,先*、/、%,再+、-,同一优先级的运算符“自左至右”“左结合”。,例见课本P39页.,2.5.1 算术运算符,2.5.3 强制类型转换运算符,依据表达式的,运算结果,可以把它分为整型、实型及字符型等。,根据编程的要求(运算符要求、函数调用),也可以实行强制转换。,强制类型转换格式为:,(类型名)(表达式),功能:,使用此格式可以把,表达式的值,强制转换为(类型名)所,规定的类型,,,(类型名)可以:char,int,float,double等。,【例】,(,(int)(x+y),),%3,注意:n和x的类型并未改变!,补例BCH2_2.C:,#include,main(),float,x;,int,i;,x=3.6f;,i=(int)x;,/*将单精度型转换为整型*/,printf(,x=,%f,i=,%d,n,x,i,);,运行结果:,x=3.600000,i=3,2.5.3 强制类型转换运算符,例:将复杂的表达式写成C语言表达式:,标准数学函数的使用方法将在,附录C,1/,(1+1/x),sqrt,(,10+,sqrt,(,y,),(,log10,(,x,),-,log,(,y,),)/4,fabs(,y,),/,(,2*x+4*,pow(,y,x,),),2.5.1 算术运算符,注意:表达式的结果不能超出类型的最大取值范围(溢出),简单赋值,,其一般形式为:,变量,=表达式,功能:,计算表达式的值(,数据,)赋予左边的变量。,注意:赋值运算符,“=”与代数中的等号的含义不同。“=”右边的表达式首先被计算,必须把变量直接列在等号的左边。,例:length=25,width=17.5,/*width被赋值17.5*/,赋值表达式:,由“=”连接的式子称为,赋值表达式,。,赋值,表达式的值,就是被赋值的,变量的值,。,例:printf(“,z=,%dn”,z=2+5);完成赋值、输出双重功能,2.5.2 赋值运算符和赋值表达式,例如:,z=,x+y,(x、y必须先赋值)w=,sin(a)+sin(b),问题:x+y=z对吗?,一个变量 一次只能存储一个数值。,例:length=3.7,length=6.28,对变量进行新的赋值,则新值将覆盖原有的值。,2.5.2 赋值运算符和赋值表达式,d e f,未赋值前,0,0,0,变量赋值过程,执行,e=d,7,7,0,执行,f=d+e,7,7,14,执行,d=7,7,0,0,7,执行,d=d+1,8,7,14,1,赋值转换,如果,赋值运算符两边的数据类型不相同,,系统将自动进行类型转换,即把赋值号,右边,的类型换成,左边,的类型。具体规定如下:,实型赋予整型,,舍去小数部分;,(,例:,i=3.56,的结果为,i=,3,),整型赋予实型,,数值不变,但将以浮点形式存放,即增加小数部分,(,小数部分的值为,0),;例,f=23,的结果为,=23.00000,字符型赋予整型,,由于字符型为一个字节,而整型为二个字节,故将字符的,ASCII,码值,放到整型量的低八位中,高八位为,0,;,整型赋予字符型,,只把低八位赋予字符量。,2.5.2 赋值运算符和赋值表达式,复合赋值运算符,在赋值符=之前加上其它运算符(双目),构成复合的运算。,语法格式:,变量,双目运算符,=表达式,等价于:,变量=变量 二元运算符 表达式,例如:,x+,=3等价于x=x+3,x%,=3等价于x=x%3,x*,=y+8等价于x=x*(y+8),x=x+3不是方程式,而是一个用两步计算的表达式:,1、计算x+3的值 2、将计算结果存储在变量x中,2.5.2 赋值运算符和赋值表达式,如果“=”右边是包含若干项的表达式,则相当于它有括号。,连续赋值,也可以采用连续赋值的方法,其格式为:,变量1=变量2=变量3=.变量n=表达式,功能:,计算表达式的值,并赋给这一系列变量。,注意:,赋值运算符按照,自右而左的结合,顺序,.,例z=y=,x=8,;,2.5.2 赋值运算符和赋值表达式,例:z=y=,x=8,复合赋值运算符,8,8,例:x=(y=12)*(z=8);,8,12,96,赋值表达式也可以包含复合赋值运算符,例:,x=2,求x,+=,x-=,x*(,y=11),x=x,+,(,x-=,x*(y=11),x-=x,*,(y=11),x=-20,x=x+(-20)x=-40,补充:a的初值为12,求a,+=,a,-=,a*a,a=a,+,(a-=a*a),a-=a*a,a=a-a*a=-132,a+=-132 a=a-132=-264,lx27.c,补充:赋值语句,赋值表达式加上“;”构成,程序中的计算功能主要由赋值语句完成。,例:s=2*3.14*r,;,赋值,表达式,与赋值,语句,的区别:,赋值表达式可以包括在其他表达式中,例如:,x-=,x*(,y=11),补例:dch3_2.c,2.5.2 赋值运算符和赋值表达式,变量在程序里的一个主要用途是,:保存计算的中间结果和最终结果。,补例1(bch2_1.c):计算圆的周长和面积。,例(CH2_40):,已知三角形的三条边分别是3、5、7,求这个三角形的面积。,编程思路:,将三角形的三条边的长度分别用变量a,b,c保存;,1,、求s=(a+b+c)/2,2、area=,3、计算中反复使用S,2.5.2 赋值运算符和赋值表达式,#include,#include,/*程序中用到了标准函数sqrt()*/,main(),double s,area,;,s=,(3+5+10)/,2.0,;,/*用于保存中间结果*/,area=sqrt,(s*(s-3)*(s-5)*(s-7);,/*用于保存最终结果,*/,printf,(area:,%f,n,area,);,练习:编程计算一个矩形面积。,P3例ch1_2、ch1_3,2.5.2 赋值运算符和赋值表达式,2.5.2 赋值运算符和赋值表达式,#include,main(),int sum;,sum=1+1/2+1/3+1/4+1/5;,printf(The sum is%dn,sum);,2.5.2 赋值运算符和赋值表达式,#include,main(),double sum;,sum=1.0+1.0/2.0+1.0/3.0+1.0/4.0+1.0/5.0;,printf(The sum is%fn,sum);,几个问题,变量的初始化:,声明变量时,给变量指定初值。例:double,s,=,(3+5+7)/2.0;,double,x1,=,37.5;,变量的属性:,变量的名字,:提供了程序里访问变量的途径,变量的类型,:规定了变量的使用方式,存储的值及可能使用的各种操作,变量的存储位置,:内存中的位置,变量的值:,2.5.2 赋值运算符和赋值表达式,x1,37.5,变量名,变量类型,double,变量值,2.5.4自增自减运算符,自增运算符为,“+”,,其作用是把,变量的值增加1,。,自减运算符为“,-,”,其作用是使,变量值减少1,。,自增自减运算符均为,单目运算,,,只需要一个运算量,。它可有以下几种形式:,+i,i自增1后再参与其它运算。简单地说,,先加后用,。,-i,i自减1后再参与其它运算。简单地说,,先减后用,。,i+,i先参与运算后,i的值再自增1。简单地说,,先用后加,。,i-,i先参与运算后,i的值再自减1。简单地说,,先用后减,。,例:k=+n;相当于两个语句:n=n+1;k=n;,k=n+;相当于两个语句:k=n;n=n+1;,例,:i的初值为3,则j=+i;i的值为4 j的值为4,,j=i+,j的值为3,i的值变为4,例:,i=3;
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服