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

下载本文档

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

文档简介

1、a,1,C+程序设计,a,2,课程安排及要求,课程信息: 总学时:48学时 上课:24学时 上机:24学时 考试方式:待定 课堂要求: 1.不允许无故缺席,缺席一次,平时成绩扣10分。 2.采取不定时点名,累积缺席达3次,取消该门课考试资格。 上机要求: 上机玩游戏、聊天者,发现一次扣平时成绩2分,累计8次,平时成绩记0分,a,3,关于C+语言课程,C与C+(C加加,see-plus-plus) 贝尔实验室于二十世纪八十年代在C语言的基础上开发的。 C+是C语言的超集,包含了C语言的所有内容,同时增加了面向对象编程方面的内容。,C+与Java和C# C+是Java和C#的始祖。 Java和C#

2、是C+的子集与简化 因此,学习C+后学习Java与C#会事半工倍、倍感轻松。,a,4,参考书目与课时安排,参考书目 C+程序设计导学. 李春葆著. 北京: 清华大学出版社 C+语言程序设计教程 杨进才 沈显君 刘蓉编著 清华大学出版社 C+ Primer (3RD)中文版. Stanley B.Lippman, Josee Lajoie 著.潘爱民, 张丽译. 北京:中国电力出版社,a,5,如何学好C+,能细能粗 在面向过程编程部分,对数据类型、运算符、语句等要注重细节。做到细致掌握。 在面向对象部分重在对概念的掌握,对每个概念回答是什么?为什么?如何?这三个问题。做到掌握思想。,重视实践 和

3、学好所有编程语言一样,做到“上机、上机、再上机”。,利用资源 利用网络资源进行学习、交流、答疑。如清华大学的BBS站的C+学习园地上有大量的帖子。 地址:,第1章 C+编程简介,本章内容,1.1 计算机程序设计语言 1.2 面向过程的程序设计 1.3 面向对象的程序设计 1.4 C+概述 1.5 C+程序实例,1.1 计算机程序设计语言,机器语言,汇编语言,高级语言,面向过程,面向对象,CPU指令系统,由0、1序列构成的指令码组成 如:10000000 加 10010000 减,用助记符号描述的指令系统 如 ADD AX, BX,程序设计依赖解决问题的过程,客观事物描述成具有属性和行为的对象;

4、 同一类对象的共同属性和行为形成类; 封装对象间通过发送和接受消息发生联系; 类的继承与多态性可以提供使用现成类的机制,从而实现代码的重用.,程序设计关键是定义类,并由类实例化成对象,接近人的自然语言习惯,如:100+200,1.2 面向过程的程序设计,本质: 通过程序来进行数据处理 高级语言: 1、面向过程的语言 BASIC、PASCAL、C 2、面向对象的语言 C+、JAVA,1.2 面向过程的程序设计,例如:要向屏幕打印一个“A”字符 1、BASIC语言:PRINT “A” 2、PASCAL语言:writeln(A); 3、C语言:printf(“A”); 4、C+语言:cout “A”

5、; 5、JAVA语言:System.out.print(A );,主要思想 自顶向下 逐步求精 核心 算法:为解决某一应用问题而采用的解题步骤。 一个计算机程序可以看成是由一系列任务组成的,任何一项任务如果过于复杂就将其分解成一系列较小的子任务,直至每一项任务都很小,很容易解决。,1.2 面向过程的程序设计,基本结构,1.2 面向过程的程序设计,“面向过程的程序设计”不足: 1、生产率低下,软件代码重用程度低; 2、软件维护困难。 “面向对象的程序设计”本质: 把数据和处理数据的过程当成一个整体即对象。 “面向对象的程序设计”优点: 与人类习惯的思维方式一致。 可重用性好。 可维护性好。,1.

6、3 面向对象的程序设计,对象是实现世界中的一个实际存在的事物,张三,李四,类是具有相同属性和服务的一组对象的概括,属性,服务,性别,年龄,说话,行走,新类,消息,1.3 面向对象的程序设计,封装: 信息隐蔽:通过将类定义的成员设置成不同的访问权限来实现。 继承和派生: 在程序中定义类,当出现两个或多个类享有相似的情况,就不必重复在类中定义,可通过继承,从其他类派生出其他类。 多态性: 指在一般类中定义的属性和行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。,1.3 面向对象的程序设计,1.4 C+语言概述,全面支持C,C+语言的产生,1983加入类,C,1994标准化,C+语

