C++面向对象的程序设计课件_第1页
C++面向对象的程序设计课件_第2页
C++面向对象的程序设计课件_第3页
C++面向对象的程序设计课件_第4页
C++面向对象的程序设计课件_第5页
已阅读5页,还剩588页未读 继续免费阅读

下载本文档

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

文档简介

C++面向对象的程序设计第一章程序设计基础学习目标:

初步掌握程序设计的概念和基本方法;了解C++语言的特点;学会使用VisualC++集成开发环境创建并运行简单的C++项目。

了解计算机语言及其发展,了解高级语言的优点。

了解结构化程序设计的基本概念,初步掌握结构化程序设计方法

了解面向对象程序设计的思想、基本概念。

初步接触C++语言,了解C++语言的特点。

熟悉VisualC++集成开发环境的基本使用方法,并完成一个简单的C++程序的编写、编译、调试和运行。

学习方法

本章概念和知识点较多,学习的时候注意不能死记硬背,要分清知识点的轻重程度。对于计算机语言的发展,只要了解其主要过程就可以了;对于程序设计方法和C++语言的特点,不能在本章范围内孤立学习,要结合下面相应的章节以及亲自上机实践才能掌握,并且这是个渐进的过程,不能一蹴而就;对于C++集成开发环境的使用则一定要通过实际的动手操作才能熟悉。

自然语言与计算机语言之间的鸿沟机器语言机器可以直接识别并执行面向机器高级语言低级语言面向过程面向对象关心求解过程着眼点:解决“什么”问题关心一个对象能干什么例如:FORTRAN、BASIC

结构化分析方法和设计方法例:C++、JAVA面向对象的分析方法和设计方法“编译”“解释”“链接”中级语言高级语言双重功能例:C机器语言、汇编语言和高级语言汇编语言1.设计思路自顶向下、功能分解、逐步求精。采用模块分解与功能抽象,自顶向下、分而治之。把精力主要集中在对如何求解问题的算法逻辑和过程的描述上,通过程序把解决问题的步骤告诉计算机。当一些任务十分复杂以至无法描述时,可以将它拆分为一系列较小的功能部件,直到这些自完备的子任务小到易于理解的程度。

2.程序结构按功能划分为若干个基本模块,形成一个树状结构。各模块间的关系尽可能简单,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。其模块化实现的具体方法是使用子程序。

面向过程的程序设计3.缺点可重用性差:相对于老问题的新方法带来额外的开销;安全性差:把数据和处理数据的过程分离为相互独立的实体;难以开发图形界面的应用;例如,计算一个公司中每一个职员的平均工资是一项较为复杂的任务。可以将其拆分为以下的子任务:

(1)计算总共有多少职员

(2)计算工资总额

(3)用职员人数去除工资总额

计算工资总额本身又可分为一系列子任务

(1)找出每个职员的档案

(2)读出工资数额

(3)把工资加到部分和上

(4)读出下个职员的档案

面向对象的程序设计

设计思想:

面向对象程序设计方法不是以函数过程和数据结构为中心,而是以对象为代表求解问题的中心环节.它追求的是现实问题空间与软件系统解空间的近似和直接模拟.从而使人们对复杂系统的认识过程与系统的程序设计实现过程尽可能一致.面向对象语言的发展过程1、雏形阶段

60年代,挪威计算中心开发的Simula67语言,是面向对象语言发展史上的第一个里程碑。它引入了类的概念和继承的机制。具有了面向对象语言的重要特征,是面向对象语言的先驱。

72年,Smalltalk-72问世,在Smalltalk-72中,任何东西都是对象

Smalltalk-72的问世,标志着面向对象程序设计方法的正式形成。但作为语言还不完善,处于研究性和实验性阶段。

2、完善阶段

1981年,Smalltalk-80问世,成为面向对象发展史上最重要的里程碑。它具备了绝大部分面向对象的基本概念和机制,是第一个能够实际应用的面向对象语言,随着应用的深入,越来越多的人认识并接收了面向对象的思想,形成了一种崭新的程序设计风格,引发了计算机软件领域一场意义深远的变革。

(1)作为一种崭新的软件设计方法,被大家广泛接受尚需一定的时间,即使目前,还没有为所有人所接受。(2)Smalltalk-80本身的商品化软件开发工作直到1987年才开始进行。(3)太过理论化,追求一种纯OO的宗旨,不能为许多讲究实效的软件开发人员接受。

3、繁荣阶段

80年代中期到90年代,出现了大批实用的OOPL,如C++、Objective-C、ObjectPascal、Delphi等。大多都是一种混合型的面向对象语言,更重视实用性。 特别是C++语言,它是在C语言的基础上扩充的,对C兼容,且十分重视代码的执行效率,所以以成为应用最为广泛的OOPL。 面向对象的编程语言的繁荣是面向对象方法走向实用的重要标志,也是面向对象方法在计算机学术界、产业界和教育界受到越来越高的重视面向对象的当前的研究及实践领域OO方法诞生20多年以来,已经进入计算机科学的各个分支领域,并在继续发展。1、面向对象的编程语言(OOPL)2、面向对象的分析和面向对象的设计(OOA/OOD)

