《C++程序设计》完整教案_第1页
《C++程序设计》完整教案_第2页
《C++程序设计》完整教案_第3页
《C++程序设计》完整教案_第4页
《C++程序设计》完整教案_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、C+程序设计教案蔡勇智讲师授课时间:2010年3月2010年7月课程性质:专业必修课课程类别:讲授课+实训课授课对象:08级电子商务专业课时数:周4教学目的:通过本课程的学习,使学生理解面向对象程序设计思想,掌握面向对象程序设计的基本概念和技术。使学生深刻理解面向对象技术所带来的观念改革,掌握一种面向对象程序设计语言和面向对象设计的思维方式、规则与基本方法,了解面向对象程序设计技术的发展趋势。通过面向对象思维的训练,使学生逐渐掌握现代编程能力,为今后的软件开发和各种信息处理打下良好的基础。教学方法:本课程以以下两种教学方法为主:1理论课堂教学使用多媒体辅助教学手段,并采用可视化的编程工具用于课

2、程学习和编程。2实验教学结合理论教学实际情况,布置合适比例的概念理解题和综合设计题,使学生在掌握面向对象概念、巩固知识的同时,提高综合设计和处理实际问题的能力。教学内容:第一章面向对象程序设计概述第二章C+程序设计基础第三章函数第四章数组AA*7TZ第五章结构体与共用体AtA-、.*第六章指针与引用教学重难点:重难点在于采用面向对象的观点分析问题、解决问题,以及培养学生结合实际应用,采用面向对象的思想设计有效的算法和可视化编程实现能力。考核方式:平时考勤、作业占30%,期末考试占70%。使用教材:C+程序设计邓振杰主编第1章C+概述本章课时:4课时本章重点:C+的基本结构C+的上机实现本章难点

3、:C+的上机实现教学内容及教学目标:了解:1传统程序设计与面向对象程序设计的区别2.C+的发展3面向对象程序设计语言理解:面向对象程序设计的特点熟悉VC+6.0集成开发环境掌握:C+的特点C+程序结构和书写规则第一节面向对象程序设计基本概念:对象在面向对象程序设计中,对象是由对象名、一组属性数据和一组操作封装在一起构成的实体。其中属性数据是对象固有特征的描述,操作是对这些属性数据施加的动态行为,是一系列的实现步骤,通常称之为方法。2.类在面向对象程序设计中,类是具有相同属性数据和操作的对象的集合,它是对一类对象的抽象描述。类是创建对象的模板,它包含着所创建对象的状态描述和方法的定义,一般是先声

4、明类,再由类创建其对象。按照这个模板创建的一个个具体的实例,就是对象。属性对象中的数据称为对象的属性,而类中的特性称为类的属性,不同的类和对象具有不同的属性。消息在面向对象程序设计中,当要求一个对象做某一操作时,就向该对象发出请求,通常称为“消息”。当对象接收到消息时,就调用有关方法,执行相应操作。这种对象与对象之间通过消息进行相互联系的机制,就叫做消息传递机制,通过消息传递可实现对象的交互。方法方法就是对象所能执行的操作。方法包括接口和方法体两部分。方法的接口就是消息的模式,它告诉用户如何调用该方法;方法体则是实现操作的一系列步骤,也就是一段程序代码。传统程序设计及其局限性:传统程序设计开发

5、软件的生产效率低下传统程序设计难以应付庞大的信息量和多样的信息类型传统程序设计难以适应各种新环境面向对象程序设计的特点:1.封装性封装是一种数据隐藏技术,在面向对象程序设计中可以把数据和与数据有关的操作集中在一起形成类,将类的一部分属性和操作隐藏起来,不让用户访问,另一部分作为类的外部接口,用户可以访问。继承性在面向对象程序设计中,继承是指新建的类从已有的类那里获得已有的属性和操作。已有的类称为基类或父类,继承基类而产生的新建类称为基类的子类或派生类。多态性多态性是指相同的函数名可以有多个不同的函数体,即一个函数名可以对应多个不同的实现部分。在调用同一函数时,由于环境的不同,可能引发不同的行为

6、,导致不同的动作,这种功能称为多态。它使得类中具有相似功能的不同函数可以使用同一个函数名。第二节C+的发展1980年,美国AT&T公司贝尔实验室的BjarneStioustrup博士为了仿真课题研究,编写了称为“带类的C”语言版本。1983年7月用C+将该语言名字定下来,并对外公开发表。Microsoft公司于20世纪80年代中期在MicrosoftC6.0的基础上开发了MicrosoftC/C+7.0,同时引进了MicrosoftFoundationClass(MFC)1.0版本,完善了源代码。后来Microsoft公司推出了MicrosoftC/C+8.0,即VisualC+1.0版本,之

7、后又推出了VisualC+2.0和VisualC+4.0版本。伴随Windows98操作系统的发布,Microsoft公司又隆重推出了VisualC+6.0C+的特点:C+全面兼容C语言,许多C语言代码不经修改就可以在C+中使用。用C+编写的程序可读性更好,代码结构更为合理。生成代码质量高,运行效率仅比汇编语言慢10%20%。从开发时间、费用到形成软件的可重用性、可扩充性、可维护性和可靠性等方面有很大提高,使得大中型软件开发变得容易很多。支持面向对象程序设计,可方便地构造出模拟现实问题的实体和操作。第三节C+程序的基本结构【例1.1】一个简单的C+程序。#includevoidsayhello