7、言的特点,面向对象,比C更完善、安全、高效,1.3 C+程序开发过程,程序代码的录入、修改,执行预处理指令,词法分析、语法分析后生成目标程序,与其它目标程序或库连接,生成可执行程序,1.4 C+程序实例,/* * 程序文件名: p1_1.cpp * * 本程序显示: Hello C+! * * 设计者: 鲁莹 时 间: 8-27-2007 * */ #include / 载入头文件 using namespace std; / 使用命名空间std void main( ) / 程序入口 cout Hello C+!endl; ,运行结果: Hello C+!,在C+程序中,注释块由“/*”开始

8、,由“*/”结束,可以实现多行注释 。 也可使用“/”进行单行注释。,C+语言的预处理命令都是以“#” 号开头。iostream是一个头文件,系统 头文件不带.h后缀,cout为标准输出流对象,它与显示器相连。 是插入操作符,endl为换行符号。整个语句的功能是将”Hello C+ !”字符串与endl依次插入到cout中,main是主函数名,一个C+语言程序有且仅有一个main函数。C+程序执行时就是从main函数开始.,C+语言规定:语句以分号结束,?为什么: 标准C+库提供的对象等都放在标准名字空间std中,要使用它们, 必须要声明使用标准名字空间std.,使用标准名字空间std有3种方

9、式: 整体声明 using namespace std; 使用时单个对象临时声明 std:coutHello C+ 对象1 对象2.对象n;,cout 对象1 对象2.连用,使用格式为:,意思是从标准输入流对象键盘上提取n个数据分别给对象1、对象2、.、对象n。,C+中使用对象cout 作为标准输出流对象,通常代表显示设备,cout 与插入操作符连用,使用格式为:,意思是依次从将对象1、对象2、.、对象n插入到标准输出流对象中,从而实现了对象在显示器上的输出 .,C+ 输入/输出简介,本章小结,程序设计语言经历了从机器语言、汇编语言、高级语言、面向对象的语言的发展过程, 使得编程语言与人的自然

10、语言越来越接近,编程效率越来越高。 程序设计方法经历了面向过程的方法、结构化的方法、面向对象的方法的发展过程。 C+语言具有全面兼容C与面向对象的特点,支持结构化与面向对象程序设计方法。 面向对象的基本概念有:对象、类、封装、继承、消息、多态性。 C+程序设计的步骤有编辑、预编译、编译、连接、调试与运行。 程序注释有两种方法,应培养给程序写注释的好习惯。 预处理指令include在编译的预处理阶段将头文件搬到程序中,包含文件是C+程序的必不可少的部分。 标准C+的类库定义在名字空间std中,可以通过三种方法使用名字空间。,实验一,熟悉Vc+上机环境 编程 实现在屏幕上显示输出“Hello,VC

11、+!” 实现在屏幕上显示输出以下图形:,* * * * * * * * *,a,23,第2章 C+数据类型,主讲:鲁莹,本章内容,2.1 数据类型概述 2.2 常量与变量 2.3 基本类型 2.4 运算符和表达式 2.5 类型转换,基本整型 (int) 短整型 (short) 整型 长整型 (long) 无符号型 (unsigned) 基本类型 单精度型 (float) 实型(浮点型) 双精度型 (double) 字符型 (char) 扩展双精度型 (long double) 数据类型 布尔型 (bool) 空类型 (void) 数组类型 ( ) 指针类型 (*) 构造类型 结构体类型 (st

12、ruct) 共用体类型 (union) 枚举型 (enum) 类 (class),2.1 数据类型概述,2.1 数据类型概述,数据类型和内存空间 不同的数据类型,加上不同的修饰符就具有了不同的特点,在内存中占用的空间也不同,因而其所能表示的数值范围也不尽相同。 内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。,2.1 数据类型概述,注意整型int的长度等于机器的字长: 16位机:int=2字节; 32位机:int=4字节。 但是short和long表示的数据长度是固定的,任何支持标准C+的编译器都是如此,因而如果需要编写可移植性好的程序,应将整型声明为short或long。,2