本课程的重点。产生于80年代末期,目前仍在发展和健全的过程。3、面向对象的数据库(OODB)

是传统数据库技术与面向对象方法的结合。4、面向对象的软件开发环境

已经比较成熟,如C++Builder、VC6.0、Delphi等。5、面向对象的图形用户界面(GUI)开发技术6、面向对象的智能程序设计

即面向对象方法与人工智能领域的专家系统的结合。7、面向对象的体系结构

是一种新型的计算机体系结构,连同支持面向对象技术的新兴操作系统,可望从根本上提高面向对象的软件开发效率和运行效率,并形成从硬件到操作系统、语言、界面及上层应用支持系统一体化的面向对象的开发及运行环境。C++的发展历史从C到C++

C语言是贝尔实验室在B语言的基础上开发出来的,1972年在一台DECPDP-11计算机上实现了最初的C语言。C是作为UNIX操作系统的开发语言而开始广为人们所认识。实际上,当今许多新的重要的操作系统都是用C或C++编写的。在过去20年内,C语言已经能够用在绝大多数计算机上了。C语言是与硬件无关的。由于C语言的严谨设计,使得把用C语言编写的程序移植到大多数计算机上成为可能。到70年代末,C已经演化为现在所说的“传统的C语言”。

C++入门

为了满足管理程序的复杂性需要,1980年,贝尔实验室开始对C进行改进和扩充。最初的成果称为“带类的C”,1983年正式取名为C++,在经历了3次C++修订后,于1994年制定了ANSIC++标准的草案。以后又经过不断完善,成为目前的C++。C++仍在不断发展中。

C++包含了整个C,C是建立C++的基础。C++包括C的全部特征、属性和优点,同时添加了对面向对象编程(OOP)的完全支持。

C语言盛行的同时,也暴露出它的局限:

(1)C类型检查机制相对较弱,这使得程序中的一些错误不能在编译时发现。

(2)C本身几乎没有支持代码重用的语言结构,因此一个程序员精心设计的程序,很难为其他程序所用。

(3)当程序的规模达到一定的程度时,程序员很难控制程序的复杂性。C++的特点

(1)C++保持与C兼容。

(2)用C++编写的程序可读性更好,代码结构更为合理,支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。

(3)生成代码的质量高,运行效率仅比汇编语言代码段慢10%到20%(4)从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变得容易的多。学习C++的目的

1.本身是一门优秀的设计语言;

2.同时是一门实用的软件开发语言,

3.可触类旁通其他语言,如C#,Java等;

4.掌握面向对象的软件设计方法;学习方法

1.掌握基本概念,如类、继承、多态;

2.多实践.交流;

3.多读优秀的源代码;编译器

1.BorlandC++Builder5.0/6.0,

2.BorlandC++BuilderX1.0;3.MicrosoftVisualC++6.0

课程考核要求

1.熟悉重要概念;

2.读懂C++编写的常用的典型程序;

3.可独立编写C++程序;初识C++的函数和对象首先看下面这个简单的C++程序

//simple.cpp是一个简单的C++程序#include<iostream>//包含头文件Usingnamespacestd;//使用命名空间voidmain()//主函数{inti;//初始化对象cout<<“HelloC++!\n”;//输出提示信息cout<<"请输入一个整数:";cin>>i;//接受输入数值cout<<"您输入的整数是:";cout<<i;//输出值cout<<'\n';}

C语言程序编译预处理命令

(1)宏定义:不带参数的宏;带参数的宏;

#define<宏名><替换字串>

取消宏定义

#undef<宏名>(2)文件包含:两种格式―――牵涉到C程序文件的组织方式:公用数据和函数说明放在头文件(.h)中;实现函数功能的函数体和局部数据放在源文件(.cpp)中;

#include<文件名>

在系统指定的目录中查找文件(系统设置时的include目录)。

#include“文件名”在当前目录中查找文件,若找不到,再到系统指定的目录中查找。我们对这个程序进行解释2.主函数

C++源程序可由一个main函数和其他函数构成。

函数是c++程序的基本单位,一个C++程序有且只能有一个主函数main,是程序的入口,其他函数通过函数调用被执行。用户可自己定义函数,也可使用系统提供的函数。3.使用注释

注释部分以“//…….”(或/*……*/)来标志,系统对注释不做任何处理,帮助人阅读程序

//…….到行尾

/*……*/多行4.使用命名空间

这是新的C++标准引入了新标准类库的头文件载入方式,即省略“.h”。不过必须同时使用下述语句:

Usingnamespacestd;它提高了程序的性能和可靠性5.使用输入和输出对象C++中的输入输出操作由“流”来处理。C++将数据从一个对象流向另一个对象的流动抽象为“流”提取操作:从流中获取数据的操作;插入操作:向流中添加数据的操作;流对象(iostream.h)

cin:用来处理标准输入,即键盘输入;

cout:用来处理标准输出,即屏幕输出;

①数据输出cout

(1)作用:将数据输出到外设(如屏幕);(2)格式:cout<<表达式1<<表达式2<<表达式3<<…<<表达式n其中“<<”称为插入运算符,将其后表达式的值输出到显示器当前光标位置。例如,

