C++程序设计_教学幻灯片PPT课件_第1页
C++程序设计_教学幻灯片PPT课件_第2页
C++程序设计_教学幻灯片PPT课件_第3页
C++程序设计_教学幻灯片PPT课件_第4页
C++程序设计_教学幻灯片PPT课件_第5页
已阅读5页,还剩498页未读 继续免费阅读

下载本文档

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

文档简介

精选,1,C+程序设计,精选,2,课程安排及要求,课程信息:总学时:48学时上课:24学时上机:24学时考试方式:待定课堂要求:1.不允许无故缺席,缺席一次,平时成绩扣10分。2.采取不定时点名,累积缺席达3次,取消该门课考试资格。上机要求:上机玩游戏、聊天者,发现一次扣平时成绩2分,累计8次,平时成绩记0分,精选,3,关于C+语言课程,C与C+(C加加,see-plus-plus)贝尔实验室于二十世纪八十年代在C语言的基础上开发的。C+是C语言的超集,包含了C语言的所有内容,同时增加了面向对象编程方面的内容。,C+与Java和C#C+是Java和C#的始祖。Java和C#是C+的子集与简化因此,学习C+后学习Java与C#会事半工倍、倍感轻松。,精选,4,参考书目与课时安排,参考书目C+程序设计导学.李春葆著.北京:清华大学出版社C+语言程序设计教程杨进才沈显君刘蓉编著清华大学出版社C+Primer(3RD)中文版.StanleyB.Lippman,JoseeLajoie著.潘爱民,张丽译.北京:中国电力出版社,精选,5,如何学好C+,能细能粗在面向过程编程部分,对数据类型、运算符、语句等要注重细节。做到细致掌握。在面向对象部分重在对概念的掌握,对每个概念回答是什么?为什么?如何?这三个问题。做到掌握思想。,重视实践和学好所有编程语言一样,做到“上机、上机、再上机”。,利用资源利用网络资源进行学习、交流、答疑。如清华大学的BBS站的C+学习园地上有大量的帖子。地址:,第1章C+编程简介,本章内容,1.1计算机程序设计语言1.2面向过程的程序设计1.3面向对象的程序设计1.4C+概述1.5C+程序实例,1.1计算机程序设计语言,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU指令系统,由0、1序列构成的指令码组成如:10000000加10010000减,用助记符号描述的指令系统如ADDAX,BX,程序设计依赖解决问题的过程,客观事物描述成具有属性和行为的对象;同一类对象的共同属性和行为形成类;封装对象间通过发送和接受消息发生联系;类的继承与多态性可以提供使用现成类的机制,从而实现代码的重用.,程序设计关键是定义类,并由类实例化成对象,接近人的自然语言习惯,如:100+200,1.2面向过程的程序设计,本质:通过程序来进行数据处理高级语言:1、面向过程的语言BASIC、PASCAL、C2、面向对象的语言C+、JAVA,1.2面向过程的程序设计,例如:要向屏幕打印一个“A”字符1、BASIC语言:PRINT“A”2、PASCAL语言:writeln(A);3、C语言:printf(“A”);4、C+语言:cout“A”;5、JAVA语言:System.out.print(A);,主要思想自顶向下逐步求精核心算法:为解决某一应用问题而采用的解题步骤。一个计算机程序可以看成是由一系列任务组成的,任何一项任务如果过于复杂就将其分解成一系列较小的子任务,直至每一项任务都很小,很容易解决。,1.2面向过程的程序设计,基本结构,1.2面向过程的程序设计,“面向过程的程序设计”不足:1、生产率低下,软件代码重用程度低;2、软件维护困难。“面向对象的程序设计”本质:把数据和处理数据的过程当成一个整体即对象。“面向对象的程序设计”优点:与人类习惯的思维方式一致。可重用性好。可维护性好。,1.3面向对象的程序设计,对象是实现世界中的一个实际存在的事物,张三,李四,类是具有相同属性和服务的一组对象的概括,属性,服务,性别,年龄,说话,行走,新类,消息,1.3面向对象的程序设计,封装:信息隐蔽:通过将类定义的成员设置成不同的访问权限来实现。继承和派生:在程序中定义类,当出现两个或多个类享有相似的情况,就不必重复在类中定义,可通过继承,从其他类派生出其他类。多态性:指在一般类中定义的属性和行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。,1.3面向对象的程序设计,1.4C+语言概述,全面支持C,C+语言的产生,1983加入类,C,1994标准化,C+语言的特点,面向对象,比C更完善、安全、高效,1.3C+程序开发过程,程序代码的录入、修改,执行预处理指令,词法分析、语法分析后生成目标程序,与其它目标程序或库连接,生成可执行程序,1.4C+程序实例,/*程序文件名:p1_1.cpp*本程序显示:HelloC+!*设计者:鲁莹时间:8-27-2007*/#include/载入头文件usingnamespacestd;/使用命名空间stdvoidmain()/程序入口coutHelloC+!endl;,运行结果:HelloC+!,在C+程序中,注释块由“/*”开始,由“*/”结束,可以实现多行注释。也可使用“/”进行单行注释。,C+语言的预处理命令都是以“#”号开头。iostream是一个头文件,系统头文件不带.h后缀,cout为标准输出流对象,它与显示器相连。是插入操作符,endl为换行符号。整个语句的功能是将”HelloC+!”字符串与endl依次插入到cout中,main是主函数名,一个C+语言程序有且仅有一个main函数。C+程序执行时就是从main函数开始.,C+语言规定:语句以分号结束,?为什么:标准C+库提供的对象等都放在标准名字空间std中,要使用它们,必须要声明使用标准名字空间std.,使用标准名字空间std有3种方式:整体声明usingnamespacestd;使用时单个对象临时声明std:coutHelloC+对象1对象2.对象n;,cout对象1对象2.连用,使用格式为:,意思是从标准输入流对象键盘上提取n个数据分别给对象1、对象2、.、对象n。,C+中使用对象cout作为标准输出流对象,通常代表显示设备,cout与插入操作符连用,使用格式为:,意思是依次从将对象1、对象2、.、对象n插入到标准输出流对象中,从而实现了对象在显示器上的输出.,C+输入/输出简介,本章小结,程序设计语言经历了从机器语言、汇编语言、高级语言、面向对象的语言的发展过程,使得编程语言与人的自然语言越来越接近,编程效率越来越高。程序设计方法经历了面向过程的方法、结构化的方法、面向对象的方法的发展过程。C+语言具有全面兼容C与面向对象的特点,支持结构化与面向对象程序设计方法。面向对象的基本概念有:对象、类、封装、继承、消息、多态性。C+程序设计的步骤有编辑、预编译、编译、连接、调试与运行。程序注释有两种方法,应培养给程序写注释的好习惯。预处理指令include在编译的预处理阶段将头文件搬到程序中,包含文件是C+程序的必不可少的部分。标准C+的类库定义在名字空间std中,可以通过三种方法使用名字空间。,实验一,熟悉Vc+上机环境编程实现在屏幕上显示输出“Hello,VC+!”实现在屏幕上显示输出以下图形:,*,精选,23,第2章C+数据类型,主讲:鲁莹,本章内容,2.1数据类型概述2.2常量与变量2.3基本类型2.4运算符和表达式2.5类型转换,基本整型(int)短整型(short)整型长整型(long)无符号型(unsigned)基本类型单精度型(float)实型(浮点型)双精度型(double)字符型(char)扩展双精度型(longdouble)数据类型布尔型(bool)空类型(void)数组类型()指针类型(*)构造类型结构体类型(struct)共用体类型(union)枚举型(enum)类(class),2.1数据类型概述,2.1数据类型概述,数据类型和内存空间不同的数据类型,加上不同的修饰符就具有了不同的特点,在内存中占用的空间也不同,因而其所能表示的数值范围也不尽相同。内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。,2.1数据类型概述,注意整型int的长度等于机器的字长:16位机:int=2字节;32位机:int=4字节。但是short和long表示的数据长度是固定的,任何支持标准C+的编译器都是如此,因而如果需要编写可移植性好的程序,应将整型声明为short或long。,2.1数据类型概述,例题编写一个程序,输出基本数据类型char,int,float,double,bool的长度。提示:使用sizeof(数据类型)能够获取不同数据类型的长度。,2.1数据类型概述,/输出基本数据类型的长度#includeusingnamespacestd;voidmain()cout“char:”sizeof(char)“字节n;coutint:sizeof(int)字节n;coutfloat:sizeof(float)字节n;coutdouble:sizeof(double)字节n;coutbool:sizeof(bool)字节n;,2.2常量与变量,2.2.1常量2.2.2变量,#includeusingnamespacestd;voidmain(void)constintPRICE=30;intnum,total;floatv,r,h;num=10;total=num*PRICE;couttotalendl;r=2.5;h=3.2;v=3.14159*r*r*h;coutvendl;,Page31,2.2.1常量,严格来说,常量又分成符号常量和常数。符号常量:代表一个固定不变值的名字常数(整型和浮点型):程序中使用的具体的数据,2.2.1常量与符号常量,符号常量C+中提供了一个关键字const,用来区分常量和变量。并且由于常量代表一个固定的值,并且该值在程序运行过程中不能够被改变,所以要求常量在定义的时候必须进行初始化。定义形式有:const数据类型符号常量名=初始值;例如:constdoublePI=3.1415926;,注意:constdoublePI;PI=3.1415926;/errorconstdoublePI=;/errorconstintM=max(15,23);/error#define符号常量名初始值例如:#definePI3.1415926,2.2.1常量与符号常量,2.2.2变量,什么是变量?在C+中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。,2.2.2变量,变量有三个基本要素:名字、类型和值。C+的程序设计中,在使用变量前必须首先定义变量,即指定变量的名称与数据类型。变量一经定义,系统根据其数据类型在内存中为该变量分配一定的存储单元,在该存储单元中可存放变量的值。,变量的定义,一般格式为:数据类型关键字变量名表;说明:(1)变量名表:可以包含若干个变量,彼此间用逗号分开。变量名必须是合法的标识符,不能用C+的关键字作为变量名。(2)数据类型:变量可以被定义为基本数据类型和构造类型。例如:intx;floatarea,width,length;,变量的定义,注意:与C语言不同,C+语言中的变量定义不必位于程序的开始,可以穿插在其它语句中间。变量最好在使用时才定义,这样可以增加程序的可读性,避免变量发生混淆。,初始化变量,在定义变量的同时给其一个初始值,称为初始化变量。例如:unsignedshortwidth=5;longwidth=8,length=8;doublearea,radius=20;,初始化变量,#includeusingnamespacestd;voidmain()IntmyAge=18;cout“myAge=”myAgeendl;myAge=20;cout“myAge=”myAgeb?a:b;,基本数据类型和表达式,精选,66,sizeof运算符,语法形式sizeof(类型名)或sizeof(表达式)结果值:“类型名”所指定的类型或“表达式”的结果类型所占的字节数。例:sizeof(short)sizeof(x),基本数据类型和表达式,精选,67,位运算按位与(,基本数据类型和表达式,精选,69,位运算按位异或(),运算规则两个操作数进行异或:若对应位相同,则结果该位为0,若对应位不同,则结果该位为1,举例:计算071052071:00111001052:()00101010071052:00010011,基本数据类型和表达式,精选,70,位运算按位异或(),用途:使特定位翻转(与0异或保持原值,与1异或取反)例如:要使01111010低四位翻转:01111010()0000111101110101,基本数据类型和表达式,精选,71,位运算取反(),单目运算符,对一个二进制数按位取反。例:025:0000000000010101025:1111111111101010,基本数据类型和表达式,精选,72,位运算移位,左移运算()右移后,低位:舍弃高位:无符号数:补0有符号数:补“符号位”,基本数据类型和表达式,精选,73,运算符优先级,基本数据类型和表达式,(1)运算符的优先级按单目、双目、三目、赋值依次降低。,(2)算术、移位、关系、按位、逻辑运算的优先级依次降低。,精选,74,运算符优先级,括号+,-,sizeof*,/,%+,-=,!=位运算或分成多行:cout表达式1表达式2”是预定义的提取符,使用“”从cin输入流中提取数据,便可实现键盘输入。格式如下:cin数据1数据2数据n;也可写成多行:cin数据1数据2数据n;,floatf;longl;cinfl;,精选,85,按特定的格式进行输入输出,例如对doublepi=3.1415;如果希望显示的是3.14,即保留两位小数,且域宽为5个字符并换行,此时如用下面的语句则不能完成。cout预处理命令。常用控制符如表3.1所示。,3.1.2C+语言格式输入输出,精选,86,表3.1I/O流的常用控制符,Whatisexactoutput?,#include#include/forsetprecision()usingnamespacestd;voidmain()floatmyNumber=123.4587;coutfixedshowpoint;/usedecimalformat/printdecimalpointscout“Numberis”setprecision(3)myNumberendl;/setprecision,Outputofprogram:Numberis123.459,#include#includeusingnamespacestd;voidmain()intmyNumber=123;intyourNumber=5;coutsetw(10)“Mine”setw(10)“Yours”endl;coutsetw(10)myNumbersetw(10)yourNumberendl;,Whatisexactoutput?,12345678901234567890MineYours1235,#include#include/forsetprecision()usingnamespacestd;voidmain()floatmyNumber=123.4;floatyourNumber=3.14159;coutfixedshowpoint;/usedecimalformat/printdecimalpointscout“Numbersare:”setprecision(4)endlsetw(10)myNumberendlsetw(10)yourNumberendl;,Numbersare:123.40003.1416,Whatisexactoutput?,floatx=312.0;floaty=4.827;coutfixedshowpoint;coutsetprecision(2)setw(10)xendl312.00setw(10)yendl;4.83coutsetprecision(1)setw(10)xendl312.0setw(10)yendl;4.8coutsetprecision(5)setw(7)xendl312.00000setw(7)yb;result=3*a-2*b+1;cout“resultis”resultab;x=b;if(ab)x=a;coutxab;if(ab)x=a;elsex=b;coutx=a,实习4、5:,1.顺序结构程序设计:P253实验一:142.选择结构程序设计:P253实验二:3、4,顺序结构与选择结构程序设计,精选,108,3.5循环结构程序设计,循环结构:循环结构又称重复结构,是指在一定条件下反复执行一个程序块的结构。循环结构也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直到型循环结构两种。,精选,109,3.5循环结构程序设计,循环结构:循环结构又称重复结构,是指在一定条件下反复执行一个程序块的结构。循环结构也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直到型循环结构两种。,当型循环的结构:当给定的条件p成立时,执行A框操作,执行完A操作后,再判断p条件是否成立,如果成立,再次执行A操作,如此重复执行A操作,直到判断p条件不成立才停止循环。此时不执行A操作,而从出口b脱离循环结构。,直到型循环的结构:先执行A框操作,然后判断给定条件p是否成立,如果不成立,再次执行A操作;然后再对p进行判断,如此反复,直到给定的p条件成立为止。此时不再执行A框,从出口b脱离循环。,精选,110,一个循环结构应由四个主要部分构成:循环的工作部分。即循环体,完成循环程序的主要工作。循环的修改部分。它保证循环体在循环过程中,有关的量能按一定的规律变化(循环变量)。循环的控制部分。它保证循环程序按规定的循环条件控制循环正确进行(循环条件)。循环的初始部分。它是保证循环结构能够开始执行的语句,往往编写在程序的开头部分,逻辑上先从这一部分开始执行(初始条件)。,精选,111,3.5.1while语句3.5.2do-while语句3.5.3for语句3.5.4跳转语句break和continue3.5.5循环的嵌套,3.5循环结构程序设计,精选,112,3.5.1while语句,一般形式:while(表达式)语句;/循环体执行过程:首先判断括号内最初表达式的值,如为0则跳到循环体外;如为非0,就执行语句(循环体),执行完循环体后再次判断表达式的值,如此反复进行直到(表达式)的值为假时结束while循环。,精选,113,例3.23编写程序计算1+2+3+.+99+100,#includevoidmain()intsum,n;n=1;/初始部分(初始条件)sum=0;while(n=100)/控制部分(循环条件)/工作部分(循环体)sum+=n;n+;/修改部分(循环变量)coutsum=sum0)if(xx;cout“小于60的正整数个数:”c1endl;cout“大于60的正整数个数:”c2endl;,例3.24分别统计出键入的所有正整数中=60的数据的个数。,精选,115,3.5.2do-while语句,一般形式:do语句;/循环体while(表达式);do-while与while比较:do-while语句是先执行循环体,再进行判断,无论条件是否成立,do-while语句至少执行循环体一次,它是直到型循环。而while语句则要先对条件进行判断,只有当条件成立才执行循环体,因此它是当型循环。对于一个循环问题,我们既可以用当型循环也可以用直到型循环来解决问题。,精选,116,#include/用do-while结构voidmain()intsum,n;n=1;/初始部分(初始条件)sum=0;do/工作部分(循环体)sum+=n;n+;/修改部分(循环变量)while(n=100);/控制部分(循环条件)coutsum=sumendl;,例3.25编写程序计算1+2+3+.+99+100,精选,117,3.5.3for语句,一般形式:for(表达式1;表达式2;表达式3)语句;/循环体说明:三个表达式的作用:表达式1一般用来初始化循环控制变量;表达式2为表示循环条件的表达式,用作循环控制条件,其作用与前两类循环语句中的表达式完全一样,用法也基本相同;表达式3用来修改循环控制变量,用以表示循环控制变量的增量或减量,常用自增或自减运算(注意:三表达式必须用分号隔开)。语句:不仅可以是单个语句,也可以是复合语句或空语句。,执行过程:先计算表达式1的值,接着计算表达式2的值并判断,若表达式2的值非零则执行循环体的语句,然后计算表达式3的值,再从计算表达式2的值开始下一次循环,重复这种先计算判断,后执行再计算的过程,直到某次(也可能是第一次)表达式2的值为零时结束循环。,精选,118,例3.26编写程序计算1+2+3+.+99+100,#include/用for结构voidmain()intsum,n;sum=0;for(n=1;n=100;n+)sum+=n;coutsum=sumendl;,n=1;while(n=100)sum+=n;n+;,精选,119,for(表达式1;表达式2;表达式3),说明:三个表达式的类型:表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,即可是任意表达式,只要其值为非零,就执行循环体。表达式1和表达式3一般为简单表达式(赋值、自增、自减表达式),但也可以使用逗号表达式,可一次完成对多个变量赋初值和修改多个变量的功能,例如:for(i=0,j=100;ij;i+,j-)k=i+j;,精选,120,例3.27逗号表达式使用实例,#include/用for结构voidmain()intsum,n;for(sum=0,n=1;n=100;n+)sum+=n;coutsum=sumendl;,逗号运算符可以将多个表达式连接起来,其功能是从左向右求解各个表达式,而整个表达式的值为最后求解的表达式的值。用逗号连接起来的表达式称为逗号表达式。逗号表达式的一般形式是:表达式1,表达式2,表达式n逗号运算符的优先级最低,并且具有左结合性。比如,逗号表达式3+5,6+7的值是13。逗号表达式在C+程序中用途比较少,通常只用于for循环语句中。,精选,121,说明:三个表达式的省略使用:for允许省略或部分省略三个表达式,但用作分隔符的两个分号绝不能省略。以下是省略表达式的几种情况:,for(表达式1;表达式2;表达式3),省略表达式1此时应在for语句前给循环变量赋初值。语句格式为:for(;表达式2;表达式3)语句;,#includevoidmain()intsum,n;sum=0;n=1;for(;n=100;n+)sum+=n;coutsum=sum100)break;sum+=n;coutsum=sumendl;,精选,123,说明:三个表达式的省略使用:for允许省略或部分省略三个表达式,但用作分隔符的两个分号绝不能省略。,for(表达式1;表达式2;表达式3),省略表达式3此时需在循环体内使循环控制变量递变,以保证循环正常结束。语句格式为:for(表达式1;表达式2;)语句;,#includevoidmain()intsum,n;sum=0;for(n=1;n=100;)sum+=n+;coutsum=sum100)break;sum+=n+;coutsum=suma;/a代表增长率if(a=2*c)break;cout增长率为a时产值增长一倍所需年yearendl;,例3.28已知产值及产值增长速度,编写计算产值增长一倍所需的年数的程序。,运行结果:请输入增长率:0.2增长率为0.2时产值增长一倍所需年数为:4请输入增长率:0,精选,127,continue语句,continue语句也用于循环结构中,它的作用是忽略它之后到循环终止的程序,而转向下一次循环。和break语句一样,continue语句通常也是和if语句结合,一同使用于循环结构中。continue和break的作用有相似之处,却有着根本区别,continue语句只是结束本次循环,还要进行下一次循环,而不是要结束整个循环;break则是结束整个循环,转到循环体外面去了。,statement1;continue;statementn;,continue;,精选,128,#includevoidmain()inti,count=0;for(i=100;i=150;+i)if(i%3=0)contiune;couti“”;count+;if(count%5=0)coutendl;/一行输出5个数据coutendl;,例3.29将100150之间不能被3整除的数输出。,程序的运行结果为:100101103104106107109110112113115116118119121122124125127128130131133134136137139140142143145146148149,精选,129,3.5.5循环的嵌套,一个循环体内包含另一个完整的循环结构称为循环的嵌套,内嵌的循环中还可以嵌套循环,这就是多重循环。三种循环可以互相嵌套,但在循环的嵌套中要注意,内层循环应完全在外层循环里面,也就是不允许出现交叉。在嵌套的循环结构中,如用缺口矩形表示每层循环结构时,则图3.8中(a)(b)是正确的多层循环结构,而(c)是错误的多层循环结构,因为它出现了循环结构的交叉。另外,使用循环结构时必须注意,如果循环的控制条件永远成立,循环体将永无休止地反复执行,程序就将陷入“死循环”,这显然是应当防止的。,精选,130,例3.35实现打印九九乘法表。,1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81,1.i,1:9,精选,131,#include#includevoidmain()inti,j,result;i=1;j=1;cout九九乘法表:n;while(i=9)j=1;while(j=i)result=i*j;coutj+*i=setw(2)result;i+;coutn;,上机实习:要求改为for循环实现,实习6:,1.假设我国现在人口14亿,若年增长率为1.2%,度计算多少年后我国人口增加到或超过20亿。2.分别用3种循环结构(while、do-while、for)求n!,n值由键盘键入。3.输出以下图形:,循环结构程序设计,*,*,精选,133,例1输出100以内的所有素数。,3.6程序设计举例(习题课),算法分析:判断一个数m是否是素数的算法如下:让m被2到之中的整数除,如果m能被这些数之中的任何一个整除,则说明m不是素数;否则m是素数。对100以内的每一个自然数进行素数的判断,若是则输出之。上述步骤用一个内循环实现,步骤用一个外循环实现。,/i=2k,注意退出循环的两种情况:,精选,134,3.6程序设计举例(习题课),介绍几个常用的数学函数:intabs(intx);|x|doublefabs(doublex);doublelog(doubelx);ln(x)doublelog10(doublex);log10(x)doubleexp(doublex);exdoublepow(doublex,doubley);xydoubelsqrt(doublex);,精选,135,#include#include#includevoidmain()intm,i,k,count=0;for(m=2;m=k+1)coutsetw(4)m;count+;if(count%5=0)coutm;if(nm)temp=n;n=m;m=temp;r=n%m;while(r!=0)n=m;m=r;r=n%m;cout最大公约数为:m=3),即从第3个数开始,每个数等于前2个数之和。,算法分析:,例3求Fibonacci数列的前40个数,#include#includevoidmain()longintf1=1,f2=1;/*定义并初始化数列的头2个数*/inti;for(i=1;i=20;i+)/*1组2个,20组40个数*/coutsetw(12)f1setw(12)f2;/*输出当前的2个数*/if(i%2=0)coutendl;f1=f1+f2;f2=f2+f1;,迭代思想,精选,139,例4求1!+2!+10!,循环结构中,最常用的算法就是累加和累乘。一般累加和累乘是通过循环结构和循环体内的一句表示累加性或累乘性语句来实现的。我们通常把程序中sum变量称为累加器、fact变量称为累乘器。要注意,sum的初值赋为0,而fact的初值赋为1。另外,赋初值的操作一定要在循环结构外进行。本例要用一个双循环来实现,外循环用来求累加,内循环用来求累乘。,精选,140,例4求1!+2!+10!,#includeusingnamespacestd;voidmain()longintsum,fact,i,j;sum=0;for(i=1;i=10;i+)fact=1;for(j=1;j=i;j+)fact=fact*j;sum=sum+fact;coutsum=0.0000001)sum=sum+1/fact;i+;fact=fact*i;coutesumendl;,精选,143,例6百钱买百鸡,这是一个用“穷举法”解题的典型问题。“穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。,百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为:x+y+z=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。,精选,144,#include#includeusingnamespacestd;voidmain()intx,y,z;for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)if(x+y+z=100),方法一:最简单三个未知数列三重循环来实现。,精选,145,#include#includeusingnamespacestd;voidmain()intx,y,z;for(x=0;x=33;x+)for(y=0;y=50;y+)if(3*x+2*y+0.5*(100-x-y)=100)coutsetw(5)xsetw(5)ysetw(5)100-x-yendl;,方法二:从三个未知数的关系,利用两重循环来实现。,精选,146,#include#include#includeusingnamespacestd;voidmain()intx,y,z;time_tt1,t2;t1=time(NULL);for(x=0;x=100;x+)for(y=0;y=100;y+)for(z=0;z=100;z+)if(x+y+z=100),时间和日期函数需要的头文件,time_t是中定义的与时间有关的类型,使用longint表示系统的时间。,time()函数返回系统的当前时间,在本例中使用NULL即空指针为参数。,difftime(t2,t1)函数以秒为单位返回t2-t1的差。,实习7:,1.用for循环实现打印九九乘法表。2.求两个整数的最大公约数和最小公倍数,两个整数由键盘键入。3.,结构程序设计综合实验,4.用两种方法解百钱买百鸡问题,并进行时间分析。,第3章函数,C+语言程序设计教程第4章函数,制作人:鲁莹,第章函数,1.掌握函数的声明和定义、函数的调用及函数的参数传递过程;2.掌握关键字inline的含义与使用;3.掌握递归函数的使用;4.掌握函数重载的使用方法;5.掌握函数模板的使用方法;6.了解各类系统函数,掌握常用的系统函数的使用。,学习目标,C+语言程序设计教程第4章函数,精选,150,.函数的定义和声明,4.1.1函数的定义函数是一个命名的程序代码块,是程序完成其操作的场所,是将功能重复的程序段抽象出来所形成一个独立的、可重复使用的功能模块。定义函数的一般格式为:,返回类型函数名(数据类型1参数1,数据类型2参数2,.)语句序列;,形参表,C+语言程序设计教程第4章函数,说明:函数必须先定义才可以使用定义函数就是编写完成函数功能的程序块。,精选,151,.函数的定义和声明,在函数的定义中:返回类型为函数返回值的类型,可以是系统任一基本数据类型或用户已定义的一种数据类型,它是函数执行过程中通过return语句要求的返回值的类型,又称为该函数的类型。当一个函数不需要通过return语句返回一个值时,称为无返回值函数或无类型函数,此时需要使用void作为类型名。函数名是用户为函数所起的名字,它是一个标识符,应符合C+标识符的一般命名规则,用户通过使用这个函数名和实参表可以调用该函数。形式参数表可以包含任意多项(可以没有),当多于一项时,前后两个参数之间必须用逗号分开。用花括号括起来的语句序列组成了函数体,即函数所完成的具体操作,函数体一般分为3部分:第1部分为定义部分,定义函数所需要的局部常量与局部变量;第2部分为函数的功能部分,完成函数的功能;第3部分为返回值部分,返回函数的结果。如果函数体中没有任何语句,该函数称作空函数。每个函数都是一个功能独立的模块,绝不允许在一个函数体内定义另一个函数。,C+语言程序设计教程第4章函数,精选,152,.函数的定义和声明,C+语言程序设计教程第4章函数,运行结果:51515,精选,153,.函数的定义和声明,在C+程序中,使用函数前首先需要对函数原型进行声明,告诉编译器函数的名称、类型和形式参数。在C+中,函数原型声明原则如下:(1)如果函数定义在先,调用在后,调用前可以不必声明;如果函数定义在后,调用在先,调用前必须声明。(2)在程序设计中,为了使程序设计的逻辑结构清晰,一般将主要的函数放在程序的起始位置声明,这样也起到了列函数目录的作用。,C+语言程序设计教程第4章函数,精选,154,在C+中,函数原型声明原则如下:(1)如果函数定义在先,调用在后,调用前可以不必声明;如果函数定义在后,调用在先,调用前必须声明。(2)在程序设计中,为了使程序设计的逻辑结构清晰,一般将主要的函数放在程序的起始位置声明,这样也起到了列函数目录的作用。声明函数原型的形式如下:例如:intmax(intx,inty);intmax(int,int);,C+语言程序设计教程第4章函数,.1.2函数原型的声明,返回类型函数名(数据类型1参数1,数据类型2参数2,.);,精选,155,函数调用的一般形式为:各实际参数表中的实际参数应与形参表中的形参一一对应,即个数相等且对应参数的数据类型相同。函数调用是一个表达式,函数名连同括号是函数调用运算符。表达式的值就是被调函数的返回值,它的类型就是函数定义中指定的函数返回值的类型,即函数的类型。如果函数的返回值为void,说明该函数没有返回值。例如:coutmax(a,b)C),(2,A-B),(2,C-B),(3,A-C),(1,B-A),(2,B-C),(1,A-C)。,精选,168,C+语言程序设计教程第4章函数,分析:将n个盘子从A柱移到C柱可分解为以下3步:,4.2.4递归调用,精选,169,4.2.4递归调用,C+语言程序设计教程第4章函数,精选,170,4.2.4递归调用,C+语言程序设计教程第4章函数,运行结果:Inputthenumberofdiskes3(1,A-C)(2,A-B)(2,C-B)(3,A-C)(1,B-A)(2,B-C)(1,A-C),精选,171,内联函数的定义形式如下:,C+语言程序设计教程第4章函数,4.3内联函数,inline函数类型函数名(形式参数表)函数体;,内联函数:是通过在编译时将函数体代码插入到函数调用处,将调用函数的方式改为顺序执行方式来节省程序执行的时间开销,这一过程叫做内联函数的扩展。因此,内联函数实际上是一种用空间换时间的方案。,在内联函数扩展时也进行了实参与形参结合的过程:先将实参名(而不是实参值),将函数体中的形参处处替换,然后搬到调用处。但从用户的角度看,调用内联函数和一般函数没有任何区别。,精选,172,.3内联函数,C+语言程序设计教程第4章函数,运行结果:12479001600,精选,173,C+语言程序设计教程第4章函数,4.3内联函数,注意:如果仅在声明函数原型时加上关键字inline,并不能达到内联效果。内联函数的定义必须出现在对该函数的调用之前,因为编译器在对函数调用语句进行替换时,必须事先知道替换该语句的代码是什么。,由于计算机的资源总是有限的,使用内联函数虽然节省了程序运行的时间开销,但却增大了代码占用内存的空间开销。因此在具体编程时应仔细地权衡时间开销与空间开销之间的矛盾,以确定是否采用内联函数。,精选,174,例如:,C+语言程序设计教程第4章函数,4.4带默认形参值的函数,intsub(intx=8,inty=3)returnx-y;voidmain(void)sub(20,15);/传递给形参x,y的值分别为20和15sub(10);/传递给形参x,y的值分别为10和3sub();/传递给形参x,y的值分别为8和3,C+语言允许在函数说明或函数定义中为形参预赋一个默认的值,这样的函数就叫做带有默认形参值的函数。在调用带有默认参数值的函数时,若为相应形参指定了实参,则形参将使用实参的值;否则,形参相使用其默认值。这就大大地方便了函数的使用。,精选,175,C+语言程序设计教程第4章函数,4.4带默认形参值的函数,intf(inta,floatb=5.0,charc=.,intd=10);/正确intf(inta=1,floatb=5.0,charc=.,intd);/错误,d未给值intf(inta=1,floatb,charc=.,intd=10);/错误,b未给值,(1)若函数具有多个形参,则缺省形参值必须自右向左连续地定义,并且在一个缺省形参值的右边不能有未指定缺省值的参数。这是由于C+语言在函数调用时参数是自右至左入栈这一约定所决定的。,例如:,假如有如下声明:intf(inta,floatb=5.0,charc=.,intd=10);采用如下调用形式是错误的:f(8,4);/语法错误,(2)在调用一个函数时,如果省去了某个实参,则直到最右端的实参都要省去(当然,与它们对应的形参都要有缺省值)。,例如:,精选,176,C+语言程序设计教

温馨提示

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

评论

0/150

提交评论