13、.1 数据类型概述,例题 编写一个程序,输出基本数据类型char, int, float, double,bool的长度。 提示: 使用sizeof(数据类型) 能够获取不同数据类型的长度。,2.1 数据类型概述,/输出基本数据类型的长度 #include using namespace std; void main() cout“char :”sizeof(char)“字节n; coutint:sizeof(int)字节n; coutfloat :sizeof(float)字节n; coutdouble:sizeof(double)字节n; coutbool:sizeof(bool)字节n;

14、 ,2.2 常量与变量,2.2.1 常量 2.2.2 变量,#include using namespace std; void main(void) const int PRICE=30; int num,total; float v ,r,h; num=10; total=num*PRICE; couttotal endl; r=2.5; h=3.2; v=3.14159*r*r*h; coutv endl; ,Page 31,2.2.1 常量,严格来说,常量又分成符号常量和常数。 符号常量: 代表一个固定不变值的名字 常数(整型和浮点型): 程序中使用的具体的数据,2.2.1 常量与符号

15、常量,符号常量 C+中提供了一个关键字const,用来区分常量和变量。并且由于常量代表一个固定的值,并且该值在程序运行过程中不能够被改变,所以要求常量在定义的时候必须进行初始化。 定义形式有: const 数据类型 符号常量名=初始值; 例如:const double PI=3.1415926;,注意: const double PI; PI=3.1415926; /error const double PI=; /error const int M=max(15,23); /error #define 符号常量名 初始值 例如:#define PI 3.1415926,2.2.1 常量与符号

16、常量,2.2.2 变 量,什么是变量? 在C+中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。,2.2.2 变 量,变量有三个基本要素:名字、类型和值。 C+的程序设计中,在使用变量前必须首先定义变量,即指定变量的名称与数据类型。 变量一经定义,系统根据其数据类型在内存中为该变量分配一定的存储单元,在该存储单元中可存放变量的值。,变量的定义,一般格式为: 数据类型关键字 变量名表; 说明:(1)变量名表:可以包含若干个变量,彼此间用 逗号分开。变量名必须是合法的标识符,不 能用C+的关键字作为变量名。 (2)数据类型:变量可以被定义为基本数

17、据类型 和构造类型。 例如: int x ; float area,width,length ;,变量的定义,注意: 与C语言不同,C+语言中的变量定义不必位于程序的开始,可以穿插在其它语句中间。变量最好在使用时才定义,这样可以增加程序的可读性,避免变量发生混淆。,初始化变量,在定义变量的同时给其一个初始值,称为初始化变量。例如: unsigned short width=5; long width=8,length=8; double area,radius=20;,初始化变量,#include using namespace std; void main() Int myAge= 18;