8、();voidmain()sayhello();/在显示器上输出显示一行字符串coutThisismyfirstC+program!endl;/函数定义voidsayhello()coutHello!#include文件名.扩展名函数C+的程序是由若干个文件组成,每个文件又由若干个函数组成。函数之间是相互独立的,相互之间可以调用。但函数在调用之前,必须先定义。C+的程序中的函数可分为两大类,一类是用户自己定义的函数,另一类是系统提供的标准函数。使用系统提供的标准函数时,可以直接调用,但需要将该函数的头文件包含在该程序中。主函数在组成C+程序的若干个函数中,必须有一个且只能有一个主函数main(

9、)。执行程序时,系统先从主函数开始运行,其他函数只能被主函数调用或通过主函数调用的函数所调用,函数可以嵌套调用。注释第一种注释方法是以“/*”开始,以“*/”结束,二者之间的所有字符都会被作为注释处理,此时的注释可以是一行,也可以是多行,适合于大块的注释。第二种注释方法是以“/”表示注释开始,本行中“/”后面的字符都会被作为注释处理,这种注释方式多用于较短的程序注释。输入/输出输入/输出语句是C+最基本的语句。综上所述,一个C+程序的基本结构应该包括以“#”开头的若干个预处理命令,将程序所需要的头文件包含进来;然后定义主函数和其他函数,当然函数也可以在程序的起始部分先利用函数要包括各种语句和注

10、释,这部分是程序的主体部分,所占比重也最大。C+程序的书写格式:C+程序的书写格式与C程序书写格式基本相同。原则如下:一般情况下一行只写一条语句。短语句可以一行写多条,长语句也可以分成多行来写。分行原则是不能将一个单词分开,用双引号括起来的字符串最好也不要分开。C+程序书写时要尽量提高可读性。为此,采用适当地缩进格式书写程序是非常必要的,表示同一类内容或同一层次的语句要对齐。C+程序中大括号使用较多,其书写方法也较多,建议用户要养成使用大括号的固定风格。例如,每个大括号占一行,并与使用大括号的语句对齐,大括号内的语句采用缩进两个字符的格式书写。第四节VisualC+6.0集成开发环境Visua

11、lC+6.0是微软公司开发的可视化的C+集成开发环境。它集程序代码的编辑、编译、连接、调试等功能为一体,界面友好,用户操作方便。-廿1天中女TC二辽冈菜单栏标准工具栏工作区窗口文片BHSTBAIHftTflBQHbinitwsuhi;“比询入阖个整鼬clnxj)i;n=jdri(w-f);c#uiUIK.efl41tn0;:口旺州巳!;冃油1砂ttiwlidie-UniaddfintaPintb);intEuiinilirat3rgc:pchijr*|AInnhlm-mrnrrJ|trirl-CenflQiirationiEsum-Vln3?Debuq-亠J1Linking-.suai.ii-

12、HP-0KKjr(ET咀yarningfs)Ifh編译萱找交件1重找交件111厂Ln5.C4)I1RJEAOil函霖Nd定义imtaddfintjfpint也编译工源程序输出窗口1菜单栏标准工具栏工作区窗口源程序编辑窗口编译工具栏6输出窗口编辑、编译和运行程序:源程序编辑编译Hello.cpp有错误目标程序可执行程序结果连接运行Hello.objHello.exe无错误编辑编辑是将写好的C+源程序输入到计算机中,生成磁盘文件的过程。默认文件扩展名为*.cpp。编译编辑好的源程序必须经过编译,计算机才能执行,这些二进制代码称为目标代码。将这些目标代码以.obj为扩展名保存成目标程序文件。连接编译

13、后生成的目标代码还不能直接在计算机上运行,其主要原因是编译器对每个源程序文件分别进行编译,如果一个程序有多个源程序文件,编译后这些源程序文件还分布在不同的地方。因此,需要把它们连接在一起,生成可以在计算机上运行的可执行文件。运行可执行文件可以在Windows环境下直接双击运行,也可以在VisualC+6.0的集成开发环境下运行。在生成可执行文件之前,一定要改正编译和连接时出现的致命错误和警告错误,这样才能保证运行结果是正确的。参照教材练习C+程序的上机实现过程。利用Debug调试功能调试程序:VisualC+6.0集成开发环境为我们提供了辅助调试工具,可以实现单步运行、设置断点、观察变量和表达

14、式的值等功能,使我们可以跟踪程序的执行过程,观察不同时刻变量值的变化情况。所谓断点就是程序运行时的暂停点,程序运行到断点处便暂停,这样就可以通过观察断点处变量的值来了解程序的执行过程。参照教材练习利用Debug调试程序的过程。作业教材P18-19所有习题。第2章C+程序设计基础本章课时:16课时本章重点:运算符与表达式控制语句本章难点:控制语句教学内容及目标:了解:1为什么会有三种基本的程序控制结构C+的基本数据类型理解:程序控制结构的控制方式:顺序结构,选择结构,循环结构C+的运算符、关键字、标识符和分隔符、常量和变量语法规则转向语句的使用表达式中数据类型的转换规则掌握:选择控制的使用:if