inta=2,b=3;charc='x';cout<<"a="<<a<<'\t'<<"b="<<b<<'\n';cout<<"c="<<c<<'\n';则执行后显示器上显示:

a=2 b=3c=x②数据输出cin(1)作用:从外设(键盘)输入数据到变量(2)格式:cin>>变量名1〔>>变量名2>>变量名3…>>变量名n〕;其中,“>>”称为提取运算符,表示将暂停程序执行,等待用户从键盘上输入相应的数据。在提取运算符后只能跟一个变量名,但“>>变量名”可以重复多次,即可给一个变量输入数据,也可给多个变量输入数据7.函数类型和返回值

函数由函数说明部分和函数体部分组成

floataverage(floata,floatb,floatc){ floatsum,average; sum=a+b+c; average=sum/3; returnaverage;}6.对象的定义和初始化

定义对象包括为它命名并赋予它数据类型。每个对象都隶属于某个特定的数据类型。人们习惯于称对象为变量,C++程序设计时,为了尽快养成使用对象思考问题的习惯,建议改成对象。本程序使用整型对象:inti8.程序运行结果:

HelloC++!

请输入一个整数:2

您输入的整数是:2

C++语言对C语言扩充和增强的几点具体体现1.更加灵活的变量说明

在传统的C语言中,局部变量的说明必须集中放在执行代码的前面,数据说明语句和执行语句的混合将引起编译错误。而在C++中,可以在程序代码块的任何地方中却可进行局部变量的说明。比如下面的代码在C语言中是不正确的,在C++语言以正常运行。

for(inti=1;i<=100;i++);

这样做的好处是使变量的定义和它的使用集中在一起,意义一目了然。

2.更加严格的函数原型说明

C++摒弃了C语言对函数原型随意简化的方式,这种简化是许多C语言程序错误的根源。C++语言要求编程者为函数提供完整的原型,包括全部参数的类型和返回值得说明。

例如,有字符型和双精度类型两个参数、返回整型值的函数f,原型应该写为:

intf(char,double);

而C语言中允许将这个原型写成"f();"。

在函数原型说明中,参数名可有可无,并且可以和函数定义中的参数名不一致。3.函数缺省参数

C++中允许函数有缺省参数。所谓缺省,是指函数调用时可以不给出实际的参数值。下面是一个有缺省参数的函数定义的实例:例:

intf(inta,intb=1)

{

returna*b;

}

此后,函数调用f(3,1)和f(3)将返回同样的结果。4.增加了内联函数(InlineFunction)

5.增加了函数重载机制

6.更加方便的动态存储分配函数部分讲7.

作用域限定运算符

::

作用域限定运算符::用于对当前作用域之外的同名变量进行访问。例如在下面的例子中,我们可以利用::实现在局部变量a的作用域范围内对全局变量a的访问。

例:#include<iostream.h>

inta;

voidmain()

{

floata;

a=3.14;

::a=6;

cout<<“localvariablea=”<<a<<endl;

cout<<“globalvariablea=”<<::a<<endl;

}程序执行结果如下:

localvariablea=3.14

globalvariablea=6

程序的调试与运行一、C++程序的编辑、编译和运行二、VisualC++6.01.编辑:输入、编辑、保存成源文件(多个)2.编译、链接源程序文件:预处理;编译生成目标程序文件.obj;链接生成可执行文件.exe3.运行程序:4.程序调试:编译错误、链接错误、算法错误启动VisualC++:方法:开始菜单—>程序—>MicrosoftVisualstudio6.0—>MicrosoftVisualC++6.0;或:

双击桌面上的MicrosoftVisualstudio6.0的快捷方式;标题栏菜单栏工具栏工作区窗口Workspace输出窗口Output编辑区状态栏VC++集成环境简介:VisualC++6.0主窗口(实验P1)Project:

一个VC++应用程序称为一个项目

项目是一些相互关联的源文件的集合,包括:

SourceFiles源程序代码文件.cppHeaderFiles头文件.hResourceFiles资源文件程序结构信息文件系统参数设置文件等

一个项目的文件可以存放在不同的文件夹和驱动器中项目(project)※可包含多个项目,一般只包含一个项目※VisualC++以项目工作区方式组织文件、项目和项目配置。※建立项目时,自动建立项目工作区文件.dsw

用于描述项目工作区的内容和设置※同时建立工程文件.dsp和工作区选项文件

.opt

用于保存项目工作区的设置※在项目工作区中可查看和访问项目中的各种元素项目工作区(workspace)1.启动VisualC++6.02.创建新项目,要添加到项目工作区,有两种选择:

(1)添加到新创建的项目工作区(2)添加到当前指定的项目工作区3.建立新的源文件,要添加到指定项目中4.编辑/输入源程序,保存程序.cpp(.h)注意:一个项目中只能有一个含main函数的文件5.编译源程序:Build菜单中的Compile命令(ctrl+F7),形成目标文件.obj。6.链接目标程序,形成可执行文件:Build菜单中的Build命令(F7),形成可执行文件.exe。7.运行程序:Build菜单中的Execute命令(ctrl+F5)VisualC++6.0中创建一个C/C++程序(新项目)的步骤:知识点:本章主要讲述程序设计的基本概念和方法,并简单介绍了C++语言的特点以及VisualC++集成开发环境的使用。学习C++,不一定非要学过C。但学过C能促进C++的学习。