18、cout“myAge=” myAgeendl; myAge= 20; cout“myAge=” myAgeb? a:b;,基本数据类型和表达式,a,66,sizeof 运算符,语法形式 sizeof (类型名) 或 sizeof (表达式) 结果值: “类型名”所指定的类型或“表达式”的结果类型所占的字节数。 例: sizeof(short) sizeof(x),基本数据类型和表达式,a,67,位运算按位与(,基本数据类型和表达式,a,69,位运算按位异或(),运算规则 两个操作数进行异或: 若对应位相同,则结果该位为 0, 若对应位不同,则结果该位为 1, 举例:计算 071052 071:

19、 0 0 1 1 1 0 0 1 052: () 0 0 1 0 1 0 1 0 071052 : 0 0 0 1 0 0 1 1,基本数据类型和表达式,a,70,位运算按位异或(),用途: 使特定位翻转(与0异或保持原值,与1异或取反) 例如:要使 01111010 低四位翻转: 0 1 1 1 1 0 1 0 () 0 0 0 0 1 1 1 1 0 1 1 1 0 1 0 1,基本数据类型和表达式,a,71,位运算取反(),单目运算符,对一个二进制数按位取反。 例: 025:0000000000010101 025:1111111111101010,基本数据类型和表达式,a,72,位运算

20、移位,左移运算() 右移后,低位:舍弃 高位:无符号数:补0 有符号数:补“符号位”,基本数据类型和表达式,a,73,运算符优先级,基本数据类型和表达式,(1) 运算符的优先级按单目、双目、三目、赋值依次降低。,(2) 算术、移位、关系、按位、逻辑运算的优先级依次降低。,a,74,运算符优先级,括号 +,-,sizeof *, /, % +, - =, != 位运算 或分成多行: cout表达式1 表达式2 ”是预定义的提取符,使用“”从cin输入流中提取数据,便可实现键盘输入。格式如下: cin 数据1 数据2 数据n ; 也可写成多行: cin 数据1 数据2 数据n ;,float f;

21、 long l; cinfl;,a,85,按特定的格式进行输入输出,例如对 double pi=3.1415; 如果希望显示的是3.14,即保留两位小数,且域宽为5个字符并换行,此时如用下面的语句则不能完成。 cout预处理命令。常用控制符如表3.1所示。,3.1.2 C+语言格式输入输出,a,86,表3.1 I/O流的常用控制符,What is exact output?,#include #include / for setprecision( ) using namespace std; void main ( ) float myNumber = 123.4587 ; cout fix

22、ed showpoint ; / use decimal format / print decimal points cout “Number is ” setprecision(3) myNumber endl ; / set precision ,Output of program: Number is 123.459,#include #include using namespace std; void main ( ) int myNumber = 123 ; int yourNumber = 5 ; cout setw ( 10 ) “Mine” setw ( 10 ) “Yours

23、” endl; cout setw ( 10 ) myNumber setw ( 10 ) yourNumber endl ; ,What is exact output?,12345678901234567890 Mine Yours 123 5,#include #include / for setprecision( ) using namespace std; void main ( ) float myNumber = 123.4 ; float yourNumber = 3.14159 ; cout fixed showpoint ; / use decimal format /

24、print decimal points cout “Numbers are: ” setprecision ( 4 ) endl setw ( 10 ) myNumber endl setw ( 10 ) yourNumber endl ; ,Numbers are: 123.4000 3.1416,What is exact output?,float x = 312.0 ; float y = 4.827 ; cout fixed showpoint ; cout setprecision ( 2 ) setw ( 10 ) x endl 3 1 2.00 setw ( 10 ) y e

25、ndl ; 4.83 cout setprecision ( 1 ) setw ( 10 ) x endl 3 1 2.0 setw ( 10 ) y endl ; 4.8 cout setprecision ( 5 ) setw ( 7 ) x endl 312.00000 setw ( 7 ) y b; result=3*a-2*b+1; cout“result is ”resultab; x=b; if(ab) x=a; coutxab; if(ab) x=a; else x=b; coutx=a ,实习4、5:,1.顺序结构程序设计: P253 实验一:14 2.选择结构程序设计: P

26、253 实验二:3、4,顺序结构与选择结构程序设计,a,108,3.5 循环结构程序设计,循环结构:循环结构又称重复结构,是指在一定条件下反复执行一个程序块的结构。循环结构也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直到型循环结构两种。,a,109,3.5 循环结构程序设计,循环结构:循环结构又称重复结构,是指在一定条件下反复执行一个程序块的结构。循环结构也是只有一个入口,一个出口。根据循环条件的不同,循环结构分为当型循环结构和直到型循环结构两种。,当型循环的结构:当给定的条件p成立时,执行A框操作,执行完A操作后,再判断p条件是否成立,如果成立,再次执行A操作,

27、如此重复执行A操作,直到判断p条件不成立才停止循环。此时不执行A操作,而从出口b脱离循环结构。,直到型循环的结构:先执行A框操作,然后判断给定条件p是否成立,如果不成立,再次执行A操作;然后再对p进行判断,如此反复,直到给定的p条件成立为止。此时不再执行A框,从出口b脱离循环。,a,110,一个循环结构应由四个主要部分构成: 循环的工作部分。即循环体,完成循环程序的主要工作。 循环的修改部分。它保证循环体在循环过程中,有关的量能按一定的规律变化(循环变量)。 循环的控制部分。它保证循环程序按规定的循环条件控制循环正确进行(循环条件)。 循环的初始部分。它是保证循环结构能够开始执行的语句,往往编

28、写在程序的开头部分,逻辑上先从这一部分开始执行(初始条件)。,a,111,3.5.1 while语句 3.5.2 do-while语句 3.5.3 for语句 3.5.4 跳转语句break和continue 3.5.5 循环的嵌套,3.5 循环结构程序设计,a,112,3.5.1 while 语句,一般形式: while(表达式) 语句; /循环体 执行过程:首先判断括号内最初表达式的值,如为0则跳到循环体外;如为非0,就执行语句(循环体),执行完循环体后再次判断表达式的值,如此反复进行直到(表达式)的值为假时结束while循环。,a,113, 例3.23 编写程序计算1+2+3+.+99+

29、100,#include void main( ) int sum,n; n=1; /初始部分(初始条件) sum=0; while(n=100) /控制部分(循环条件) /工作部分(循环体) sum+=n; n+; /修改部分(循环变量) coutsum=sum0) if(xx; cout“小于60的正整数个数:”c1endl; cout“大于60的正整数个数:”c2endl; , 例3.24 分别统计出键入的所有正整数中=60的数据的个数。,a,115,3.5.2 do-while 语句,一般形式: do 语句; /循环体 while (表达式); do-while与while比较:do-

30、while语句是先执行循环体,再进行判断,无论条件是否成立,do-while语句至少执行循环体一次,它是直到型循环。而while语句则要先对条件进行判断,只有当条件成立才执行循环体,因此它是当型循环。对于一个循环问题,我们既可以用当型循环也可以用直到型循环来解决问题。,a,116,#include /用do-while结构 void main( ) int sum,n; n=1; /初始部分(初始条件) sum=0; do /工作部分(循环体) sum+=n; n+; /修改部分(循环变量) while(n=100) ; /控制部分(循环条件) coutsum=sumendl; , 例3.25

31、 编写程序计算1+2+3+.+99+100,a,117,3.5.3 for 语句,一般形式: for(表达式1; 表达式2; 表达式3) 语句; /循环体 说明: 三个表达式的作用:表达式1一般用来初始化循环控制变量;表达式2为表示循环条件的表达式,用作循环控制条件,其作用与前两类循环语句中的表达式完全一样,用法也基本相同;表达式3用来修改循环控制变量,用以表示循环控制变量的增量或减量,常用自增或自减运算(注意:三表达式必须用分号隔开)。 语句:不仅可以是单个语句,也可以是复合语句或空语句。,执行过程:先计算表达式1的值,接着计算表达式2的值并判断,若表达式2的值非零则执行循环体的语句,然后计

32、算表达式3的值,再从计算表达式2 的值开始下一次循环,重复这种先计算判断,后执行再计算的过程,直到某次(也可能是第一次)表达式2的值为零时结束循环。,a,118, 例3.26 编写程序计算1+2+3+.+99+100,#include /用for结构 void main( ) int sum,n; sum=0; for (n=1; n=100; n+) sum+=n; coutsum=sumendl; ,n=1; while(n=100) sum+=n; n+; ,a,119,for( 表达式1; 表达式2; 表达式3 ),说明: 三个表达式的类型:表达式2一般是关系表达式或逻辑表达式,但也可

33、是数值表达式或字符表达式,即可是任意表达式,只要其值为非零,就执行循环体。表达式1和表达式3一般为简单表达式(赋值、自增、自减表达式),但也可以使用逗号表达式,可一次完成对多个变量赋初值和修改多个变量的功能, 例如: for (i=0, j=100; ij; i+, j- -) k=i+j;,a,120, 例3.27 逗号表达式使用实例,#include /用for结构 void main( ) int sum,n; for (sum=0, n=1; n=100; n+) sum+=n; coutsum=sumendl; ,逗号运算符可以将多个表达式连接起来,其功能是从左向右求解各个表达式,而

34、整个表达式的值为最后求解的表达式的值。用逗号连接起来的表达式称为逗号表达式。逗号表达式的一般形式是:表达式1,表达式2,表达式n 逗号运算符的优先级最低,并且具有左结合性。比如,逗号表达式3+5, 6+7的值是13。逗号表达式在C+程序中用途比较少,通常只用于for循环语句中。,a,121,说明: 三个表达式的省略使用:for允许省略或部分省略三个表达式,但用作分隔符的两个分号绝不能省略。以下是省略表达式的几种情况:,for( 表达式1; 表达式2; 表达式3 ),省略表达式1 此时应在for语句前给循环变量赋初值。语句格式为: for ( ; 表达式2 ; 表达式3 ) 语句;,#inclu

35、de void main( ) int sum,n; sum=0; n=1; for(; n=100; n+) sum+=n; coutsum=sum100) break; sum+=n; coutsum=sumendl; ,a,123,说明: 三个表达式的省略使用:for允许省略或部分省略三个表达式,但用作分隔符的两个分号绝不能省略。,for( 表达式1; 表达式2; 表达式3 ),省略表达式 3 此时需在循环体内使循环控制变量递变,以保证循环正常结束。 语句格式为: for ( 表达式1 ; 表达式2 ; ) 语句 ;,#include void main( ) int sum,n; su

