数据类型运算符和表达式(完整).ppt_第1页
数据类型运算符和表达式(完整).ppt_第2页
数据类型运算符和表达式(完整).ppt_第3页
数据类型运算符和表达式(完整).ppt_第4页
数据类型运算符和表达式(完整).ppt_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

第2章数据类型、运算符与表达式,南京审计学院信息科学与技术学院孙玉星,C程序设计,本章学习内容,标识符命名;变量和常量;数据类型;(整型、浮点型、字符型)常用运算符和表达式;3.34.2运算符的优先级与结合性,CProgramStructure,例2.1:一个简单的C程序例子,#include/*函数功能:计算两个整数相加之和入口参数:整型数据a和b返回值:整型数a和b之和*/intAdd(inta,intb)return(a+b);/*主函数*/main()intx,y,sum=0;printf(Inputtwointegers:);scanf(%d%d,/*输出x和y相加之和*/,并列的两个函数其中一个是程序的入口,程序注释,编译预处理命令,C程序常见符号分类,关键字(Keyword)又称保留字(CReservedWord)AwordthathasspecialmeaninginC标识符(Identifier)CStandardIdentifier(系统预定义标识符)Awordhavingspecialmeaningbutmayberedefined(butisnotrecommended!)用户自定义标识符变量,函数名,,C程序常见符号分类,运算符(Operator)34种,详见附录C分隔符(Separator)空格、回车/换行、逗号等其它符号“”和“”标识函数体或语句块“/*”和“*/”程序注释的定界符常量(Constant),标识符命名,变量名,函数名由英文字母、数字和下划线组成,大小写敏感不可以是数字开头直观,见名知意,便于记忆和阅读最好使用英文单词或其组合切忌使用汉语拼音下划线和大小写通常用来增强可读性variablenamevariable_namevariableName不允许使用关键字作为标识符的名字int,float,for,while,if等某些功能的变量采用习惯命名如:for语句所采用的循环变量习惯用i,j,k,Windows风格,UNIX风格,何谓变量(Variable)?,Anameassociatedwithamemorycellwhosevaluecanchange,如何衡量变量所占空间大小?,bit,中文叫法:位Byte,中文叫法:字节Kilobyte(KB),中文叫法:KMegabyte(MB),中文叫法:兆Gigabyte(GB),中文叫法:GTerabyte(TB),中文叫法:T,1TB=1,024GB,1GB=1,024MB,1MB=1,024KB,1KB=1,024B,1B=8b,一个位有多大?只能是“0”或者“1”,二进制一个字节有多大?可以表示数字0255之间的整数保存一个字符(英文字母、数字、符号)ASCII(美国标准信息交换码)编码(附录A),如何衡量变量所占空间大小?,Needstobedeclared:变量类型变量名;,Example:intsum;intx,y,sum=0;,变量声明(VariableDeclaration),变量声明(VariableDeclaration),使用变量的基本原则变量必须先定义,后使用所有变量必须在第一条可执行语句前定义声明的顺序无关紧要一条声明语句可声明若干个同类型的变量声明变量是初始化变量的最好时机不被初始化的变量,其值为随机数,结果会是什么?,Example:intnumber1,number2;number1=25;number2=23;number1=number2;,25,23,23,变量赋值(VariableAssignment),Algorithm变量表达式Syntax变量=表达式;Rules:类型一致Expressionstypemustbethesameasvariablestype,ValidExample:InvalidExample:intx;inty;x=12;y=5.75;,变量赋值(VariableAssignment),Example:Calculateanddisplaythepriceofanumberofapplesifthequantityinkgandpriceperkgaregiven.Input:quantityandpricePerkgOutput:priceProcess:price=quantity*pricePerkg,变量赋值(VariableAssignment),Example:intquantity;floatpricePerkg,price;quantity=5;pricePerkg=4.50;price=quantity*pricePerkg;,Howdoesthisprogramwork?,变量赋值(VariableAssignment),Example:intquantity;floatpricePerkg,price;quantity=2;pricePerkg=4.50;price=quantity*pricePerkg;,4.50,9.00,2,变量赋值(VariableAssignment),Example:intquantity;floatpricePerkg;floatprice;,变量类型(VariableType),数据类型(DataType),为什么要区分类型?不同类型有什么不同?数据表示形式合法的取值范围占用内存空间大小可参与的运算种类,数据类型(DataType),基本数据类型,int整数,在目前绝大多数机器上占4个字节TC2.0,2个字节float单精度浮点数,4个字节double双精度浮点数,8个字节char字符,1个字节表示256个ASCII字符,或0255的整数,数据类型修饰符,shortshortint,简写为short,短整数,2个字节longlongint,简写为long,长整数,4个字节longdouble,长双精度(高精度)浮点数,10个字节unsigned用来修饰char、int、short和long无符号整数(正整数和0),不同类型取值范围不同,C语言直接提供的任何类型都有取值范围。P22,整型类型的取值范围,浮点类型的取值范围,不同类型取值范围不同,C语言直接提供的任何类型都有取值范围。当向其赋超过此范围的数值时,结果会怎样呢?产生数值类型溢出,得到一个不正确的结果。,小蛇能吞下大象吗?,typeoverflow.c,何谓类型溢出(Overflow)?,生活中的例子:千年虫问题阿利亚娜号火箭发射失败现象与危害:溢出后的数值是可预料的,但不同平台会有所不同当程序从高位计算机向低位计算机移植(比如从64位系统移植到32位系统)时,以前从不出现的溢出问题可能出现,duringexecutionofadataconversionfrom64-bitfloatingpointto16-bitsignedintegervalue.Thefloatingpointnumberwhichwasconvertedhadavaluegreaterthanwhatcouldberepresentedbya16-bitsignedinteger.ThisresultedinanOperandError.,解决方案?,预先估算运算结果的可能范围,采用取值范围更大的类型。1+2+3+1!+2!+3!+13+23+33+在运算还没开始之前就判断运算数是否在合理的取值范围内。如果超出,则停止运算,转错误处理。,100!=9.3326215443944*10157,13+23+n3=(1+2+3+n)2=(n(n+1)/2)2=5050*5050,不同类型占用的内存字节数不同,因为同种类型在不同的平台其占字节数不尽相同。如int在16位、32位和64位系统分别占2、4和8个字节。不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度现象与危害:在平台间移植时会出现问题,导致数据丢失或者溢出,注意!,sizeof到底是什么?,C语言的关键字,并非函数计算类型占用的字节数两种语法形式sizeof(类型)结果为类型占用的字节数sizeof(表达式)结果为表达式值所属类型占用的字节数一般都使用sizeof(变量名),现场演示例2.3在TC和VC的运行结果,#includemain()printf(DatatypeNumberofbytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(shortint%dn,sizeof(short);printf(longint%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);,不同类型数据在内存中的存储形式不同,字符型整型实型N=S2j,所占位数决定实数的取值范围,所占位数决定实数的精度,常量(Constant),AvaluethatwillnotchangeConsistsof:整型(e.g.067-2123L123u0220 x12)缺省为int实型(e.g.2.31.2e-52.73F2.73L)缺省为double字符型(e.g.z3$n)用开头的字符为转义字符,代表1个字符字符串(e.g.UKM15a),字符常量,转义字符一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符常量,字符常数就是一个普通整数,也可参与各种数学运算每个字符具有一个0255之间的数值,可从ASCII表查出注意:5和整数5的区别5的ASCII码值是53字符的数学运算在密码学内用得比较多,例2.5:小写字母转换为大写字母,#includemain()charch=b;printf(%c,%dn,ch,ch);ch=b-32;printf(%c,%dn,ch,ch);,#includemain()charch=b;printf(%c,%dn,ch,ch);ch=b-(a-A);printf(%c,%dn,ch,ch);,b,98B,66,b,98B,66,相当于97-65,字符串常量,用双引号括住的由0个或多个字符组成的字符序列Iamastring表示空字符串除注释外,是唯一可以出现中文的地方C语言内部用0表示字符串的结束x和x是不同的里定义了一系列专门的字符串处理函数转义字符也可在字符串中使用字符串tNameAddressn的长度?15,宏常量,#define标识符字符串宏常量也称符号常量一般采用全大写字母表示宏定义不是语句,而是一种编译预处理命令,例2.2:计算圆的周长和面积,#include#definePI3.14159#defineR5.3main()printf(area=%fn,PI*R*R);printf(circumference=%fn,2*PI*R);,area=88.247263circumference=33.300854,相当于执行#includemain()printf(area=%fn,3.14159*5.3*5.3);printf(circumference=%fn,2*3.14159*5.3);,宏替换,例2.2:计算圆的周长和面积,#include#definePI3.14159;#defineR5.3;main()printf(area=%fn,PI*R*R);printf(circumference=%fn,2*PI*R);,相当于执行#includemain()printf(area=%fn,3.14159;*5.3;*5.3;);printf(circumference=%fn,2*3.14159;*5.3;);,语法错误,为什么需要常量?,假如不使用常量,直接使用常数,会有什么影响?程序的可读性变差容易发生书写错误当常数需要改变时,要修改所有使用它的代码,工作量大,还可能有遗漏解决方案:避免使用幻数(直接使用的常数)把幻数定义为宏常量,运算符(Operator),34种,详见附录c常见的运算符算术运算符赋值运算符类型强转关系运算符逻辑运算符增和减位运算符,运算符和操作数(OperatorandOperand),Whatareoperatorandoperand?,表达式Expression,Anexpressionmaycontain2ormoreoperators每一个表达式都有一个值,算术运算符(ArithmeticOperators),Multiplication(*),addition(+)andsubtraction(-)arethesimplesttouseDivision(/)iseasy,butsomeprecautionsneedtobetakenModulus(%)istheonethatnormallyconfusesnovicesSo,letsstudyindetailtheDivisionandModulus,算术运算符(ArithmeticOperators),除法(Division),Example:,整数除法(IntegerDivision),8/2=4,Example:,12/5=2,整数除法(IntegerDivision),Example:,实数除法(FloatingDivision),12.0/5=2.4,Whatwillbetheanswerifanintegerisdividedby0?,Somethingtoponder,求余(Modulus),Itreturnstheremainderthatoccursafterperformingthedivisionof2operandsRule:操作数必须是整数,Example:,12%5=2,12,5,2,10,2,求余(Modulus),Howaboutifoneoftheoperandsisanegativeinteger?,Somethingtoponder,Example:,-7%3=-1,-7,3,-2,-6,-1,求余(Modulus),Example:,7%-3=1,7,-3,-2,6,1,求余(Modulus),Example:,12.0%3=?,求余(Modulus),Anexpressionmaycontain2ormorearithmeticoperatorsMainissue:运算顺序ORDEROFPRECEDENCE优先级,算术表达式(ArithmeticExpression),Examples:,5+6,5+6*2,2.5+62*2,12/6.02*2,=11,=22or17?,=?,=?,=17,算术表达式(ArithmeticExpression),Waitaminute,优先级(OrderofPrecedence)High:*/%Low:+-Alloperatorshaveaprecedencelevel.不同优先级时的运算顺序:Highprecedenceleveloperatorsareevaluatedbeforelowerones.相同优先级时的运算顺序:Operatorsofthesameprecedencelevelareevaluatedfromlefttoright(左结合),算术表达式(ArithmeticExpression),Example:,?,4,8.5,2.5+6,4,4.5,2.5+62*2=,算术表达式(ArithmeticExpression),4.5,巧妙使用圆括号改变运算顺序AllexpressionsinparenthesesmustbeevaluatedpriortovaluesoutsidebracketsNestedparenthesizedexpressionsmustbeevaluatedfromtheinsideout,withtheinnermostexpressionevaluatedfirst,Example:,(9(3+2)*3=?,算术表达式(ArithmeticExpression),赋值语句(AssignmentStatement),Thereare3typesofassignment:Simple简单赋值Multiple多重赋值Shorthand简写的复合赋值,简单赋值SimpleAssignment,Syntax:变量=表达式;,Everyassignmentexpressionhasavalue,#includemain()floatprice,discount,total;printf(“Buyingprice:“);scanf(“%f”,Buyingprice:_,Buyingprice:10.00Discountrate:_,2.50,Buyingprice:10.00Discountrate:0.25_,Buyingprice:10.00Discountrate:0.25Thetotalpriceis2.50_,Example:,简单赋值SimpleAssignment,Syntax:变量1=变量2=表达式;,多重赋值MultipleAssignment,Example:intnumber,total;floatstart_x,start_y;.number=total=0;start_x=start_y=100.0;,多重赋值MultipleAssignment,从右向左赋值,Syntax:变量x=变量x运算符op表达式;变量x运算符op=表达式;,简写的复合赋值ShorthandAssignment,这种形式看起来更直观,且执行效率一般也更高一些,Whenevertheexpressionontherightcontainsthevariableontheleft(towhichthevalueisassigned),Example:num=num+5;,15+5,20,20,简写的复合赋值ShorthandAssignment,Expressionscanalsobestatedusingshorthandassignmentoperators,Example:num+=5;,similartonum=num+5,简写的复合赋值ShorthandAssignmen

温馨提示

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

评论

0/150

提交评论