C++程序由函数构成,它总是从主函数main()开始运行。但并不是说,main()函数非得要写在程序的最前面。

函数有两种:标准库函数和用户定义函数。main()函数是特殊的用户定义函数。每个程序只能有一个main()函数,并且必须要有一个main()函数。

一个语句可以写在多个程序行上,一个程序行可以写多个语句。语句以分号结束。

C++通过标准输入输出流进行输入输出。

C++程序经过编辑、编译和连接,产生可运行的exe文件。

内容小结:§

3-3运算符和表达式(续)一、关系运算符和关系表达式二、逻辑运算符和逻辑表达式一、关系运算符和表达式:

关系运算符:>>=<<===!=高低双目,左结合性

关系表达式格式:<表达式><关系运算符><表达式>例:x>5y>=x+3x==y*2

值:条件成立为真1

条件不成立为假,0二、逻辑运算符和逻辑表达式逻辑运算符:

操作数为0代表假,非0为真

值!单目&&||双目0:假1:真如何表示3<x<=10?x>3&&x<=10右结合性左结合性高低*小结*:条件几种表示形式复合条件如:条件

复合条件

3≤x<100x>=3&&x<100

判字符变量c的值是大写字母?

(c

>=‘A’&&c<=‘Z’)判字符变量c的值不是大写字母?(c

<

‘A’||c>‘Z’)判字符变量c的值是小写字母?(c>=‘a’&&c<=‘z’)判字符变量c的值不是小写字母?(c<‘a’||c>‘z’)判字符变量c的值是字母?if(c>=‘a’&&c<=‘z’||

c>=‘A’&&c<=‘Z’)判字符变量c的值不是字母?if((c<‘a’||c>‘z’)&&

(c<‘A’||c>‘Z’))

注意:是与不是的条件互为反条件§

3-4分支(选择)结构一、if语句的简单分支三、if语句的嵌套二、if语句的双分支四、switch语句(多分支)表达式语句真假一、if语句的简单分支

语句:if(表达式)语句

表达式为任意表达式

若有若干语句,要构成复合语句

执行:计算表达式的值,若为真(不为0)则执行语句;否则不执行语句例如:求x的绝对值#include<iostream.h>voidmain(){intx,absx;cout<<“pleaseinputx=“;cin>>x;absx=x;if(x<0)absx=-x;cout<<“x=“<<x<<endl;cout<<“|x|=”<<absx;}

if(x>=0)absx=x;elseabsx=-x;absx=fabs(double(x))#include<math.h>例如:C若为大写字母,则把它变为小写字母,否则为c本身#include<iostream.h>voidmain(){charch;cin>>ch;if(ch>=‘A’&&ch<=‘Z’)ch=ch+32;cout<<ch;}

c=(c>=‘A’&&c<=‘Z’)?(c+32):c

条件运算符:

格式:表达式1?表达式2:表达式3先求表达式1的值若不等于0(为真),求表达式2的值,并把它作为整个表达式的值若等于0(为假),求表达式3的值,并把它作为整个表达式的值相当于分支结构三目运算符,右结合性?:

计算:条件运算符if(ch>=‘A’&&ch<=‘Z’)ch=ch+32;如:c=(c>=‘A’&&c<=‘Z’)?(c+32):c二、if语句的双分支if(表达式)语句1else语句2表达式语句1语句2真假入口出口

执行:若表达式的值不为0,执行语句1,否则执行语句2

语句:#include<iostream.h>voidmain()

{ inta,b,x; cin>>a>>b; if(a>b) x=a; x*=x; else x=b; cout<<x;}例如:输入两个数a,b,若a大,则输出a的平方,若b大,输出b。

复合语句一定要加大括号{x=a;x*=a;}嵌套的两种形式:(1)嵌套if--else(2)嵌套elseif三、if语句的嵌套(处理多分支问题)(1)嵌套if—elseif(表达式1)if(表达式3)语句1;if(表达式2)else语句2;else语句3;else语句4;外层内层中层

若表达式1的值为非0,即真,则执行中层if—else结构;否则,执行语句4。执行中层时,若表达式2的值为非0,即真,则执行内层if—else结构;否则,执行语句3。执行内层时,若表达式3的值为非0,即真,则执行语句1;否则,执行语句2。if_else嵌套流程图if(表达式1)语句1;

elseif(表达式2)语句2;

elseif(表达式3)语句3;….elseif(表达式n)语句n;else

语句n+1;/*前面n个条件均不成立,执行语句n+1*/(2)嵌套elseifelse_if嵌套流程图例如:编写程序计算函数

x*x-4(x<=0)y=x(0<x<=3)x*x+4(x>3)解:

根据题目的三个区间,两个判断点,形成三分支,可采用三种选择结构设计。

方法1:else_if嵌套结构设计方法2:三个并列的if结构设计方法3:if_else嵌套结构设计

方法1:else_if嵌套结构----源程序:注:这种方法是判判断点法