15、语句,switch语句循环控制结构的使用:while语句,do_while语句,for语句,循环的嵌套判断表达式的使用第一节词法符号标识符:标识符是程序员为命名程序中的一些实体而定义的专用单词。常见的有函数名,类名、变量名、常量名、对象名等。C+语言中标识符的命名规则如下:标识符是由英文字母(包括大写和小写)、数字和下划线组成,并且以字母和下划线开始,例如:Abe、X1、_x1、desk都是合法的标识符,而2A是非法的。标识符中大写和小写字母是有区别的。标识符的长度是任意的,但有的编译系统仅识别前32个字符。标识符不能和C+语言的关键字同名。关键字:关键字是一种有特殊用途的词法符号,是C+系统

16、预定义的保留字,不能再用作其他用途。卜面列举一些C+语言中常用的关键字:autobreakboolcasecharcatchclassConstcontinuedefaultdeletedodoubleelseEnumexplicitexportexternfalsefloatforfriendgotoifinlineintlongnewMutablenamespaceoperatorprivateprotectedpublicregisterreturnshortsignedsizeofStaticatructswitchthistypedeftrueunionunsignedtypenam

17、evoidusingvirtualvolatilewhilestatic_cast运算符:运算符是C+语言实现各种运算的符号,如+、一、*、/等。运算符根据操作对象个数的不同,可以分为单目运算符、双目运算符和三目运算符。单目运算符又称一元运算符,它只对一个操作数进行操作。例如,求负运算符、逻辑求反运算符!等。双目运算符又称二元运算符,它可以对两个操作数进行操作。例如,加法运算符+、乘法运算符*等。三目运算符又称三元运算符,它可以对三个操作数进行操作。C+语言中只有一个三目运算符,就是条件运算符?:。分隔符:分隔符又称标点符号,是用来分隔单词或程序正文的,它可以表示某个程序实体的结束和另一个程序

18、实体的开始。在C+语言中,常用的分隔符有以下几个:(1)空格符:常用来作为单词与单词之间的分隔符。逗号:用来作为多个变量之间的分隔符,或用来作为函数多个参数之间的分隔符。分号:用来作为for循环语句中for关键字后面括号中三个表达式的分隔符,或用作语句结束的标志。冒号:用来作为语句标号与语句之间的分隔符,或switch语句中关键字casev整型常量与语句序列之间的分隔符。第二节基本数据类型C+语言的数据类型是十分丰富的,大致可分为基本数据类型和非基本数据类型。基本数据类型包括整型、字符型、浮点型和布尔型。非基本数据类型主要包括数组类型、结构体类型、共用体类型、指针类型和空类型等,如图2-1所示

