C语言数据类型、运算符与表达式.ppt_第1页
C语言数据类型、运算符与表达式.ppt_第2页
C语言数据类型、运算符与表达式.ppt_第3页
C语言数据类型、运算符与表达式.ppt_第4页
C语言数据类型、运算符与表达式.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章数据类型、运算符与表达式,基本内容,2.1C的数据类型2.2常量与变量2.3整型数据2.4实型数据2.5字符型数据2.6变量赋初值2.7各类数值型数据间的混合运算2.8算术运算符和算术表达式2.9赋值运算符和赋值表达式2.10逗号运算符和逗号表达式,基本要求,掌握C语言的数据类型和各种数值型数据之间的混合运算。掌握C语言的各种运算符和表达式。,本章重点与难点,重点:基本数据类型,变量的概念,运算符和表达式。难点:变量的数据存储形式,进制转换,数据类型转换。,本章作业,【例2.0】计算圆的面积,半径为5cm。,#includevoidmain()floatr,area;r=5;area=3.14*r*r;printf(%fn,area);,运算结果是输出圆的面积:78.500000,程序如下:,2.1C的数据类型,C语言提供了以下一些数据类型:,数据类型,构造类型,指针类型*,空类型(无值类型)void,基本类型,2.2常量与变量,对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。可与数据类型结合起来分类。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。,常量区分为不同的类型:,一、常量和符号常量,整型常量:100,125,-100,0实型常量:3.14,0.125,-3.789字符常量:a,b符号常量:用标识符表示上面的几种直接常量(字面常量),标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。符号常量:在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:,#define标识符常量,习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。使用符号常量的好处是:含义清楚,“见名知意”;需要修改时,能做到“一改全改”。,#definePRICE30#includevoidmain()intnum,total;num=10;total=num*PRICE;printf(total=%dn,total);,【例2.1】符号常量的使用。,运行结果:total=300,说明:如再用赋值语句给PRICE赋值是错误的。PRICE=40;/*错误,不能给符号常量赋值。*/,变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,二、变量,每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。,变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例:sum,_total,month,Student_name,lotus_1_2_,BASIC,li_lingM.D.John,¥123,3D64,ab,注意:编译系统将大写字母和小写字母认为是两个不同的字符。建议变量名的长度最好不要超过8个字符。在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用”。,2.3整型数据,十进制:没有前缀,数码为09237、-568、65535、1627;023、23D八进制:前缀为0,数码为07,无符号015、0101、0177777;256、03A2、-0127十六机制:前缀为0X或0 x,数码为09,AF或af0X2A、0 xA0、0XFFFF;5A,0 x3H,一、整型常量(整常数),各种进制之间的转换,二进制、八进制、十六进制转换成十进制:按权相加,二进制、八进制、十六进制转换成十进制:,连续除以基,从低到高记录余数,直至商为0。,整型常数的后缀:在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为065535,有符号数为-32768+32767。八进制无符号数的表示范围为00177777。十六进制无符号数的表示范围为0X00XFFFF或0 x00 xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。,数据在内存中是以二进制形式存放的。,二、整型变量,inti;i=10;,15,0,i,数值是以补码表示的:正数的补码和原码相同;负数的补码:将该数的绝对值的二进制形式按位取反再加1。,例如:求-10的补码。,取反:,再加1,得-10的补码:,由此可知:左面的第一位是表示符号的。,10的原码:,15,0,1)基本整型(类型关键字为int)。2)短整型(类型关键字为short(int))。3)长整型(类型关键字为long(int))。,根据占用内存字节数的不同,整型变量分为3类:,注意:括号表示其中的内容是可选的。,共六种,有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型,(signed)int(signed)short(int)(signed)long(int)unsignedintunsignedshort(int)unsignedlong(int),有符号整型和无符号整型一起共有6类:,整数类型的有关数据:,类型类型说明符长度数的范围基本型int2字节-3276832767短整型short2字节-215215-1长整型long4字节-231231-1无符号整型unsignedint2字节065535无符号短整型unsignedshort2字节065535无符号长整型unsignedlong4字节0(232-1),变量说明的一般形式为:类型说明符变量名标识符,变量名标识符,.;,inta,b,c;(a,b,c为整型变量)longx,y;(x,y为长整型变量)unsignedintp,q;(p,q为无符号整型变量),整型变量的定义,【例2.2】整型变量的定义与使用。,#includevoidmain()inta,b,c,d;/*指定、为整型变量*unsigned;*指定为无符号整型变量*a12;-24;10;c;printf(,);,运行结果:,,整型数据的溢出,#includevoidmain()inta,b;a=32767;b=a+1;printf(“%d,%dn”,a,b);,运行结果:32767,-32768,说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。,2.4浮点型数据,两种表示形式,小数指数,0.1233e-3,注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数:,1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e,一、浮点型常量,在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的1.23456e3称为“规范化的指数形式”。,规范化的指数形式,一个浮点型数据一般在内存中占4个字节(32位)。与整型数据的存储方式不同,浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,二、浮点型变量,浮点型数据在内存中的存放形式,浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(longdouble)三类形式。,浮点型变量的分类,【例2.3】浮点型数据的舍入误差。,#includevoidmain()floata,b;a=123456.789e5;b=a+20;printf(“%fn”,b);,运行结果:123456.789e5,说明:一个浮点型变量只能保证的有效数字是7位有效数字,后面的数字是无意义的,并不准确地表示该数。应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数。,C编译系统将浮点型常量作为双精度来处理。例如:f=2.45678*4523.65系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。,浮点型常量的类型,2.5字符型数据,(1)用单引号包含的一个字符是字符型常量(2)只能包含一个字符,例,a,A,1abc、“a”,一、字符型常量,C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“”开头的转义字符。,转义字符,n,t,v,b,r,f,ddd,xxh,功能,换行,横向跳格(即跳到下一个输出区),竖向跳格,退格,回车,走纸换页,反斜杠字符“”,单引号(撇号)字符,1到3位8进制数所代表的字符,1到2位16进制数所代表的字符,字符形式,二、字符型变量,字符变量的类型关键字为char,一般占用1字节内存单元。字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。可作为整数和字符两种形式输出,可对字符进行整数运算(ASCII码值)。字符可以是字符集中任意字符。但数字作为字符型参与数值运算时数字的值就不是它的ASCII值。,【例2.4】向字符变量赋以整数。,#includevoidmain()charc1,c2;c1=97;c2=98;printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);,运行结果:a.b97,98,说明:在第和第4行中,将整数和分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1a;c2b;因为a和b的ASCII码为97和98。,【例2.5】大小写字母的转换。,#includevoidmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“cc,c1,c2);,运行结果:A.B,说明:程序的作用是将两个小写字母a和b转换成大写字母A和B。从代码表中可以看到每一个小写字母比它相应的大写字母的码大。语言允许字符数据与整数直接进行算术运算。,说明:有些系统(如TurboC)将字符变量定义为signedchar型。其存储单元中的最高位作为符号位,它的取值范围是-128127。如果在字符变量中存放一个ASCII码为0127间的字符,由于字节中最高位为0,因此用%d输出字符变量时,输出的是一个正整数。如果在字符变量中存放一个ASCII码为128255间的字符,由于在字节中最高位为1,用%d格式符输出时,就会得到一个负整数。,三、字符串常量,字符串常量是用一对双引号括起来的若干字符序列。C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。a是字符常量,而“a”是字符串常量。不能将一个字符串赋给一个字符变量。C中没有字符串变量,需要用字符数组存放字符串。,例如,“Howdoyoudo.”、“Goodmorning.”等,都是字符串常量,其长度分别为14和13(空格也是一个字符)。如果反斜杠和双引号作为字符串中的有效字符,则必须使用转义字符。例如:(1)C:msdosv6.22C:msdosv6.22”(2)Isay:Goodbye!Isay:Goodbye!,2.6变量赋初值,(1)语言允许在定义变量的同时使变量初始化。如:inta=3;/*指定为整型变量,初值为*/floatf=3.56;/*指定为浮点型变量,初值为.56*/charc=a;/*指定为字符变量,初值为a*/,(2)可以使被定义的变量的一部分赋初值。如:inta,b,c=5;表示指定、为整型变量,但只对初始化,c的初值为(3)如果对几个变量赋以同一个初值,应写成:inta=3,b=3,c=3;表示、的初值都是。不能写成inta=b=c=3;,注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。,2.7各类数值型数据间的混合运算,整型、单精度型、双精度型数据可以混合运算。不同类型的数据要先转换成同一类型,然后进行运算,即“先转换,后运算”。转换的方式有两种:自动转换(隐式转换)和强制转换,自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。隐式转换规则如图:,箭头只表示转换方向,并不是依次转换。转换过程是自动完成的。,一、隐式转换,强制转换是通过类型转换运算符来实现。一般形式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。,(int)a将a的结果强制转换为整型量。(int)(x+y)将x+y的结果强制转换为整型量。(float)a+b将a的内容强制转换为浮点数,再与b相加,注意:无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。,二、强制转换,例:强制类型转换main()floatf=5.75;printf(int)f=%dn,(int)f);/*将f的结果强制转换为整型,输出*/printf(f=%fn,f);/*输出f的值*/结果:(int)f=5f=5.750000,2.8算术运算符和算术表达式,运算符:狭义的运算符是表示各种运算的符号。C语言运算符丰富,范围很宽,把除了控制语句和输入/输出以外的几乎所有的基本操作都作为运算符处理,所以C语言运算符可以看作是操作符。C语言丰富的运算符构成C语言丰富的表达式(是运算符就可以构成表达式)。在C语言中除了提供一般高级语言的算术、关系、逻辑运算符外,还提供赋值运算符,位操作运算符、自增自减运算符等等。甚至数组下标,函数调用都作为运算符。,一、运算符类别,二、C中各类运算符的优先级,初等运算符()、,单目运算符!、+、+、(类型),算术运算符、/、%,+、,关系运算符、=,=、!=,逻辑运算符;i的值先变成4,再赋给,i、j的值均为;先将i的值3赋给,的值为,然后变为,注意:(1)自增运算符(),自减运算符(),只能用于变量,而不能用于常量或表达式;(2)和的结合方向是“自右至左”。,自增(减)运算符常用于循环语句中使循环变量自动加。也用于指针变量,使指针指向下一个地址。,(6)有关表达式使用中的问题说明ANSIC并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。例如:对表达式a=f1()+f2()并不是所有的编译系统都先调用f1(),然后调用f2()。在有的情况下结果可能不同。有时会出现一些令人容易搞混的问题,因此务必要小心谨慎。,C语言中有的运算符为一个字符,有的运算符由两个字符组成,为避免误解,最好采取大家都能理解的写法。例如:不要写成i+j的形式,而应写成(i+)+j的形式。,在调用函数时,实参数的求值顺序,C标准并无统一规定。例如:i=3:printf(%d,%d,i,i+);在有的系统中,从左至右求值,输出“,”。在多数系统中对函数参数的求值顺序是自右而左,printf函数输出的是“,”。以上这种写法不宜提倡,最好改写成:j=i+;printf(%d,%d,j,i);,不要写出别人看不懂的也不知道系统会怎样执行的程序!,2.9赋值运算符和赋值表达式,符号=为赋值运算符。,一、赋值运算符,作用:将一个数据赋给一个变量。,如:a=8,2.整型数据赋给实型变量,数值不变,但按实数形式存放.,1.将实型数据(无论单,双精度)赋给整型变量时,舍弃小数.,赋值时,两边类型若不一致,则按以下规则转换:,3.字符型数据赋给整型变量时:,(2)字符带符号整型变量,则字符高位扩展。,(1)字符无符号整型变量,则存入低8位,高8位补零。,4.将intlongint,进行符号扩展。即:符号扩展,低16位long的低16位。,5.longintint则高16位截断。,6.非unsigned型长度相同的unsigned型数据,原样传送(包括符号位),7.将unsignedint型longint高位补0。,(2)原值传送,但数据大小不能超值。如:unsignedinta=65535;intb;b=a;则越界。,(1)而位数相同部分赋值unsignedintintunsignedlonglongunsignedshortshort,复合赋值运算符:在号之前加一个其它运算符。,C语言规定:凡是二目运算符均可构成复合运算符。,例:a+=3;相当于a=a+3x=y+8;相当于x=x(y+8)x%=3;相当于x=x%3,二、复合赋值运算符,一般形式:,三、赋值表达式,赋值表达式的求解过程:先计算赋值运算符右侧的“表达式”的值将赋值运算符右侧“表达式”的值赋值给左侧的变量。整个赋值表达式的值就是被赋值变量的值。,说明:(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或常量、变量、函数调用组成的表达式。例如:x=10y=x+10y=func()都是合法的赋值表达式。(2)赋值符号“=”不同于数学的等号,它没有相等的含义。(“=”相等)例如:C语言中x=x+1是合法的(数学上不合法),它的含义是取出变量x的值加1,再存放到变量x中。,(3)赋值运算时,当赋值运算符两边数据类型不同时,将由系统自动进行类型转换。转换原则:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。(4)C语言的赋值符号“=”除了表示一个赋值操作外,还是一个运算符,也就是说赋值运算符完成赋值操作后,整个赋值表达式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论