各条件互相关联形成区间要考虑条件成立与不成立//X>3//0<X<=3//X<=0#include<iostream.h>voidmain(){intx,y;cout<<“pleaseenterthenumber:”;cin>>x;if(x>3) y=x*x+4;elseif(x>0) y=x;else y=x*x-4;cout<<“y=“<<y<<endl;} 方法2三个并列的if结构------源程序#include<iostream.h>voidmain(){intx,y;cout<<“pleaseenterthenumber:”;cin>>x;

if(x>3)y=x*x+4;

if(x>0&&x<=3)y=x;

if

(x<=0)y=x*x-4;cout<<“y=“<<y<<endl;}注:这种方法是判区间法。方法3:if_else嵌套结构设计#include<iostream.h>voidmain(){intx,y;cout<<“pleaseenterthenumber:”;cin>>x;

if(x>0)

if(x<=3) y=x;

else

y=x*x+4;else

y=x*x-4;cout<<“y=“<<y<<endl;}注:这种方法也是判判断点法

各条件互相关联形成区间要考虑条件成立与不成立S=t2t2-1t2-2t+1t2+4t-170<t<11≤t<22≤t<33≤t<4Attention!这题中有无效区间,用并列if结构时要排除无效区间,当t在无效区间时,应给s赋一个无效区间的任意值。例当t=-5则使s=-1//the1stMethod#include<iostream.h>voidmain(){ intt;cout<<"pleaseinputt="; cin>>t; if(t>0) if(t>=1) if(t>=2) if(t>=3) if(t>=4) cout<<"error,tcantbemorehan4!“; elsecout<<"s="<<t*t+4*t-7; elsecout<<"s="<<t*t-2*t+1 elsecout<<"s="<<t*t-1; elsecout<<"s="<<t*t; elsecout<<"error,tcantbelessthan0!“;

}例如:输入年份,判断是否为闰年,若是,回 答“Yes”,否则回答“No”。什么样的年份是闰年?能被4整除:是闰年能被4整除,也能被100整除:不一定是闰年能被4整除,也能被100整除,也能被400整除:是闰年#include<iostream.h>voidmain(){intyear;cout<<“pleaseinputtheyear:”;cin>>year; if(year%100==0)}if(year%400==0)cout<<“Yes”<<endl;elsecout<<“No”<<endl;/*不能被400整除*/elsecout<<“No”<<endl;/*不能被4整除*/elsecout<<“Yes”<<endl;/*不能被100整除*/if(year%4==0)if(year%4)/*不能被4整除*/

cout<<“No”<<endl;elseif(year%100)/*不能被100整除*/

cout<<“Yes”<<endl;elseif(year%400)/*不能被400整除*/

cout<<“No”<<endl;elsecout<<“Yes”<<endl;用一个逻辑表达式包含所有条件:if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;四、switch语句(开关语句)

形式:switch(表达式){case常量表达式1:语句序列1;case常量表达式2:语句序列2;

…..

case常量表达式n:语句序列n;default:语句序列n+1;}switch语句是多分支选择语句先计算switch中表达式的值,在大括号中若找到一个匹配的值就从该语句开始,依次向下执行.否则,执行default后面的语句组。执行:注意:

语句序列中可以有若干条语句,不用复合语句序列;case后的常量表达式的值必须为整型和字符型,起标号的作用。

大括号cin>>N;cout<<x;cin>>N;cout<<x;switch通常与break语句联用:break用于中断或结束语句(只能用在switch语句和循环语句中)例:输入成绩,若:90—100:A70—89:B60—69:C<60:Dbreak语句:#include<iostream.h>voidmain(){intcj;cin>>cj;switch(cj/10){ case10: case9:cout<<“\nA”;

case8:case7:cout<<“\nB”;case6:cout<<“\nC”;default:cout<<“\nD”;}}break;break;break;分支结构总结1、if语句的简单分支2、if语句的双分支:if--else3、if的嵌套4、switch语句的使用§3-5循环结构(渗透简单算法)一、while语句*二、do--while语句*三、for语句*四、break语句五、循环的嵌套六、continue语句七、goto语句主要学习语句的执行过程、使用方法一、while语句循环:重复执行一段语句语句格式:while(表达式)语句执行过程:先求表达式的值,判断为真为假,若为真,则执行语句真假表达式语句假注意:语句:一个语句,不是语句序列表达式后面不能有分号例如:求1+2+3+…+100的和#include<iostream.h>voidmain(){ints,i;s=0;/*s为累加和*/

i=1;/*i为循环控制变量*/

while(i<=100)/*循环条件*/{s+=i;i++;}cout<<s;}返回#include<iostream.h>voidmain(){ints,i;10:s=0;20:i=1;30:while(i<=4)40:{s+=i;50:i++;}

60:cout<<s;}s=0循环过程:102040305060i=1s=0+1i=21s=1+2i=311i=4s=3+30s=6+4i=5s=101二、do--while语句格式do语句while(表达式);执行情况:先执行语句,在计算表达式的值,若非0,再执行语句,否则执行下面的语句真表达式语句假do后若有多条语句,需使用复合语句语句至少被执行一次,不同于while语句注意while语句与do-while语句#include<iostream.h>voidmain(){ints,i;s=0;cin>>i;while(i<=100){s+=i;i++;}cout<<s;}#include<iostream.h>voidmain(){ints,i;s=0;cin>>i;do{s+=i;i++;}while(i<=100);cout<<s;}输入:101输出:0输出:101三、for语句(当型循环)