19、。数据类型决定了数据在内存中所占的空间大小,也确定了其表示范围。各种基本数据类型的长度和取值范围见表2-1。基本整型(int)整型短整型(short)I长整型(long)字符型F基本数据类型(f单精度型(float)浮点型I双精度型(double)数据类型布尔型(bool)-数组类型构造数据类型:结构体类型-共用体类型第三节常量与变量常量:1整型常量整型常量即整型常数,可以用十进制、八进制和十六进制3种形式来表示。十进制整型常量不能以0开始。例如,234、-67为合法的十进制整型常量。八进制整型常量以0为前缀。例如,0134、-076为合法的八进制整型常量。十六进制整型常量以0X或0 x为前缀

20、。例如,0 x2F、0 xA3B4为合法的十六进制整型常量。注意:整型常量中的长整型用L或1作后缀表示。例如,324L、076L等;整型常量中的无符号型用U或u作后缀表示。例如,431U、0 x34DU等。2浮点型常量浮点型常量又称实型常量,是由整数部分和小数部分组成的,只能用十进制表示。浮点型常量有两种表示方法:小数表示法和科学计数法。小数表示法:是由符号、数字和小数点组成。例如,9.55、.25等。科学计数法:是用指数形式来表示浮点型常量,即在小数表示法后面加上E或e表示指数。例如,3.2E-5,7e10,-34.5e2等。3字符常量C+中有两种字符常量,即一般字符常量和转义字符常量。一般

21、字符常量:一对单引号括起来的一个字符,其值为ASCII码值。例如,a、A、$、5等都是合法的字符常量。转义字符转义字符是一个以“”开头的特定字符,表示其后的字符具有特殊意义。例如,n中的n不是代表字符n,而是代表回车换行的意思。常用的转义字符见表2-2。字符形式ASCII码值功能00 x00NULLa0 x07响铃b0 x08退格(Backspace键)t0 x09水平制表(Tab键)f0 x0c走纸换页n0 x0a回车换行v0 x0b垂直制表r0 x0d回车(不换行)0 x5c字符“”0 x27单引号”0 x22双引号?0 x3f问号ddd0ddd13位八进制数所代表的字符xhh0 xhh1

22、2位十六进制数所代表的字符表2-2C+中常用的转义字符4字符串常量字符串常量是用一对双引号括起来的字符序列。例如,a、123、hello等都是字符串常量。这些字符在内存中连续存储,并在最后加上字符0作为字符串结束的标志。例如,字符串“HELLO”在内存中占连续6个内存单元,存放示意图如图2-2所示。HELL|O0图2-2字符串HELLO在内存中的存放示意图字符常量是用单引号括起来的一个字符。它在内存中只占一个字节。所以,x和x是不同的。注意:不能将一个字符串常量赋给字符常量。例如,语句charc=abc是错误的。5逻辑常量在C+程序设计中经常会用到两个逻辑值(也称布尔值)0和1,逻辑值“0”代

23、表“假”、“不成立”、“false”等,逻辑值“1”代表“真”、“成立”、“true”等。6符号常量在C+中,可以用一个标识符来表示一个常数,这个标识符就是符号常量。使用符号常量可以增加程序的可读性和可维护性。C+语言提供了两种定义符号常量的方法:用const语句定义符号常量一般格式为:const数据类型符号常量=表达式;例如:constdoublepi=3.1415926;注意:在定义符号常量时必须进行初始化用#define语句定义符号常量#define是预处理指令,缺点是不能显示声明常量的类型。其一般格式为:#define常量名常量值例如:#definepi3.1415926变量:变量是指

24、在程序运行过程中其值可以改变的量。C+语言中使用变量前,必须先对它的数据类型进行说明,以便编译程序为变量分配存储空间。1变量的命名变量的命名要遵循C+语言中标识符的命名规定2变量的定义变量定义的一般格式为:数据类型变量1,变量2,;其中数据类型可以是前面讲过的各种数据类型,它决定了变量在内存中所占的存储单元数。例如:intx,y,z;定义了3个整型变量x、y、zfloata,b,c;/定义了3个实型变量a、b、c3变量与初始化可以在声明变量的同时赋初值:例如:intx=10,y=20+a;例如:intx(10);也可以先定义变量,后赋值。例如:intx1,y1;x1=10;y1=20;注意:不

25、能连续赋值。如:inta=b=c=5;是错误的。但可以分别赋值。在同一个程序块中,不能有两个相同的变量名。变量赋值时,等号左右两边类型要匹配。表达式是由运算符和各种运算对象(常数、变量、常量等,也称操作数)组合而成。在C+程序中,表达式与我们在数学中学到的类似,是用于计算的式子,是计算求值的基本单位。C+语言定义了丰富的运算符。运算符给出计算的类型,而参与运算的数据叫操作数。按运算符的运算性质又可分为算术运算符、关系运算符和逻辑运算符等。使用运算符时,要注意以下几点:运算符的功能。如加、减、乘、除等。与操作数的关系,注意操作数的个数和类型。运算符的优先级别。运算符的结合性。第四节运算符和表达式

26、表2-3C+中常用运算符的优先级、功能和结合性优先级运算符功能说明要求操作数的个数结合性1()改变优先级左结士合左结口:作用域运算符数组下标运算符一成员选择*成员指针选择2*指针运算符1-右合右结口&取地址sizeof求内存字节数!逻辑求反按位求反+-增1、减1运算符+-取正、取负运算符3*/%乘法、除法、取余2左结士合左结口4+-加法、减法2左结士合左结口5左移位、右移位2左结士合左结口6=小于、大于、小于等于、大于等于2左结士合左结口表2-3C+中常用运算符的优先级、功能和结合性(续表)优先级运算符功能说明要求操作数的个数结合性7=!=等于、不等于2左结士合左结口8&按位与2左结士合左结口

27、9A按位异或2左结士合左结口10|按位或2左结士合左结口11&逻辑与2左结士合左结口12II逻辑或2左结士合左结口13?:条件运算符3-右合右结口14/=%=&=A=I=赋值运算符2-右合右结口15逗号运算符左结士合左结口1基本算术运算符与算术表达式基本算术运算符有:+(取正或加)、(取负或减)、*(乘)、(除)、%(取余)。其中+(取正)、(取负)是单目运算符,其余是双目运算符。上述运算符与其在数学中的意义、优先级、结合性基本相同,即先进行乘法、除法和求余运算,优先级相同,后执行加法和减法运算,优先级相同。注意:要求取余运算符(%)的两个操作数必须是整数或字符型数据。算术表达式是由算术运算符

28、与操作数组成的,其表达式的值是一个数值,表达式的类型由运算符和操作数共同确定。【例2.1】基本算术表达式的计算。#includevoidmain()inti=4,j=5,k=6;intx;x=i+j-k;coutx=xendl;/输出x=3x=(i+j)*k/2;coutx=xendl;/输出x=27x=25*4/2%k;coutx=xendl;/输出x=2doubley=2.5;couty=y-(y+0.5)*2endl;/输出y=-3.5运行程序后,输出结果为:x=3x=27x=2y=-3.52增1、减1运算符及表达式增1、减1运算符都是单目运算符,这两个运算符都有前置和后置两种形式。前置

29、形式是指运算符在操作数的前面,后置是指运算符在操作数的后面。例如:i+;/+后置j;/前置(1)增1、减1运算符只能用于变量,不能用于常量和表达式。增1、减1运算符的结合方向是自右向左,如表达式-i+中运算符“-”和“+”优先级相同,结合方向是自右向左,即表达式可以理解为-(i+)。增1、减1运算符在很多情况下的使用可能会出现歧异,从而产生意想不到的结果。【例2.2】增1、减1表达式的计算。#includevoidmain()inti,j,k,m,n;i=4;j=i+;couti=itj=jendl;i=4;k=+i;couti=itk=kendl;i=4;m=i-;couti=itm=men

30、dl;i=4;n=-i;couti=itn=nendl;运行程序后,输出结果为:i=5j=4i=5k=5i=3j=4i=3k=3关系运算符:关系运算符用于比较两个操作数的大小,其比较的结果是一个布尔型的值。当两个操作数满足关系运算符指定的关系时,表达式的值为true,否则为false。在C+语言中,关系运算符都是双目运算符,共6个:(小于)、(大于)、=(大于或等于)、=(等于)、!=(不等于)。其中前4种的优先级高于后2种。C+语言中虽然有布尔类型,但它仍然继承了C语言的规定,true等于1,false等于0。所以,关系运算符的比较结果可以作为算术运算中的操作数。例如:表达式2=3的结果为0

31、(false)。在使用关系运算符时还应注意以下几点:不要把关系运算符“=”误用为赋值运算符“=”。也不要将不等于运算符“!=”写成其他语言中的不等于运算符“”。(2)a=60的意思是a的ASCII码值与60比较大小。对于数学中表示“x大于等于5,且x小于等于20”的数学关系式5WxW20,正确的表达式应该是:5=x&x=20关系表达式是由关系运算符和操作数组成,表达式的值都是1(true)或0(false)o经常出现在条件语句和循环语句中,用于决定问题的执行方法。【例2.3】关系表达式的计算。#includevoidmain()inti=4,j=5;coutj)endl;cout=j)endl

32、;cout(ij)endl;cout(i=j)endl;cout(i=j)endl;cout(i!=j)endl;运行程序后,输出结果为:001101return逻辑运算符与逻辑表达式:1逻辑运算符逻辑运算符共有3个:1个单目运算符!(逻辑求反),2个双目运算符&(逻辑与)和|(逻辑或)。在三个运算符中,逻辑非的优先级最高,逻辑与次之,逻辑或最低。关系运算和逻辑运算的结果若为真,其值为1;若为假,其值为0。aba&b|allb表2-3逻辑值的逻辑运算结果2逻辑表达式逻辑表达式由逻辑运算符与操作数组成,表达式的值都应是1(true)或0(false)。【例2.4】逻辑表达式与关系表达式的计算#i

33、ncludevoidmain()输出z=1,表示true输出z=0,表示false输出z=0,表示falseintx=3,y=5,z;z=(x0)|(y10);coutz=zendl;z=(x=0)&(y10);coutz=zendl;z=!(x=3);coutz=zendl;赋值运算符:C+中的赋值运算符分为两种:简单赋值运算符和复合赋值运算符1简单赋值运算符“=”其表达式的一般形式为:变量=表达式2复合赋值运算符如果以#表示数值型运算符,则复合赋值表达式的一般形式为变量#=表达式该表达式等价于:变量=变量#表达式例如:a+=5m%=7等价于a=a+5等价于m=m%7复合赋值运算符的优先级和

34、赋值运算符相同,结合性也相同,都为右结合。3赋值表达式赋值表达式由赋值运算符与操作数组成。赋值表达式的作用就是把赋值运算符右边表达式的值赋给左边的变量。赋值表达式的类型为左边变量的类型,其值为赋值后左边变量的值。在C+语言中还可以连续赋值。【例2.5】赋值表达式的应用。#includevoidmain()intm=3,n=4,k;k=m+-n;coutk=kendl;charx=m,y=n;intz;z=yx;coutz=zendl;z=(y=x+1);coutz=zendl;z=(y!=Y);coutz=zendl;inta=1,b=3,c=5;a+=b*=c-=2;couta=a,b=b,

35、c=cb?a:b2逗号运算符由逗号运算符构成的表达式称为逗号表达式,其一般形式为:表达式1,表达式2,,表达式n逗号表达式的执行规则是从左到右,逐个表达式执行,最后一个表达式的值是该逗号表达式的值。注意:逗号运算符“,”的优先级最低。例如,表达式“a=3,a+l,a*a”的结果为9。表达式中数据类型的转换:1.隐含转换当操作数的类型不一致时,表达式的类型就取决于操作数中类型最高的操作数类型,C+语言将自动进行类型转换,隐含转换的示意图如图2-3所示,其转换规则如下:注意:隐含转换是由编译系统自动完成的,它实际并不改变操作数的数据类型,只是在计算表达式值时,临时改变操作数的数据类型,计算完成后,

36、操作数仍保持原有的数据类型。2.强制转换强制转换的作用是将表达式的类型强制转换成指定的数据类型。其一般形式为:数据类型(表达式)或(数据类型)表达式例如:double(a)/将a强制转换成double型float(5%3)/将5%3的结果转换成float型注意:如果将高类型转换成低类型,会造成数据精度的损失。因此,这是一种不安全的类型转换。第五节控制语句C+语句概述:1表达式语句表达式语句是由一个表达式加上分号组成。例如:inti;/将i声明为整型变量的语句a=3*4+5;/赋值语句2复合语句复合语句也称块语句,是由两条或两条以上的语句组成,并用“”括起来的语句。复合语句在语法上相当于一条语句

37、。注意:在复合语句的右括号后不再需要分号。3控制语句控制语句通常包括选择语句、循环语句和转移语句。4空语句语句空语句只有一个分号,它不作任何操作,常用在需要一条语句而又不需要任何操作的地方,如循环语句中。选择语句:1if语句if语句用来有条件地执行某一语句系列。if语句主要有3种语法格式:简单if语句格式:if(表达式)语句;功能:首先计算表达式的值,如果表达式的值不为0,表示条件判定为真,花括号内的语句将被执行;否则,将执行后面的语句。其中的表达式一般是关系表达式,并且表达式必须用()括起来。语句可以是一条语句,也可以是多条语句。如果只有一条语句,则可以省略。【例2.7】简单if语句的应用。

38、#includevoidmain()floatscore;coutPleaseenteryourscore:score;if(score=60)coutPassed!endl;if(score60)coutNopassed!endl;coutYoushoulddoyourbesttostudyendl;运行程序后,屏幕上输出显示:Pleaseenteryourscore:提示用户输入成绩,当用户输入成绩信息后,程序会根据用户的输入,输出显示相应的信息。如输入70,则显示:Passed!(2)两分支if语句格式:if(表达式)语句1;else语句2;功能:首先计算表达式的值,如果表达式条件判定为

39、真,则执行语句1,否则将执行语句2。该格式的流程图如图2-5所示。【例2.8】利用两分支if语句改写例2.7。#includevoidmain()floatscore;coutPleaseenteryourscore:score;if(score=60)coutPassed!endl;elsecoutNopassed!endl;coutYoushoulddoyourbesttostudyendl;(3)多分支if语句格式:if(表达式1)elseif(表达式2)elseif(表达式3)elseif(表达式n)else功能:首先计算表达式1的值,如果表达式1条件判定为真,则执行语句1,否则判定表

40、达式2,如果条件判定为真,则执行语句2,依此类推,直到所有的表达式条件均不满足,此时将执行语句n+1。该格式实际上提供了多重条件选择。该格式的流程图如图2-6所示。【例2.9】利用多分支if语句比较两个数的大小。#includevoidmain()intx,y;coutPleaseinputx,y:xy;if(x=y)coutx=yy)coutyendl;elsecoutxyendl;程序执行后,屏幕上输出显示:Pleaseinputx,y:计算机提示用户输入两个x和y的值。当用户输入后,计算机将显示相应的判断结果。例如,输入1和2后将显示“xvy”的判断结果。if语句的嵌套三种if语句之间可

41、以实现嵌套。通常为了不破坏程序的可读性,嵌套的层次一般不超过两层。【例2.10】利用if语句的嵌套改写例2.9。#includevoidmain()intx,y;coutPleaseinputx,y:xy;if(x!=y)if(xy)coutyendl;elsecoutxyendl;elsecoutx=yendl;2switch语句switch语句又称开关语句,其语法格式为:switch(表达式M)case常量表达式Ml:语句1;case常量表达式M2:语句2;IIIcase常量表达式Mn:语句n;default:语句Mn+1;其中,switch、case和default是关键字,常量表达式通

42、常为整型数值和字符常量,语句1、语句2、语句n是由1条或多条语句组成的语句段,也可以是空语句。如果是多条语句,可以用花括号括起来。switch语句的执行过程是:首先计算switch语句中的表达式,然后按先后顺序将得到的结果与case中的常量表达式的值进行比较。如果两者相等,程序就转到相应case处开始顺序执行。如果没有找到相匹配的结果,就从default处开始执行。如果没有default,则转到switch语句后面的语句。如果希望switch语句在执行完某一case后面的语句后,不再执行其后面的case和default分支,就需要在每个case的末尾加上一条break语句,表示跳出switch

43、语句。加break语句的switch语句流程图如图2-7所示。图2-7switch语句【例2.11】根据考试成绩的等级给出百分制分数段。#includevoidmain()chargrade;coutvv请输入成绩:vvendl;cingrade;if(grade=a&gradev=z)grade-=32;/若输入小写字母,则转化为大写字母switch(grade)caseA:cout90100endl;caseB:cout8089endl;caseC:cout7079endl;caseD:cout6069endl;caseE:cout60分以下endl;default:coutInputer

44、ror!endl;运行程序后,屏幕上将显示字符串“请输入成绩:”。假设输入B后,将输出结果:80897079606960分以下Inputerror!显然,这样的输出结果是不符合题目原意的,原因就在于没有用break语句作为每个case的结束语句。现修改例2.11程序如下:switch(grade)caseA:cout90100endl;break;caseB:cout8089endl;break;caseC:cout7079endl;break;caseD:cout6069endl;break;caseE:cout60分以下endl;break;default:coutInputerror!e

45、ndl;再运行程序,然后输入成绩B,将输出结果:8089循环语句:在程序设计中经常遇到需要重复执行的操作,这些操作可以使用循环语句来实现。循环语句使得程序在给定条件满足时,能够重复地执行某些操作C+语言提供了3种循环语句:while循环语句、do-while循环语句和for循环语句。1while循环语句while循环语句的语法形式为:while(表达式)循环体;其中,while是关键字,表达式可以是C+语言中任何合法的表达式,它用来判断执行循环体的条件,根据循环条件决定是否执行循环体。循环体由语句组成,可以是一条语句,也可以是多条语句。while循环执行过程示意图如图2-8所示。如果循环体有多

46、个语句时,要用大括号把它们括起来,以复合语句形式出现。在使用循环语句时,一定要设法改变循环变量,使之在有限次循环之后能满足循环终止条件而结束循环。【例2.12】编程计算1100之和。#includevoidmain()inti=1,sum=0;while(i=100)sum+=i;i+;coutsum=sumendl;程序运行后,输出结果:sum=50502do-while循环语句do-while循环语句的语法形式为:do/循环体部分while(表达式);do-while循环语句与while循环语句的区别在于:do-while循环语句首先执行循环体,再求表达式的值。如果其值非0,则再次执行循环

47、体,直至表达式的值为零;而while语句首先求表达式的值,再按其值为零或非零决定是否执行循环体。因此,do-while循环语句中的循环体至少执行一次。do-while循环执行过程如图2-9所示。4循环体注意:do-while循环语句最后的分号不可缺少。【例2.13】利用do-while循环语句改写例2.12。#includevoidmain()inti=1,sum=0;dosum+=i;i+;while(i=100);coutsum=sumendl;3for循环语句for循环语句的功能非常强大。所有while循环语句和do-while循环语句都可以用for循环语句替代。for循环语句的语法形式

48、为:for(表达式1;表达式2;表达式3)循环体;其中,表达式1通常用来给循环变量赋初值;表达式2通常是关系表达式或逻辑表达式,一般用来设置循环条件;表达式3用来在每次循环之后修改循环变量的值。for语句的执行过程是:首先执行表达式1,给循环变量赋初值;接着执行表达式2,并根据表达式2的值决定是否执行循环体。如果表达式2的值为true或其他非0值,则执行循环体,否则退出循环;每执行完一次循环体后,再执行表达式3,修改循环变量;然后再执行表达式2,并根据表达式2的值决定是否继续执行循环体。For循环语句的执行过程如图2-10所示。图2-10For循环语句执行过程在使用for循环语句时,应该注意下

49、列几种情况:for语句中的3个表达式可以没有。但必须注意每个表达式后的分号不能省略。此时for循环语句的形式为:for(;)这时在循环体内必须有其他控制循环执行的语句,否则会形成死循环。表达式l如果没有或不是用来给循环变量赋初值,则应在for语句前给循环变量赋初值。表达式2如果没有,则在for语句循环体内应有其他控制循环执行的语句,否则会形成死循环。表达式3如果没有或不是用来修改循环变量的值,则应在for语句循环体内设置相应的语句。【例2.14】利用for循环语句改写例2.12。#includevoidmain()inti,sum=0;for(i=1;i=100;i+)sum+=i;couts

50、um=sumendl;【例2.15】在屏幕上显示09共10个整数。#includevoidmain()inti=0;for(;i=9;)couti+t;coutendl;程序运行后,将输出结果:0123456789returnC+语言还提供了goto语句、break语句和continue语句等转移语句,它们主要用于改变程序中语句的执行顺序,使程序从某一语句有目的地转移到另一语句继续执行。转移语句:1goto语句goto语句语法格式为:goto语句标号;goto语句的作用是使程序转移到语句标号所标示的语句处继续执行。语句标号是一种用来标识语句的符号,其命名遵守标识符的命名规定,放在语句的前面,并

51、用冒号(:)与语句分开。C+语言中,goto语句的使用被限制在一个函数体内,即goto语句只能在一个函数范围内进行语句转移。在同一函数中,语句标号应该是唯一的。注意:由于goto语句的使用会破坏程序的结构,编程时,应尽量少用或不用。2break语句break语句的语法格式如下:break;break语句可用在以下两种情况:break语句用在switch语句中,其功能是退出switch语句。break语句用在循环语句的循环体中,其功能是退出循环语句。如果是多重循环,它将会在本次循环结束时执行该重循环后面的语句。3continue语句continue语句的语法格式为:continue;contin

52、ue语句只能用在循环语句的循环体内。在循环执行的过程中,如果遇到continue语句,程序将结束本次循环,接着开始下一次循环。【例2.16】从键盘上输入10个整数,若是正整数则求和,若是负整数则不进行计算,继续输入数据,若输入0则终止程序。#includevoidmain()intnum,sum=0;coutPleaseinputnumber:endl;for(inti=0;inum;if(num=0)break;if(num0)continue;sum+=num;coutsum=sumendl;return作业教材P46-47所有习题第3章函数本章课时:12课时本章重点:函数调用变量作用域本

53、章难点:函数调用教学内容及目标:了解:1参数的传递方式的分类2内联函数的含义理解:1变量存储特性与标识符作用域2函数调用机制:嵌套调用和递归调用掌握:1函数参数的传递,包括:传值参数,指针参数,引用参数和函数的返回类型2函数指针:函数的地址,函数指针3重载函数的定义与使用方法第一节函数的定义和声明【例3.1】实现两个数相加。#includeintadd(int,int);/函数原型voidmain()intsum,x,y;coutvv请输入被加数和加数:vvendl;cinxy;sum=add(x,y);/函数调用coutvvSum=vvsumvvendl;intadd(inta,intb)/

54、函数定义returna+b;执行结果:请输入被加数和加数:213625Sum=838函数定义的一般语法格式如下:函数类型函数名(参数表)函数体/有返回值,返回类型为整型1函数类型与返回值intsum(inta,intb)return(a+b);voidprintsum(inta,intb)/无返回值couta+bb?a:b;voidprint(void)/无参数coutC+iseasytolearn!endl;voidprint()/无参数coutHelloworld!endl;intmax(inta,b)形参在该函数被调用时才初始化,即从主调函数获取数据。如果被调用函数不需要从调用函数那里获

55、取数据,则该函数可为无参函数。函数原型:函数原型又称函数声明,用来告诉编译器函数头的相关内容。函数原型通常位于程序代码的开始处。函数原型的语法格式为:类型函数名(参数列表);参数列表的个数、顺序和指定的类型必须和函数定义中一致。在函数原型说明中也可以不给出参数名,只给出类型。例如:intsum(int,int);/不带参数名intfac(inta);/带参数名第二节函数调用函数调用的概念:函数调用是用一个表达式表示。调用格式为:函数名(实参列表);实参是用来在调用函数时对形参进行初始化的,实参与形式参数个数相同、类型一致、顺序一致。如果在一个文件中有多个函数,一般都将主程序或主函数放在其他所有

56、函数的前面。在函数调用前进行函数原型的说明,被调用的函数定义放在后面。通常使用函数调用的返回值来给某个变量赋值。有返回值函数的调用格式为:变量名=函数名(实参列表);或coutv函数名(实参列表);在任何情况下,C+能自动将变量的类型转换为与参数一致的类型,这是C+标准类型转换的一部分。任何非法的转换都会被C+编译程序检测出来。【例3.2】编程求三个整数中最大的数。#includeintmax2(int,int);intmax3(int,int,int);voidmain()intsum,x,y,z,m;coutvv请输入三个整数:vvendl;cinxyz;m=max3(x,y,z);cou

57、tvv最大的数是:vvmvvendl;/函数定义intmax2(inta,intb)returnab?a:b;intmax3(inta,intb,intc)intm1,m2;m1=max2(a,b);m2=max2(m1,c)returnm2;执行结果:请输入三个数:253647最大的数是:47函数调用的参数传递:参数形式:数值、引用、指针参数传递:传值、传址、引用传值调用是利用参数传递数据最常用的方法。调用时系统先计算实参的值,再把实参的值按位置赋给对应的形式参数。本质是复制实参给形参,以后二者互不影响。【例3.3】两整型数互换。#includevoidswap(int,int);voidm

58、ain()inta,b;cinab;swap(a,b);coutmainprograma=atb=bn;/函数定义voidswap(intx,inty)intt;coutfunctionswapbegina=xtb=yn;t=x;x=y;y=t;coutfunctionswapenda=xtb=yn;程序执行结果为:1020functionswapbegina=10b=20functionswapenda=20b=10mainprograma=10b=20return1函数的嵌套调用若在一个函数调用中又调用了另外一个函数,则称这样的调用过程为函数的嵌套调用。程序执行时从主函数开始执行,遇到函数

59、调用时,如果函数是有参函数,系统先进行实参对形参的替换,然后执行被调用函数的函数体。如果函数体中还调用了其他函数,再转入执行其他函数体。函数体执行完毕后,返回到主调函数,继续执行主调函数中的后续程序行。3.2.3函数的嵌套调用和递归调用2函数的递归调用在调用一个函数的过程中出现直接或间接调用该函数本身,就称作函数的递归调用,这样的函数称为递归函数。编写递归函数时,必须有终止递归调用的条件递归调用的两个阶段:第一阶段:递推。将原问题不断分解为新的子问题,逐渐从未知向已知递推第二阶段:回归。从已知条件出发,按照递推的逆过程,逐一求值回归,最后达到递归的开始处,结束回归阶段,完成递归调用。第三节变量

60、的作用域在函数或者类内说明的变量是局部变量。局部变量仅在定义它的函数或类内起作用,在这个范围之外不能使用这些变量。局部变量的作用域也称为块作用域。函数内部使用的局部变量包括形式参数和函数体内定义的变量。函数的形式参数的作用域在函数的函数体内部。不同函数如果使用相同的参数或变量,它们仅在其所在函数体内有效,互不影响。在函数体内定义的变量,其作用域从说明语句开始直到该函数结束为止。全局变量:全局变量是在函数和类外部定义的变量。全局变量的作用域从说明点开始直到文件结束。这种作用域也称为文件作用域。全局变量一般集中在主函数之前说明。优点:可以减少参数数量和数据传递时间。缺点:过多的全局变量会降低程序的

温馨提示

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

评论

0/150

提交评论