36、m=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,a,127,continue 语句,continue 语句也用于循环结构中,它的作用是忽略它之后到循环终止的程序,而转向下一次循环。 和break 语句一

37、样,continue 语句通常也是和 if 语句结合,一同使用于循环结构中。 continue 和break 的作用有相似之处,却有着根本区别,continue 语句只是结束本次循环,还要进行下一次循环,而不是要结束整个循环;break 则是结束整个循环,转到循环体外面去了。,statement1; continue; statementn;,continue;,a,128,#include void main( ) int i, count=0; for ( i=100; i=150; +i ) if ( i%3=0 ) contiune; cout i “ ”; count + ; if

38、(count%5=0 ) coutendl; /一行输出5个数据 cout endl; , 例3.29 将100150之间不能被3整除的数输出。,程序的运行结果为: 100 101 103 104 106 107 109 110 112 113 115 116 118 119 121 122 124 125 127 128 130 131 133 134 136 137 139 140 142 143 145 146 148 149,a,129,3.5.5 循环的嵌套,一个循环体内包含另一个完整的循环结构称为循环的嵌套,内嵌的循环中还可以嵌套循环,这就是多重循环。三种循环可以互相嵌套,但在循环

39、的嵌套中要注意,内层循环应完全在外层循环里面,也就是不允许出现交叉。 在嵌套的循环结构中,如用缺口矩形表示每层循环结构时,则图3.8中(a)(b)是正确的多层循环结构,而(c)是错误的多层循环结构,因为它出现了循环结构的交叉。 另外,使用循环结构时必须注意,如果循环的控制条件永远成立,循环体将永无休止地反复执行,程序就将陷入“死循环”,这显然是应当防止的。,a,130, 例3.35 实现打印九九乘法表 。,1*1= 1 1*2= 2 2*2= 4 1*3= 3 2*3= 6 3*3= 9 1*4= 4 2*4= 8 3*4=12 4*4=16 1*5= 5 2*5=10 3*5=15 4*5=