格式for(

表达式1;表达式2;表达式3)语句表达式2语句表达式1表达式3表达式1:作为初始化先执行表达式1的值,再执行表达式2,如果值为真,执行语句,再执行表达式3,否则执行下面的语句。

执行情况真假表达式2:作为循环控制,是循环条件表达式3:每次都要做改变循环变量for(循环变量赋初值;循环条件;循环变量增值)语句for(s=0,i=1;i<=100;i++)

s+=i;注意:

这三个表达式都可以忽略,但分号不能省for(;;)

不能构成死循环,死循环只能用ctrl+c强行中止,所以源程序编辑后应先存盘。**全部省略表达式或省略表达式2**例如:#include<iostream.h>voidmain(){inti;i=100;while(i>=20) {cout<<“\t“<<i; i-=20; }}#include<iostream.h>voidmain(){inti;for(i=100;i>=20;i-=20)cout<<“\t”<<i;}例如:求n!(n的值由键盘输入)#include<iostream.h>voidmain(){ intn;

doubles=1.0; cout<<"pleaseinputn="; cin>>n; for(inti=1;i<=n;i++) s*=i; cout<<n<<"!="<<s<<endl;}四、break语句

只用于switch语句和循环中,用在循环中,用来中止循环,提前跳出循环体#include<iostream.h>voidmain(){inti=1,s=0;while(i<=100) {if(s>=2000)break; s+=i; i++; }cout<<“s=“<<s<<“i=”<<i;}Example1:结果:s=2016i=64Example2:输入一个数,判断是否为素数#include<iostream.h>voidmain(){intn,i;cin>>n;for(i=2;i<n;i++) if(n%i==0)break;if(i==n) cout<<“\nYes”;elsecout<<“\nNo”;}例如:打印出100到200之间的素数。#include<iostream.h>voidmain(){inti,j;for(i=100;i<=200;i++) { for(j=2;j<i;j++) if(i%j==0)break; if(j>=i)cout<<“\t”<<i; }}五、循环嵌套内循环外循环

嵌套不能有交叉

在循环嵌套中,break语句只能退出一层循环#include<iostream.h>voidmain(){inti,j;longints=0,m=1;for(i=1;i<=5;i++){m*=i;s+=m;}cout<<s<<endl;}

单重for循环:例:求1!+2!+3!…+5!双重for循环的执行过程:例:求1!+2!+3!…+5!#include<iostream.h>Voidmain(){inti,j;longints=0,m;for(i=1;i<=5;i++){m=1;for(j=1;j<=i;j++)m*=j;s+=m;}cout<<s<<endl;}

m=1;s=0;当i<=5当j<=im*=j;j++;s+=m;i++;cout<<s<<endl;#include<iostream.h>10s=0;voidmain()20for(i=1;i<=3;i++){inti,j;30{m=1;longintm,s;40for(j=1;j<=i;j++)50m*=j;60s+=m;}70cout<<s<<endl;}102030405060m=1s=0i=1j=1m=1*1s=0+1i=2j=1m=1m=1*1j=2m=1*2s=1+2i=3j=1j=2j=4m=1m=1*1m=1*2m=2*3s=3+670s=9i=4外走一次内走一遍j=2j=3j=3打印一九乘法表1*1=11*2=21*3=3…1*9=9#include<iostream.h>voidmain(){

inti=1,j;cout<<“\n”;for(j=1;j<=9;j++)cout<<i<<“*”<<j<<“=“<<i*j;}inti,j;for(i=1;i<=9;i++) {cout<<“\n”;

for(j=1;j<=9;j++)

/*循环嵌套*/ cout<<i<<“*”<<j<<“=“<<i*j<<“\t”; }}inti,j;for(i=1;i<=9;i++) {cout<<“\n”;

for(j=1;j<=i;j++)

/*循环嵌套*/ cout<<i<<“*”<<j<<“=“<<i*j<<“\t”; }}1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=16…1*9=92*9=183*9=274*9=36...六、continue语句

只能用在循环中continue通常与if语句结合,一同用于循环结构

注意:与break语句的区别continue:结束本次循环,继续下次循环break:中止循环的进行例:把1到10之间的奇数输出出来#include<iostream.h>voidmain(){inti=0;While(++i<=10){if(i%2==0)continue; cout<<i<<““; }}

continue语句的学习

//程序1:#include<iostream.h>voidmain(){inti=100;while(i<=200){if(i%3==0)continue;cout<<i<<endl;i++;}}#include<iostream.h>voidmain(){inti=99;while(i<=200){i++;if(i%3==0)continue;cout<<i<<'\t';} cout<<endl;}七、goto语句goto语句的一般形式goto<语句标号>;程序举例累加累乘判素数牛顿迭代法数值积分*算法:§3-1C++输入输出流一、无格式输入输出二、指定格式输入输出返回

