第2章 C简单程序设计_第1页
第2章 C简单程序设计_第2页
第2章 C简单程序设计_第3页
第2章 C简单程序设计_第4页
第2章 C简单程序设计_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

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

文档简介

第二章C+简单程序设计,清华大学郑莉,目录,2.1C+语言概述2.2基本数据类型和表达式(课前自学)2.3数据的输入与输出2.4算法的基本控制结构(课前浏览预习)2.5枚举类型2.6深度探索2.7小结,2,2.1.1C+的产生,C+是从C语言发展演变而来的,首先是一个更好的C引入了类的机制,最初的C+被称为“带类的C”1983年正式取名为C+从1989年开始C+语言的标准化工作于1994年制定了ANSIC+标准草案于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C+,3,2.1C+语言概述,2.1.2C+的特点,兼容C它保持了C的简洁、高效和接近汇编语言等特点对C的类型系统进行了改革和扩充C+也支持面向过程的程序设计,不是一个纯正的面向对象的语言支持面向对象的方法,4,2.1C+语言概述,2.1.3C+程序实例例2-1,5,2.1C+语言概述,/2_1.cpp#includeusingnamespacestd;intmain()coutHello!endl;coutWelcometoc+!操作,可以从标准输入设备(通常是键盘)读入数据数据的存储为了存储数据,需要预先为这些数据分配内存空间。变量的定义就是在给变量命名的时候分配内存空间。,19,补充2-1:读入并显示整数(续),#includeusingnamespacestd;intmain()intradius;coutradius;coutradius;coutNowtheradiusischangedto:radiusradius;coutpi;return0;/观察:通过调试工具跟踪观察符号常量。/思考:能给常量输入新值吗?如定义pi时不初始化会怎样?,22,主要知识点:符号常量,运行结果:Pleaseentertheradius!2Theradiusis:2PIis:3.14159Pleaseenteradifferentradius!3Nowtheradiusischangedto:3PIisstill:3.14159,补充2-2(续),23,补充2-3:变量的初始化,主要知识点:变量的初始化虽然变量的值是可以在运行时获得的,但是在定义变量时也可以进行初始化,而且应该提倡进行初始化;未经初始化的变量,其值可能是随机的。如果误用了未经初始化也没有给予确定值的变量,就会引起错误。,24,补充2-3:变量的初始化(续),#includeusingnamespacestd;intmain()constdoublepi(3.14159);intradius(0);coutradius;coutNowtheradiusischangedto:radiusn;cout“PIisstill:”pin;return0;/观察:通过调试工具跟踪观察变量。,25,补充2-4:整数变量的定义与输出,主要知识点:有符号整数与无符号整数的差别无符号整数unsignedshort取值范围为065535;有符号整数short的取值范围为-3276832767;如果超出数值类型取值范围,则会出现数值溢出。,26,补充2-4:整数变量的定义与输出(续),#includeusingnamespacestd;intmain()shortinti;unsignedshortintj;j=50000;i=j;cout“Shortintis:”iendl;cout“Shortunsignedintis:”jendl;return0;/观察思考:将正数50000赋值给变量i以后,输出i的结果是什么?为什么?输出j的结果是什么?为什么?,27,补充2-5:不同类型整数的最值,主要知识点:整数类型变量标准C+中有6种整数类型,它们是short、int、long、unsignedshort、unsignedint和unsignedlong。C+头文件limits中定义了一系列符号常量来表示这些最值。,28,补充2-5:不同类型整数的最值(续),#include#include#includeusingnamespacestd;intmain()cout”Minofshortis:”SHRT_MINendl;cout”Maxofshortis:”SHRT_MAXendl;cout”Minofintis:”INT_MINendl;cout”Maxofintis:”INT_MAXendl;cout”Minoflongis:”LONG_MINendl;cout”Maxoflongis:”LONG_MAXendl;cout”Maxofunsignedshortis:”USHRT_MAXendl;cout”Maxofunsignedintis:”UINT_MAXendl;cout”Maxofunsignedlongis:”ULONG_MAXisampleoctosamplehexhsample;coutisample;octosample;hexhsampleendl;isample=123;osample=0173;hsample=0 x7B;ulsample=4294967295UL;,31,补充2-6(续),coutdecisample;octisample;hexisampleendl;coutdecosample;octosample;hexosampleendl;coutdechsample;octhsample;hexhsampleendl;coutdeculsample;octulsample;hexulsampleendl;return0;/观察:123、0173、0 x7B是同一个数的不同进制表示形式,输入和输出时都可以采用不同的进制。,32,补充2-7:不同类型浮点数的应用,主要知识点:浮点类型文字常量默认情况下浮点文字常量的类型是double,float的浮点文字常量,需要后缀f或者Flongdouble的浮点文字常量,后缀l或者LC+标准没有规定每一种浮点类型的字节数,如果需要知道字节数,可以用sizeof运算得到。,33,补充2-7:不同类型浮点数的应用(续),#include#includeusingnamespacestd;constfloatPI_FLOAT=3.1415926f;constdoublePI_DOUBLE=3.1415926;constlongdoublePI_LDOUBLE=3.1415926;intmain()floatnRadiusFloat=5.5f,nAreaFloat;doublenRadiusDouble=5.5,nAreaDouble;longdoublenRadiusLDouble=5.5,nAreaLDouble;nAreaFloat=PI_FLOAT*nRadiusFloat*nRadiusFloat;nAreaDouble=PI_DOUBLE*nRadiusDouble*nRadiusDouble;,34,补充2-7(续),nAreaLDouble=PI_DOUBLE*nRadiusDouble*nRadiusDouble;cout“nAreaFloat=”nAreaFloat”,sizeof(nAreaFloat)=”sizeof(nAreaFloat)endl;cout“nAreaDouble=”nAreaDouble”,sizeof(nAreaDouble)=”sizeof(nAreaDouble)endl;cout“nAreaLDouble=”nAreaLDouble”,sizeof(nAreaLDouble)=”sizeof(nAreaLDouble)endl;return0;/观察运行结果,35,补充2-8:字符数据的应用,主要知识点:字符常量、字符串常量、转义序列字符常量的一般形式是单引号括起来的一个字符;一些不可显示的字符,无法通过键盘输入,可以用转义序列来表示。,36,补充2-8:字符数据的应用(续),#includeusingnamespacestd;intmain()coutAaendl;/输出普通字符coutonettwotthreen;/使用水平制表符cout123bb45n;/使用退格符coutAlertan;/使用响铃键return0;/观察运行结果,37,补充2-9:定义bool类型的变量并进行算术运算,主要知识点:bool类型的应用在算术运算表达式里,当表达式需要整数时,bool值将被转化为int,true为1,false为0。如果需要将整数转换为bool值,那么0转换为false,所有非0值都为true。,38,补充2-9:定义bool类型的变量并进行算术运算(续),#includeusingnamespacestd;intmain()boolbV1=true,bV2=false;cout”boolvaluebV1=”bV1endl;cout”boolvaluebV2=”bV2endl;intnV1=bV1,nV2=0;bV1=nV2;cout”intvaluenV1=”nV1endl;cout”boolvaluebV1=”bV1endl;return0;/观察程序运行过程中内存中bool变量的值,39,算术运算符与算术表达式,基本算术运算符+-*/(若整数相除,结果取整)%(取余,操作数为整数)优先级与结合性先乘除,后加减,同级自左至右+,-(自增、自减)例:i+;-j;,40,2.2基本数据类型和表达式2.2.5运算符与表达式,补充2-10:算术运算,主要知识点:算术运算符的使用和相关注意事项算术运算符+、-、*、/的含义及运算次序与数学中是一样的,但是要注意两个整数相除时,结果是取整,小数部分会被截掉。%运算符的作用是两数相除,取余数作为结果。+、-运算符实现变量值增加1和减小1的功能。后置的情况是先使用变量的值然后增1或减1;前置的情况是变量先增加1或减小1之后再参与其他运算。,41,补充2-10:算术运算(续),#includeusingnamespacestd;intmain()intval1=24;intval2=5;doubleval3=24;doubleval4=5;cout“int/int,24/5=”val1/val2endl;cout“int/int,24%5=”val1%val2endl;val2=-5;cout“int/int,24%(-5)=”val1%val2endl;cout“double/double,24/5=”val3/val4endl;,42,补充2-10(续),/cout“double/double,24%5=”val3%val4endl;cout“double/int,24/5=”val3/val2endl;cout“int/double,24/5=”val1/val4endl;val1=5;cout“val1=”val1endl;coutval1+“,”;cout+val1”,”;coutval1-”,”;cout-val1endl;val1=5;cout“val1=”val1endl;coutval1+”,”+val1”,”val1-”,”-val1=,intmain()intival1,ival2;doublefval;charcval;ival1=1;ival2=2;coutival1=ival1endl;coutival2=ival2endl;ival1=ival2=0;ival1=fval=0;ival1=cval=a;,48,补充2-11(续),coutival1=ival1endl;coutival2=ival2endl;coutfval=fvalendl;coutcval=cvalendl;intival3=fval=8;coutival3=ival3endl;coutfval=fvalendl;cout“ival1=”ival1”,ival2=”ival2endl;ival2=-ival1+;cout”ival2=-ival1+,ival1=”ival1“,ival2=”ival2endl;ival1=+ival2+ival1;cout”ival1=+ival2+ival1,ival1=”ival1b,cb),56,2.2基本数据类型和表达式2.2.5运算符与表达式,条件运算符与条件表达式(续),注意:条件运算符优先级高于赋值运算符,低于逻辑运算符表达式2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型。例:x=ab?a:b;,57,2.2基本数据类型和表达式2.2.5运算符与表达式,补充2-12:比较数据并输出结果,主要知识点:关系运算、相等运算、逻辑运算关系运算、相等比较运算、逻辑运算的结果都是bool类型;关系运算用于比较数据之间的大小关系;相等比较运算比较两个数据相等与否;逻辑运算可以将多个关系表达式和相等表达式组合起来,构成复杂的逻辑判断。,58,补充2-12:比较数据并输出结果(续),#includeusingnamespacestd;intmain()intival1=1,ival2=2,ival3=3,ival4=4;boolnFlag;nFlag=ival1=ival2?true:false;cout”Is1equals2?:”nFlagendl;nFlag=ival1ival2?true:false;cout”Is1lessthan2?:”nFlagendl;nFlag=(ival1ival2/跟踪观察运行情况,59,sizeof运算符,语法形式sizeof(类型名)或sizeof表达式结果值:“类型名”所指定的类型或“表达式”的结果类型所占的字节数。例:sizeof(short)sizeofx,60,2.2基本数据类型和表达式2.2.5运算符与表达式,补充2-13:sizeof运算符的应用,主要知识点:sizeof运算对于C+标准中没有具体规定字节数的数据类型,以及自定义的复杂数据类型,如果需要在程序中知道其字节数,最简单、准确的办法就是使用sizeof运算。,61,补充2-13:sizeof运算符的应用(续),#include#include#includeusingnamespacestd;intmain()cout“sizeof(short)=”sizeof(short)endl;coutsizeof(unsignedshort)=sizeof(unsignedshort)endl;cout“sizeof(int)=”sizeof(int)endl;coutsizeof(unsignedint)=sizeof(unsignedint)endl;cout“sizeof(long)=”sizeof(long)endl;,62,补充2-13(续),coutsizeof(unsignedlong)=sizeof(unsignedlong)endl;coutsizeof(float)=sizeof(float)endl;cout“sizeof(double)=”sizeof(double)endl;coutsizeof(longdouble)=sizeof(longdouble)endl;coutsizeof(char)=sizeof(char))右移后,低位:舍弃高位:无符号数:补0有符号数:补“符号位”,70,2.2基本数据类型和表达式2.2.5运算符与表达式,补充2-14:位运算符的应用,#include#includeusingnamespacestd;voidmain()cout“15=”(15)endl;cout表达式.在输入语句中,提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是用于存放输入值的变量。例如:inta,b;cinab;,81,2.3数据的输入和输出,2.3.3简单的I/O格式控制,82,2.3数据的输入和输出,常用的I/O流类库操纵符,例:coutsetw(5)setprecision(3)y)couty)coutx;elsecouty;if(x!=y)if(xy)coutyendl;elsecoutxyendl;elsecoutx=yday;switch(day)case0:coutSundayendl;break;case1:coutMondayendl;break;case2:coutTuesdayendl;break;case3:coutWednesdayendl;break;case4:coutThursdayendl;break;case5:coutFridayendl;break;case6:coutSaturdayendl;break;default:coutDayoutofrangeSunday.Saturdayendl;break;return0;,例2-4(续),switch语句(续),90,2.4算法的基本控制结构2.4.2多重选择结构,一般形式switch(表达式)case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1,执行顺序以case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。,switch语句(续),case分支可包含多个语句,且不用。表达式、判断值都是int型或char型。若干分支执行内容相同可共用一组语句。,91,2.4算法的基本控制结构2.4.2多重选择结构,2.4.3循环结构while语句,92,2.4算法的基本控制结构2.4.3循环结构,例2-5求自然数110之和分析:本题需要用累加算法,累加过程是一个循环过程,可以用while语句实现。,例2-5(续),93,2.4算法的基本控制结构2.4.3循环结构,#includeusingnamespacestd;intmain()inti=1,sum=0;while(i=10)sum+=i;/相当于sum=sum+i;i+;coutsum=sumn;coutThenumberinreverseorderis;doright_digit=n%10;coutright_digit;n/=10;/相当于n=n/10while(n!=0);coutendl;return0;,例2-6:输入一个数,将各位数字翻转后输出,例2-6(续),96,2.4算法的基本控制结构2.4.3循环结构,运行结果:Enterthenumber:365Thenumberinreverseorderis563,do-while语句(续),97,2.4算法的基本控制结构2.4.3循环结构,一般形式do语句while(表达式),执行顺序先执行循环体语句,后判断条件。表达式为true时,继续执行循环体与while语句的比较:while语句执行顺序先判断表达式的值,为true时,再执行语句,例2-7用do-while语句编程,求自然数110之和,/2_7.cpp#includeusingnamespacestd;intmain()inti=1,sum=0;dosum+=i;i+;while(i=10);coutsum=sumi;while(i=10)sum+=i;i+;coutsum=sumi;dosum+=i;i+;while(i=10);coutsum=sumn;coutNumbernFactors;for(intk=1;k=n;k+)if(n%k=0)coutk;coutendl;return0;,例2-8(续),102,2.4算法的基本控制结构2.4.3循环结构,运行结果1:Enterapositiveinteger:36Number36Factors123469121836运行结果2:Enterapositiveinteger:7Number7Factors17,for语句(续),103,2.4算法的基本控制结构2.4.3循环结构,语法形式for(初始语句;表达式1;表达式2)语句,2.4.4循环结构与选择结构的嵌套,104,2.4算法的基本控制结构,#includeusingnamespacestd;intmain()for(intn=100;n=200;n+)if(n%3!=0)cout0)i+=1;if(nn;coutCountofpositiveintegers:iendl;coutCountofnegativeintegers:jendl;return0;,2.4.5其他控制语句,break语句使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不宜用在别处。continue语句结束本次循环,接着判断是否执行下一次循环。goto语句goto语句的作用是使程序的执行流程跳转到语句标号所指定的语句。,107,2.4算法的基本控制结构,2.5枚举类型,只要将需要的变量值一一列举出来,便构成了一个枚举类型。枚举类型的声明形式如下:enum枚举类型名变量值列表;例如:enumWeekdaySUN,MON,TUE,WED,THU,FRI,SAT;,108,2.5枚举类型,枚举类型应用说明,对枚举元素按常量处理,不能对它们赋值。例如,不能写:SUN=0;枚举元素具有默认值,它们依次为:0,1,2,.。也可以在声明时另行指定枚举元素的值,如:enumWeekdaySUN=7,MON=1,TUE,WED,THU,FRI,SAT;枚举值可以进行关系运算。整数值不能直接赋给枚举变量,如需要将整数赋值给枚举变量,应进行强制类型转换。,109,2.5枚举类型,例2-11,设某次体育比赛的结果有四种可能:胜(WIN)、负(LOSE)、平局(TIE)、比赛取消(CANCEL),编写程序顺序输出这四种情况。分析:由于比赛结果只有四种可能,所以可以声明一个枚举类型,声明一个枚举类型的变量来存放比赛结果。,110,2.5枚举类型,例2-11(续),111,2.5枚举类型,#includeusingnamespacestd;enumGameResultWIN,LOSE,TIE,CANCEL;intmain()GameResultresult;enumGameResultomit=CANCEL;for(intcount=WIN;count=CANCEL;count+)result=GameResult(count);if(result=omit)coutThegamewascancelledendl;elsecoutThegamewasplayed;if(result=WIN)coutandwewon!;if(result=LOSE)coutandwelost.;coutendl;return0;,例2-11(续),112,2.5枚举类型,运行结果Thegamewasplayedandwewon!Thegamewasplayedandwelost.ThegamewasplayedThegamewascancelled,2.6.1变量的实现机制,站在目标代码的角度上看问题变量具有两个重要属性数据类型和变量名它们都用文字表示,便于人们理解,但不便于CPU识别,因此它们不能出现在目标代码中;下面将讨论它们在目标代码中的表示方式。,113,2.6深度探索,变量名,源代码中,变量依靠变量名来标识;目标代码中,变量依靠地址来标识,每个变量的地址互不相同。,114,2.6深度探索2.6.1变量的实现机制,inta,b;intmain()a+;b+;return0;,incl0 x80495f8incl0 x80495fc,数据类型,任何数据在内存中都是用二进制串的形式表示的;一串二进制数,只有确定了类型,才有真实的含义。例:10111111,10000000,00000000,00000000解释为int型:-1,082,130,432解释为unsigned型:3,212,836,864解释为float型:-1.0,115,2.6深度探索2.6.1变量的实现机制,目标代码体现数据类型的方式,类型的特性蕴含于操作之中;对不同数据类型

温馨提示

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

评论

0/150

提交评论