40、20 5*5=25 1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81,1 . . i,1:9,a,131,#include #include void main() int i, j, result; i=1; j=1; cout

41、九九乘法表: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.输出以下图形:,循环结构程序设计,* * * * * * * * * * * * * * * * * * * * * * * * *,* * * * * * * * * * * * *

42、* * *,a,133, 例1 输出100以内的所有素数。,3.6 程序设计举例(习题课),算法分析: 判断一个数m是否是素数的算法如下:让m被2到 之中的整数除,如果m能被这些数之中的任何一个整除,则说明m不是素数;否则m是素数。 对100以内的每一个自然数进行素数的判断,若是则输出之。 上述步骤用一个内循环实现,步骤用一个外循环实现。,/ i=2k,注意退出循环的两种情况:,a,134,3.6 程序设计举例(习题课),介绍几个常用的数学函数: int abs(int x); | x | double fabs(double x); double log(doubel x); ln(x) d

43、ouble log10(double x); log10(x) double exp(double x); ex double pow(double x, double y); xy doubel sqrt(double x);,a,135,#include #include #include void main( ) int m, i, k, count=0; for (m=2; m = k+1 ) cout setw(4) m; count+; if (count %5 = = 0 ) coutm; if (nm) temp=n; n=m; m=temp; r =n%m; while(r!