输入:从标准输入设备上输入数据到计算机内存中输出:将计算机中的数据在标准输出设备上输出出来一、无格式输入输出(系统默认的格式)C++中除了可以继续使用C语言中标准I/O函数(printf和scanf)外,还增加了特有的流输入(cin)和流输出(cout)。它们被定义在头文件iostream.h中,在使用cin和cout前,要用预编译命令#include将头文件包含到用户源文件中(输入输出预说明)。#include“iostream.h”

:在当前目录和系统指定的目录中找该文件#include<iostream.h>

:在由系统指定的文件目录中找该文件返回1、无格式输出cout输出流是输出一系列字节,当程序需要在屏幕上显示待输出的数据时,操作符cout必须和操作符<<(插入操作符)配合使用。格式如下:cout<<变量1<<变量2<<...<<变量n;或cout<<变量1<<变量2...<<变量n;返回注:两种形式输出效果相同例如:

#include<iostream.h>voidmain(){inta,b;charc;a=1;b=2;c=‘a’;cout<<a<<b<<c;}结果为:12acout<<“a=“<<a<<“b=“<<b<<“c=“<<c;双引号内的内容原样输出a=1b=2c=a#include“iostream.h”voidmain()

{cout<<“hello!\n”;cout<<“Iamastudent”;}例如:输出结果为:helloIamastudent311返回2、无格式输入cin当程序需要从键盘输入数据(到变量)时,可以使用抽取操作符“>>”从cin输入流中抽取字符。对于不同类型的数据cin格式都相同。格式:

cin>>变量1>>变量2>>...>>变量n;或cin>>变量1>>变量2 ...>>变量n;

返回#include“iostream.h”voidmain()

{inta,b;charc1,c2;cout<<“Pleaseinput2integers\n”;cin>>a>>b;cout<<a+b<<“\n”;cout<<“Pleaseinput2character\n”cin>>c1>>c2;cout<<c1<<c2<<endl;}例如:输出结果为:Pleaseinput2integers102030Pleaseinput2characterabab312返回二、指定格式输入输出返回返回流的默认格式输出有时不能满足特殊要求,如:

doubleaverage=9.400067; cout<<average<<endl;结果显示9.40007(默认显示6位有效数字),而用户若希望显示9.40(保留两位小数)结果,流默认格式就无能为力了。C++用控制符可以对I/O流的格式进行控制,可以满足用户的要求。控制符在头文件iomanip.h中,使用控制符时要在程序的头上加头文件iomanip.h。I/O流的常用控制符参P551、控制浮点数值显示返回C++默认的流输出数值有效位是6,使用setprecision(n)可控制输出流显示浮点数的数字个数。setprecision(n)与setiosflags(ios::fixed)合用,可以控制以定点方式输出数据的小数点右边的数字个数。ssetprecision(n)与setiosflags(ios::scientific)合用,可以控制指数表示法的小数位数。注意:小数位数截短时,进行4舍5入处理返回例:分别用浮点、定点和指数方式表示一个实数。#include<iostream.h>#include<iomanip.h>voidmain(){doubleaverage=9.400067;cout<<average<<endl;cout<<setprecision(1)<<average<<endl;cout<<setiosflags(ios::scientific);cout<<setprecision(6)<<average<<endl;cout<<setiosflags(ios::fixed)<<setprecision(8)<<average<<endl;}流按默认值6输出有效数字位1小数点后的位数8设置以指数形式输出2、设置值的输出宽度为控制输出间隔,除了可以使用空格强行控制外,还可以用setw(n)控制符,它包含在iomanip.h中。setw(n)主要用来输出欲留空间的格数,若空间多余则向右对齐;否则按实际数据长度输出。返回注意:setw(n)设置的间隔方式不保留其效力,仅影响紧接其后的数值输出。例如:返回#include<iostream.h>#include<iomanip.h>voidmain(){inta=80;intb=8000;cout<<setw(5)<<a<<endl;cout<<setw(2)<<b;}结果:808000cout<<b;3、输出8进制和16进制控制符hex、oct和dec分别对应16进制、8进制和10进制数的显示,它们在iostream.h头文件中已定义。例如:返回#include<iostream.h>voidmain(){intnumber=1001;cout<<“Decimal:”<<dec<<number<<endl<<“Hexadecimal:”<<hex<<number<<endl<<“Octal:”<<oct<<number<<endl;}结果为:Decimal:1001Hexdecimal:3e9Octal:17514、设置填充字符在默认状态下,使用空格来保证字符间的正确间隔,C++也可以用setfill控制符使一个非空格字符作为字符间的间隔(一般配合setw控制符使用)。setfill在头文件iomanip.h中已定义。setfill用法如下:返回例#include<iostream.h>#include<iomanip.h>voidmain(){cout<<setfill(‘*’)<<setw(2)<<12<<endl;<<setw(3)<<12<<endl;<<setw(4)<<12<<endl;}

运行结果:322返回12*12**12自学5、左右对齐输出返回6、强制显示小数点和符号7、控制换行endl§3-2结构化程序设计概念一、顺序结构二、分支结构三、循环结构返回一、顺序结构BAABNS图流程图返回

