C语言程序设计讲解2010-3运算符与表达式.ppt_第1页
C语言程序设计讲解2010-3运算符与表达式.ppt_第2页
C语言程序设计讲解2010-3运算符与表达式.ppt_第3页
C语言程序设计讲解2010-3运算符与表达式.ppt_第4页
C语言程序设计讲解2010-3运算符与表达式.ppt_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

第3章基本数据类型、运算符和表达式,我们在这一章中将要给大家介绍有关C基本数据类型、运算符以及表达式、常量、变量等项内容为后期的程序设计打好基础,主要内容,1C的基本数据类型(整型、浮点型、字符型)2常量3变量、变量赋初值4各类数值型数据间的混合运算5算术运算符和算术表达式6赋值运算符和赋值表达式逗号运算符和逗号表达式条件表达式、关系表达式与逻辑表达式,/*计算两数之和*/main()inta,b,sum;a=100;b=200;sum=a+b;printf(“sum=%dn”,sum);,C语言程序结构,void,#include,/*数据描述部分*/,/*操作部分*/,/*两数之和*/,对数据的描述,数据类型(Datatypes)数据结构(Datastructure),数据类型,基本类型,构造类型,指针类型,空类型void,整型int,实型(浮点型),字符型char,枚举类型,数组类型,结构体类型,共用体类型,单精度实型float,双精度实型doublefloat,基本整型int,长整型longint,短整型shortint,无符号整型unsignedint,signed(有符号)unsigned(无符号)long(长型)short(短型),表3-1ANSIC标准中的基本数据类型,表3-1ANSIC标准中的基本数据类型(续),变量是内存中已命名的位置,代表一个内存单元的地址,其中放置程序可修改的值。注意区分变量名和变量值:在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,3.2变量,变量是具有类型的内存单元,类型可以是整型、字符型及由它们派生出来的类型。类型决定了变量可以进行的操作。,3.2.1变量声明与定义,所有C变量都必须在使用前声明和定义。,当创建变量的时候,声明赋予它一个符号名字,定义给它一个存储空间。,变量一旦被定义,它就可存储数据并接受程序对它的操作。一般来说,程序员并不关心变量在内存中的具体位置,仅仅只需要知道可通过它的符号名称对其进行访问即可。,3.2.1变量声明与定义,当创建变量的时候,声明赋予它一个符号名字,定义给它一个存储空间。,变量的起名规则(相关知识在2.2.2-3-(1)),例:判断下列字符名是否可以作变量名sum,_total,month,Student_name,lotus_1_2_,BASIC,li_lingM.D.John,¥123,3D64,ab,3.2.1变量声明,变量定义的一般形式:类型名变量列表;,3.2.1变量定义,charcode;/*定义了code为字符型变量*/inti,j,l;/*定义了i,j和l为整型变量*/unsignedlongdebt;/*定义了debt为无符号长整型变量*/floatprofit,payrate;/*定义了profit,payrate为单精度型变量*/doublepi;/*定义了pi为双精度型变量*/,类型决定了变量在存储单元中的大小,决定了其变量值的取值范围和可以进行的操作。,3.2.2变量赋初始化,当变量定义以后,其相应的存储空间往往包含着垃圾值(前期使用所遗留下来的没有意义的值),在这种情况下,程序员需要在使用它们之前对其进行初始化并把初始化的数据存放其中。,变量初始化一般形式如下:类型名变量名=常值;,如:inta=3;/*指定为整型变量,初值为*/floatf=3.56;/*指定为浮点型变量,初值为.56*/charc=a;/*指定为字符变量,初值为a*/,3.2.2变量赋初始化,如:inta,b,c=5;可以使被定义的变量的一部分赋初值。仅变量c初始值为5,如果需要变量a、b、c的初始值都为5,则应写成:inta=5,b=5,c=5;也可以写成inta=b=c=5;是多重赋值,3.2.2变量赋初始化,注意:初始化不是在编译阶段完成的而是在程序运行时执行本函数时赋初值的,相当于有一个赋值语句。例如:inta=3;相当于:inta;a=3;,intcount;,count变量的值未知(不确定),count变量二字节存储了整型值0,intcount=0;,3.3常量,常量指在程序的执行过程中不能改变的固定值,可以是任何基本数据类型的值。和变量一样,常量也有类型。常量的表示方法依其基本类型而定。,3.3.1常量的表示,3.3.1常量的表示,1.字符常量,(1)字符型常量是用单引号括起来的一个字符。,例,a、A、1、?、$abc、“a”,注意:只能包含一个字符,且使用单引号括起来。,1.字符常量,但是有些字符是没有形状的(如回车符)不能通过键盘放到字符串里或不能通过输出显示(如响铃)。,为此C语言采用了特殊的反斜线字符常量。这种反斜杠称为转义字符,,例如,回车符:r或15(ASCII值是13)响铃:a或7(ASCII值是13),表3-2转义字符表,1.字符常量,例如,语句printf(“ntHelloC!an”);输出一个新行和一个制表符,然后输出串HelloC!然后响铃,换到下一行。,1.字符常量,2.整型常量,3.3.1常量的表示,整型常量即整常数。在语言中,可用以下三种形式表示:(1)十进制整数如:123、-456、4。(2)八进制整数:以0开头的数。如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。,(3)十六进制整数:以0 x开头的数。如:0 x123,代表16进制数123,等于十进制数291。-0 x12等于十进制数18。,2.整型常量,如果在程序中仅仅使用一串数字,则它的类型是有符号整数,如果这个数字太大的话,则是有符号长整数。,可以通过在数字后面增加u或U,l或L来显式表示给定数字的类型,而避免计算机采用默认的数据类型。,建议用大写L,3.实型常量,十进制小数指数,由数字和小数点组成。例如:0.123、0.0例如:123e3或123E3,都代表123103,注意:指数表示中字母e(或E)之前必须有数字,且e后面的指数必须为整数。,1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e,C语言中的浮点数指平常所说的实数。有两种表示形式:,实型不能用8进制和16进制形式表示。,一个浮点数可以有多种指数表示形式。例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。其中的1.23456e3称为“规范化的指数形式”。,3.实型常量,3.实型常量,缺省的实型常量是double型的。如果期望的类型是float或longdouble,则需要用字母进行特定标注。F或f表示float类型,l或L表示longdouble类型。,4.字符串常量,字符串常量是一对双撇号括起来的字符序列。合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”注意:和“”两者不同。,字符常量,字符串常量,假设被指定为字符变量:charc;,c=a;=“a”;c“CHINA”;,结论:不能把一个字符串常量赋给一个字符变量。,规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。规定以字符作为字符串结束标志。是一个ASCII码为0的字符,称为“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。,例如:有一个字符串常量”,它在内存中实际为,它占内存单元不是个字符,而是个字符,最后一个字符为。但在输出时不输出。,3.3.2代码常量,在编写程序时如何使用常量呢?在编程中经常采用的代码常量是字面常量、预定义常量和存储常量。,例如,a=b+5;中的5。,#defineRATE0.015采用预定义命令,编译前RATE会被替换为0.015,const类型标识符常量名=数据;constfloatCpi=3.14159;,3.3.2代码常量,#include#definePI3.1415926536voidmain()constdoubleCpi=PI;printf(“DefinedconstantPI:%fn”,PI);printf(“MemoryconstantCpi:%fn”,Cpi);printf(“Literalconstant:%fn”,3.1415926536);,输出结果:DefinedconstantPI:3.141593MemoryconstantCpi:3.141593Literalconstant:3.141593,说明:预定义常量习惯上,符号常量名用大写,变量名用小写,以示区别。,#definePRICE30#includevoidmain()intnum,total;num=10;total=num*PRICE;printf(total=%dn,total);,运行结果:total=300,说明:如再用赋值语句给PRICE赋值是错误的。PRICE=40;/*错误,不能给符号常量赋值*/,3.4运算符和表达式,的运算符有以下几类:(1)赋值运算符(及其扩展赋值运算符)(2)算术运算符(+-*/%)(3)关系运算符(=|)(7)逗号运算符(,),(8)指针运算符(*和)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)分量运算符(-)(12)下标运算符()(13)其他(如函数调用运算符(),1赋值运算符=:双目运算符,其表达式的一般形式如下:变量名=表达式例如:a=3i=d+3(=)将右边的操作数3保存在左边的变量a里。赋值号左边的操作数必须是个变量。赋值表达式有一个值和一个副作用:整个表达式的值是右边的表达式的值;副作用把表达式的值保存在赋值号左边的变量中。,3.4.1赋值运算符和赋值表达式,赋值中的类型转换:先看一些简单的升级例子。charc=A;inti=1234;longdoubled=3458.0004;i=c;/*65*/d=c;/*65.0*/d=i;/*1234.0*/,3.4.1赋值运算符和赋值表达式,右边表达式的类型与左边的变量类型不一致时,其副作用是先将右边表达式的值转换为左边变量相同的类型,然后进行赋值。,升级:一般没问题;精度并不增加,赋值中的类型转换:再看一些简单的降级例子。inti=299;charc=a;floatf;doubled=23.3522e120;c=i;/*c值为43,对应+字符*/f=d;/*出现溢出错误*/,3.4.1赋值运算符和赋值表达式,降级:“放得下没问题,放不下出问题”;通常出问题,赋值中的类型转换:出问题的降级。,3多重赋值,例如,把0同时赋给a、b和c:a=b=c=0赋值号右边的表达式还可以是赋值表达式:x=10*(y=3)整个赋值表达式的值是30,两个副作用:y变量存储3,x变量存储30。,例:(a=3*5)=4*3,分析:先将15赋给a,然后执行4*3的运算,再把12赋给a。最后a的值为12,整个表达式的值为12。,注意:在对赋值表达式(a=3*5)求解后,变量a得到值15,然后再做别的;执行a=3*5=4*3时,实际上是将4*3的积12赋给变量a,而不是赋给3*5。,不能写成:a=3*5=4*3,3多重赋值,4复合赋值,例如,x=x+3写成x+=3。在赋值符“=”之前加上其他运算符,可以构成复合的运算符。语言规定可以使用10种复合赋值运算符有+=,-=,*=,/=,%=,=,j=+i;i的值增1为11,并j置成11。i=10;j=i+;j先置成10,i的值增1为11。,所以,其本质是赋值符号!,3.4.2算术运算符和算术表达式,2.自增(+)自减(-)运算符,使用自增自减运算,注意!,本质上是赋值符号,所以只能用于变量,而不能用于常量或表达式,如5+或(a+b)+都是不合法的,+和-的结合方向是“自右至左”。-i+相当于-(i+),例:i=3;printf(“%d”,-i+);应输出-3。(先取出i的值3,输出-i的值-3,然后i增值为4)i=3;printf(“%d”,-+i);,逗号运算符:又称为“顺序求值运算符,逗号表达式:用逗号把几个运算表达式连接起来所构成,一般形式:表达式,表达式,表达式表达式,求解过程:自左向右逐个运算,最后一个表达式的结果就是逗号表达式的运算结果。,如:3+5,6+8结果14,3.4.3逗号,运算符和逗号表达式,a=15,b=a-8,a+b*赋值号优先级高于逗号,运算结果表达式值为22*z=(x=2,y=x+3,y*x+6)*逗号表达式给变量赋值,z值为16*(a=3*5,a*6),a+5*的值为15,第一个逗号表达式值90,整个表达式的值为20。x=(a=5,2*3)*的值为6,整个赋值表达式的值为6*x=a=5,2*3*的值为5,整个逗号表达式的值为6*,3.4.3逗号,运算符和逗号表达式,注意:并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。如:printf(“%d,%d,%d”,a,b,c);,“a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,printf(“%d,%d,%d”,(a,b,c),b,c),“(a,b,c)”是一个逗号表达式,它的值等于的值。,3.4.3逗号,运算符和逗号表达式,3.4.4关系运算符和逻辑运算符及其表达式,关系运算是比较简单的一种逻辑运算,用关系运算符将两个表达式连接起来,就是关系表达式。关系表达式是由真(即非0值)或假(即0值)来表示其关系的;,关系表达式的运算结果是:由整数值1或整数值0,1,true,0,false,1关系运算符,1、已知a=3,b=4则有c=ab?,2、c=10!=9,0,1,1关系运算符,2逻辑运算符,逻辑运算是对两个关系式或逻辑式进行逻辑运算的,其运算结果:逻辑真,用整数“1”来表示;逻辑假,用整数“0”来表示。,FALSE,TRUE,FALSE,FALSE,FALSE,TRUE,FALSE,TRUE,TRUE,TRUE,已知:(1)a=100,b=200求ak=(+a0)表达式中如变量的值是多少?,先判断+a8?10:20;*b的值为20*表示:如果a大于8,则b被赋值10;如果ab?a:cd?c:d;*表达式的值为4*表示:为条件表达式的嵌套,要注意其求值顺序是自右向左的。先求cd?c:d的值;,例:a=2,c=a,f=3.0;p=f=3.0?a=c*表达式p的值为1*表示:p的值是2=0?x:-x;,ch=(ch=aba;ab;,()(ab的结果,a已变成)()(ba的结果,b已变成)()(ab的结果,a已变成),例如:,,4.“按位非”运算符(),是一个单目(元)运算符,用来对一个二进制数按位取反,即将变,将变。,例如,是对八进制数(即二进制数)按位求反。,5.“按位左移”运算符(),左移运算符是用来将一个数的各二进制位全部左移若干位。,例如:a=a2将的二进制数左移位,右补。,左移位相当于该数乘以,左移n位相当于该数乘以2n。但此结论只适用于左移时被溢出舍弃的高位中不包含的情况。例如:假设为无符号整型变量,a的值为01000000,左移一位时溢出的是,而左移位时,溢出的高位中包含。,5.“按位左移”运算符(),a2表示将a的各二进制位右移2位,移到右端的低位被舍弃,对无符号数高位补0。,例如:a=017时,a的值用二进制形式表示为00001111a2=00000011,右移一位相当于除以2右移n位相当于除以2n,在右移时,需要注意符号位问题:对无符号数:右移时左边高位补0;对有符号数:如果原来符号位为0(该数为正),则左边补0;如果符号位原来为1(即负数),则补0称为“逻辑右移”;补1称为“算术右移”。,6.“按位右移”运算符(),例:inta=0113755;a:1001011111101101(用二进制形式表示)a1:0100101111110110(逻辑右移时)a1:1100101111110110(算术右移时),TurboC采用的是算术右移,即对有符号数右移时,空出来的位补符号位。,6.“按位右移”运算符(),3.5表达式求值,表达式是由运算符、常量、变量构成的,它是C语言最基本的元素,注意:优先级、结合性和数据类型的变换。,在确定表达式求值顺序时,优先级先于结合性使用,结合性才在需要时应用。,3.5.1优先级,优先级用于确定复杂表达式求值时不同运算符的计算顺序,C语言把这个概念拓展到15级,见附录C。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。同优先级的按规定的“结合方向”处理。,3.5.2结合性,结合性用来决定复杂表达式求值时含有同优先级运算符的计算顺序。结合可分从左向右结合和从右向左结合。,例如,算术运算符的结合方向为“从左向右”,3*8/4%4*5等价(3*8)/4)%4)*5),表达式的值为10。,又如,赋值运算符的结合方向为“从右向左”a+=b*=c-=5等价(a+=(b*=(c-=5)。表达式展开后就是(a=a+(b=(b*(c=c-5),,如果a的初值是3,b的初值是5,c的初值是8,表达式则变成(a=3+(b=5*(c=8-5)),结果:c被赋值为3,b被赋值为15,a被赋值为18,而整

温馨提示

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

评论

0/150

提交评论