44、=0) n=m; m=r; r=n%m; cout最大公约数为:m=3),即从第3个数开始,每个数等于前2个数之和。,算法分析:, 例3 求Fibonacci数列的前40个数,#include #include void main() long int f1=1, f2=1; /*定义并初始化数列的头2个数*/ int i; 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; ,迭代思想,a,139, 例4 求1

45、!+2!+10!,循环结构中,最常用的算法就是累加和累乘。一般累加和累乘是通过循环结构和循环体内的一句表示累加性或累乘性语句来实现的。我们通常把程序中 sum 变量称为累加器、fact 变量称为累乘器。要注意,sum的初值赋为0,而fact的初值赋为1。另外,赋初值的操作一定要在循环结构外进行。 本例要用一个双循环来实现,外循环用来求累加,内循环用来求累乘。,a,140, 例4 求1!+2!+10!,#include using namespace std; void main() long int sum, fact , i, j; sum=0; for(i=1;i=10;i+) fact=

46、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; ,a,143, 例6 百钱买百鸡,这是一个用“穷举法”解题的典型问题。 “穷举法”也称为“枚举法”或“试凑法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。,百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。 设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,

47、列出方程为: x + y + z = 100 3x + 2y + 0.5z = 100 三个未知数,两个方程,此题有若干个解。解决此类问题采用“试凑法”,把每一种情况都考虑到。,a,144,#include #include using namespace std; void main() int x, 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) ,方法一: 最简单三个未知数列三重循环来实现。,a,145,#include #include using namespace

48、std; void main() int x, 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; ,方法二: 从三个未知数的关系,利用两重循环来实现。,a,146,#include #include #include using namespace std; void main() int x,y,z; time_t t1, t2; t1=time(NULL ); for (x=0;x=100;x+) for

49、(y=0;y=100;y+) for(z=0;z=100;z+) if (x+y+z=100) ,时间和日期函数需要的头文件,time_t是中定义的与时间有关的类型,使用long int 表示系统的时间。,time( )函数返回系统的当前时间,在本例中使用NULL即空指针为参数。,difftime(t2, t1)函数以秒为单位返回t2-t1的差。,实习7:,1. 用 for 循环实现打印九九乘法表。 2. 求两个整数的最大公约数和最小公倍数,两个整数由键 盘键入。 3.,结构程序设计综合实验,4. 用两种方法解百钱买百鸡问题,并进行时间分析。,第3章 函数,C+语言程序设计教程 第4章 函数,

50、制作人:鲁莹,第章 函数,1. 掌握函数的声明和定义、函数的调用及函数的参数传递过程; 2. 掌握关键字inline的含义与使用; 3. 掌握递归函数的使用; 4. 掌握函数重载的使用方法; 5. 掌握函数模板的使用方法; 6. 了解各类系统函数,掌握常用的系统函数的使用。,学习目标,C+语言程序设计教程 第4章 函数,a,150,. 函数的定义和声明,4.1.1 函数的定义 函数是一个命名的程序代码块,是程序完成其操作的场所,是将功能重复的程序段抽象出来所形成一个独立的、可重复使用的功能模块。 定义函数的一般格式为:,返回类型 函数名 (数据类型1 参数1, 数据类型2 参数2,. ) 语句

51、序列; ,形参表,C+语言程序设计教程 第4章 函数,说明: 函数必须先定义才可以使用 定义函数就是编写完成函数功能的程序块。,a,151,. 函数的定义和声明,在函数的定义中: 返回类型为函数返回值的类型,可以是系统任一基本数据类型或用户已定义的一种数据类型,它是函数执行过程中通过return语句要求的返回值的类型,又称为该函数的类型。当一个函数不需要通过return语句返回一个值时,称为无返回值函数或无类型函数,此时需要使用void作为类型名。 函数名是用户为函数所起的名字,它是一个标识符,应符合C+标识符的一般命名规则,用户通过使用这个函数名和实参表可以调用该函数。 形式参数表可以包含任意多项(可以没有),当多于一项时,

温馨提示

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

评论

0/150

提交评论