#include<iostream.h>voidmain(){inta,b,t;cin<<a<<b;t=a;a=b;b=t;cout<<“a=”<<a<<“b=“<<b;}abt1234341212a=34b=12输出:顺序结构程序设计。#include<iostream.h>#include<math.h>voidmain(){floata,b,c,s,area;cin>>a>>b>>c;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));cout<<“area=“<<area<<endl;}B二、分支结构N如果

成绩<60

那么通知补考否则告知你考试成绩AY条件PABNY条件P返回2-1标识符

标识符是一个字符序列,用来标记常量、变量、数据类型函数及程序的名字。标识符的命名规则:

1.所有标识符必须由一个字母(a~z或A~Z)或下划线(_)开头;

2.标识符的其它部分可以用字母、下划线或数字(0~9)组成;

3.大小写字母表示不同意义,即代表不同的标识符,如前面的AGE和age;C++语言中的标识符可以分为3类:关键字、特定字、一般标识符(附录A,B)

在定义标识符时,虽然语法上允许用下划线开头,但是,我们最好避免定义用下划线开头的标识符,因为编译器常常定义一些下划线开头的标识符。

C++没有限制一个标识符中字符的个数,但是,大多数的编译器都会有限制。不过,我们在定义标识符时,通常并不用担心标识符中字符数会不会超过编译器的限制,因为编译器限制的数字很大(例如255)。

一个写得好的程序,标识符应该尽量有意义。比如表示年可以用year,表示长度可以用length,表示累加和可以用sum等,这样的标识符本身就增加了程序的可读性,使程序更加清晰易懂。匈牙利命名法

正确地的利用命名有助于程序的查错。通过在数据和函数名中加入额外的信息。既增进程序员对程序的理解,也方便查错。基本原则是:变量名=类型+对象描述

char8位字符chchGrade

BOOL布尔值bbEnable

int整型nnLength

long32位有符号整型llOffset

*指针ppDoc数组构造类型:基本类型

:结构体共用体指针类型空类型数据类型字符型实型整型

枚举型类略基本型短整型长整型无符号型2-2基本数据类型基本类型

整型字符型实型枚举型表1基本的数据类型及其表示范围

1、常量(1)整型常量:没有小数点十进制:不能用数字0开头;如123,-23八进制:必须以数字0开头;如0123十六进制:必须以0x或0X开头,如0x123长整常量:数字后加l(或L),如123L2.3常量与变量(2)实型常量:又称浮点数十进制形式:由数字和小数点组成(必须有小数点)如.123,0.123指数形式:由尾符、尾数、阶码标志e(E)阶符、整数阶码构成如:

0.31415926×10=0.314159e+1

31.4159×10

=31.4159e-1注:浮点常量总是以双精度形式出现,若要表示float型数,则必须在实型数后面加上f或F,若表示longdouble则加l或L。如:12.3(double型)12.3F(float),12.3L(longdouble)-11(3)字符型常量:

一般字符:键盘上有该符号

转义字符:不能从键盘上直接输入(P28)以“\”开始的字符序列,表示控制代码单引号括起来的单个字符,‘a’’A’’2’单引号是定界符,不是常量本身的内容如

‘\n’表示回车换行(endl)‘\’’表示打印单引号‘\“’表示打印双引号A:65a:970:48(4)字符串常量:3a9d#=s\0存储:依次存放各自的ASCII码,尾部自动加字符串结束标志‘\0’,即:长度:为其本身的长度双引号括起来的一串字符例“3a9d#=s”“2天津ABC”

‘a’:字符常量,存储其ASCII码值,占据一个字节

“a”:字符串常量,占据两个字节,即:a与\0的ASCII码值‘a’与“a”的区别:charc1,c2;inti;c1=‘A’;c2=c1+32;i=c2;注:字符的ASCII码与整型数据可以通用,可以相互赋值注:

在字符串里,可以使用转义字符的书写方式cout<<“\”Iamastudent!\””;例如:在屏幕上输出:“Iamastudent!”“A\Sk3”或cout<<“A\\Sk3”;

(5)符号常量

C++中常量可以是常数,也可以是代表固定不变的值的名字—符号常量。比如程序中经常用到某个常数,此时可以定义一个名字来表示此常数,以便改进程序的可读性。例如计算圆面积或圆周长要用到3.1415926(不能直接用

),可定义为符号常量。定义符号常量一般形式:const

数据类型符号常量=表达式;例如:constfloatPI=3.1415926;

注意:(1)符号常量定义时必须初始化。如:

constfloatPI; PI=3.1415926; //error(2)定义中“表达式”只能是常量表达式,不能含有变量和函数。(6)枚举常量使用关键字enum定义枚举类型常量,枚举常量是一种符号常量,在内存中表示整型数.enum

类型名{枚举常量1,枚举常量2,….};例如:

enumCOLOR{RED,BLUE,GREEN,WHITE,BLACK};其中COLOR是枚举类型名,不是变量名,不占内存空间.RED,BLUE…是符号常量,如果没有专门规定,第一个符号常量的枚举值就是0,其他依次为:1,2,3,….,故RED的值为0,BLUE的值为1.可以给符号常量指定枚举值,也可以部分指定枚举值.

enumCOLOR{RED=100,BLUE=200,GREEN,WHITE=400};其中GREEN自动被赋值为201.例:

in

温馨提示

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

最新文档

评论

0/150

提交评论