面向对象程序设计(C++)【上】_第1页
面向对象程序设计(C++)【上】_第2页
面向对象程序设计(C++)【上】_第3页
面向对象程序设计(C++)【上】_第4页
面向对象程序设计(C++)【上】_第5页
已阅读5页,还剩425页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序设计(C+)授课班级:2012级计算机、网络工程联系方式李志清信息工程学院计算机系北斗村2栋107Tel.:-mail: lizhiqingchina lizqHomepage: /index.php?id=1463QQ: 532896048联系方式助教:刘婧信息工程学院计算机系信息楼509Tel.:-mail: 756184636QQ: 7561846361.1 程序与语言1.2 从C到C+1.3 结构化程序设计1.4 面向对象程序设计1.5 程序开发过程1.6 最简单的程序1.7 函数 第1章 C+入门1.1 程序与语言计算机

2、计算机是能以人几百万甚至几十亿倍速度进行计算并作出逻辑判断的设备。计算机程序计算机在一组指令控制下处理数据,这组指令称为计算机程序。硬件计算机由各种设备组成键盘, 屏幕, 鼠标, 磁盘, 内存, 光驱, 处理器, 我们把这些设备称为硬件。软件计算机上运行的计算机程序被称为软件三种计算机语言机器语言计算机能够直接识别的语言是特定计算机的自然语言由计算机的硬件设计定义通常由一系列数字组成最终简化为0和1让计算机执行最基本的操作一次一个例如:+1300042774+1400593419+1200274027加班工资和基本工资相加的一段程序,然后把结果存人工资总额对程序员而言太繁琐2. 汇编语言类似英

3、文缩写的助记符来表示计算机的基本操作对程序员比较清晰计算机不能直接理解由汇编器转换为机器语言实例: mov eax, DWORD PTR a_$ebpadd ecx,ecxMov DWORD PTR a_ $ebp 缺点:汇编语言进行程序设计仍然需要很多指令才能够实现最简单的任务。高级语言 高级语言类似日常英语,包含有常用的数学符号,一条语句完成大量任务。实例:a = 3*a-2*b+1;把高级语言转化为机器语言的翻译程序称为编译器 (compilers)C语言由两种早期语言BCPL 和 B发展而来的。作为 UNIX操作系统的开发语言,并用来开发现代操作系统。具有硬件无关性可以方便的移植到大多

4、数计算机上1972年:贝尔实验室开发出了C语言20世纪70年代后期,C语言发展成为 我们现在所说的“传统C语言”标准化1983年,正式定名C+1989:推出ANSI 标准1999: 标准进行更新ANSI/ISO 9899: 19901.2 从C到C+ C语言的特点和局限C语言的特点(1)语言简洁、紧凑,使用方便、灵活。C语言只有32个关键字,程序书写形式自由。(2)丰富的运算符和数据类型。(3)可以直接访问内存地址,能进行位操作,使其能够胜任开发操作系统的工作。C语言的局限(1) C类型检查机制相对较弱,使得程序中的一些错误不能在编译时发现;(2) C本身几乎没有支持代码重用的语言结构,因此一

5、个程序员精心设计的程序,很难为其他程序所用;(3)当程序的规模达到一定的程度时,程序员很难控制程序的复杂性。 C+语言的历史1980年,贝尔实验室的Bjarne Stroustrup开始对C进行改进和扩充。1983年正式命名为C+。在经历了3次C+修订后,1994年制定了ANSI C+ 标准的草案。以后又经过不断完善,成为目前的C+。C+仍在不断发展中。美国微软公司现已推出C#(C Sharp)语言,来代替C+语言。C+ :包括了整个C:C的全部特征、属性、优点 支持面向对象编程(OOP) 包括过程性语言部分和类部分过程性语言部分:与C无本质上的区别类部分:面向对象程序设计的主体1.3 结构化

6、程序设计功能分解并逐步求精程序由名为函数的模块或片段所组成的。程序员可以开发自己的函数优点:可以确切地知道这些函数如何工作;缺点:开发新函数耗费大量的时间。避免了一切重头开始如果有库函数存在,最好使用库函数标准库函数都是经过仔细编写的,能够有效地执行1.4 面向对象程序设计封装和数据隐藏目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。class Watch public: void SetTime(int NewH,int NewM, int NewS);void ShowTime(); private: int Hour,Mi

7、nute,Second;继承和重用C+采用继承支持重用的思想,程序可以在扩展现有类型的基础上声明新类型。新子类是从现有类型派生出来的,称为派生类或子类,而原有类称为父类或基类或超类。class StopWatch:Watch public: void Start();void Stop();多态性通过继承的方法构造类,采用多态性为每个类指定表现行为。学生类大学生类:高等数学、计算机、普通物理、英语中学生类:语文、数学、物理1.5 程序开发过程C语言的6个阶段:编辑预处理编译链接加载执行 主内存程序在编辑器中生成源程序并存盘预处理程序处理代码加载程序把程序放入内存CPU 取出每条指令并执行 。可

8、以在程序执行时存放新的数据值编译器编译器建立目标程序并保存到磁盘上连接器将目标码与库连接生成a.out文件并保存到磁盘上编辑器预处理器连接器CPU主内存.磁盘磁盘磁盘磁盘磁盘加载程序开发编辑编译出错?链接执行结果正确?结束源程序file.cpp目标程序file.obj库函数和其它OBJ可执行程序file.exeYesYesNoNo1.6 最简单的程序显示一行文本1 / ch1_1.cpp 第一个程序3 #include4 5 / 程序从函数main开始执行6 int main()7 8 coutI am a student.n;9 / 函数main结束I am a student. 以/开始,

9、表示注释。目的为了增加程序可读性,计算机不会执行注释中的语句#include这是一个C预处理指令。这一行告诉预处理器把标准输入/输出头文件(iostream.h)包括到这个程序中。头文件中包含了在编译诸如cout与cin的信息和声明。int main()C/C+程序包含有多个函数,但是仅有且必须有一个main函数。圆括号表示这是一个函数。int 意味着 main 函数返回一个整型的值。花括号表示块return 0;关键词return是我们用来表示退出程序的几种方法之一。return 0 表示程序成功结束。右大括号 表示到达了main的结尾。形如int main()为一个函数的完整描述1.7 函

10、数C与C+在函数结构上已经趋向一致形如type funcname()为一个函数的形式描述,其中 type为数据类型,例如int, funcname为函数名,例如main ()中描述传递的数据参数,后面慢慢展开 中描述需要执行的命令(动作序列)C+用函数组织程序 函数规定动作的执行次序C+程序是函数驱动的 可以在程序中 定义一堆函数, 从main函数始, 调用其他函数mainfunAfunBfunCAB1B2C命令(动作)描述中可以对函数直接调用,例如:c=max(a,b);funcname()的形式称为函数调用被调用的函数必须在调用之前有声明,例如: double max(double x,

11、double y);type funcname()称为函数定义,例如: double max(double a, double b) if(ab) return a; else return b; 函数声明就是取函数定义去掉花括号的部分,再添上分号/*ch1_3.cpp*#include#includedouble max(double x, double y);int main() double a,b,c; coutab; c=max(a,b); coutthe squart of maximum=“y) return x; else return y;函数声明或定义的括号中的参数称为形式

12、参数函数调用时括号中实际传递的值称为实际参数函数调用前必须要有函数声明调用math函数库中的sqrt函数,其声明用:#include2.1 字符集与保留字2.2 基本数据类型2.3 变量定义2.4 字面量2.5 常量2.6 I/O流控制2.7 printf与scanf 第2章 基本数据类型与输入输出保留字 keyword表2.1在程序中用到的其他名字不能与C/C+的关键字有相同的拼法和大小写2.1 字符集与保留字对程序当中所用到的所有数据都必须指定其数据类型。程序中所用到(表达)的数据亦应有名字,或为变量或为常量,它们都对应某个内存空间。数据类型的作用之一,是希望通过每个代表数据名字的性质来归

13、类,不同数据类型之间不能进行混算,内部表达不同,空间占用不同,这都是编译器查错的重要依据。2.2 基本数据类型C+的数据类型如下:象integer1, integer2和 sum这样的变量名实际上对应着计算机内存中的单元。每个变量都有一个名字、一个数据类型和一个值。 内存的概念integer1 45 输入两个变量后的内存单元计算完成之后的内存单元当一个值放在内存单元中时,这个值会取代内存单元中先前的值integer1 45 integer2 72 integer1 45 integer2 72 sum117 2.3 变量定义 3a变量名(一个符号地址,在对程序编译时系统分配给它一个内存地址)变

14、量值(在程序中对变量取值,实际上是通过变量名找到相应内存地址,从其存储单元中读取数据)存储单元在程序运行中其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放该变量的值。注意:变量名与变量值的区别。在程序中出现的,代表数据的文字。整型数:如12,0,3等(不带有小数);实型数:如4.6,1.23等;字符:如a,d等;字符串:如“abc”2.4 字面量在程序运行时保持不变的数据,用一个名字表示,该名字称为常量,在定义中加修饰const常量在定义时必须初始化,常量名不能放在赋值语句的左边 例如:const int a=123; a = 12; /erro

15、r另有一种#define的方法,如今已经不用 例如:#define a 1232.5 常量1、变量的定义必须放在执行语句之前;如果在执行语句中遇到一个变量,但是该变量还没有被定义,那么编译器会报语法错误。例如:int a =3; c = a+1; / error c没有定义2、每一个变量被指定为一确定数据类型,在编译时就能为其分配相应的存储单元;制定每一变量属于一个类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。注意:C/C+语言中的变量名可以是任何有效的标识符。标识符可以是由字母、数字和下划线(_)组成的一系列字符。例如: integer1, integer2, sum变量名的命

16、名变量的命名符合一般标识符(名字)的命名规则 。(1)变量为“字母数字串” ; 以字母开头,后边跟以字母或者数字,下划线等同于字母。(编程时不能用汉字作为名字,因C+语言以ASCII字符作为基本字符) (2) 建议长度不超过8个字符(最早的C语言版本,只允许8个字符,现在C+可允许30个字符长,依可移植性要求); (3) 区分大小写 (一般使用小写字母); 例如:int abc=3, Abc=7; /定义了不同的数据(4) 尽量做到“见名知意”,避免使用代数符号(如a,b); 例如:int length = 25, high=12;(5) 不能有空格,不能有小数点。命名规则I/O的书写格式使用

17、控制符控制浮点数值显示设置值的输出宽度输出八进制和十六进制数设置填充字符左右对齐输出强制显示小数点和符号2.6 I/O流控制I/O作为流的操作特征 cinab; coutab;使用控制符 控制符嵌在流操作中,表2-4 例如:couthexa; / 将整数a以16进制输出I/O的书写格式控制浮点数值显示普通格式:独立使用setprecision(n)表示有效位数n 例如:coutsetprecision(3)12.2675; 显示:12.3定点表示格式:fixed与setprecision(n)配合,表示小数精度n位 例如:double a = 123.56789; coutfixedsetpr

18、ecision(3)a*1000n; 显示:123567.890科学表示格式:scientific与setprecision(n)配合,表示小数精度n位 例如:coutscientifica*1000n; 显示:1.236e+05浮点数显示设置值的输出宽度和填充字符很有用,但要和#include一起用setw(n)是一次性的 例如:coutsetfill(%)setw(5)1020“n”; 显示:%1020 例如:cout10setw(5)20“n”; 显示:10 20若要显示的内容超setw(n)中的n,则设置无效 例如:coutsetw(3)12345“n”; 显示:12345设置值的输出

19、宽度 输入语句:cin程序在执行期间,接收外部信息的操作称为程序的输入;而把程序向外部发送信息的操作称为程序的输出。在C+中没有专门的输入输出语句,所有输入输出是通过输入输出流来实现的。 要使用C+提供的输入输出时,必须在程序的开头增加一行:#include 即包含输入输出流的头文件“iostream.h”。 输入十进制整数和实数cin int a,b;cinab;/程序运行至此停下,等待从键盘输入变量值键盘输入:3 5或:3 5 均可。输入语句自动过滤空白字符。a3键盘b5键盘浮点型数据同整型数据一样float c,d;cincd;char ch1,ch2;cinch1ch2;若输入:ab则

20、ch1为a,ch2为b。若输入:a b则ch1为a,ch2为b。字符型变量过滤空白字符。cin格式过滤空白字符float a;int i1,i2;char ch1,ch2;cini1ai2ch1ch2;输入:34 5.678 1a bi2:1在缺省的情况下,cin自动跳过输入的空格,换言之,cin不能将输入的空格赋给字符型变量,同样地,回车键也是作为输入字符之间的分隔符,也不能将输入的回车键字符赋给字符型变量。 a:5.678i1:34ch1:ach2:b若要把从键盘上输入的每一个字符,包括空格和回车键都作为一个输入字符赋给字符型变量时,必须使用函数cin.get()。其格式为:cin.get

21、();cin.get()从输入行中取出一个字符,并将它赋给字符型变量。这个语句一次只能从输入行中提取一个字符。char c1;cin.get(c1);char ch1,ch2,ch3;cin.get(ch1);cin.get(ch2);cin.get(ch3);输入:A B则:ch1:A并且在输入缓冲区中保留回车键。 ch2:空格ch3:B空格的ASCII码为3200100000ch2输入十六进制或八进制数据 在缺省的情况下,系统约定输入的整型数是十进制数据。当要求按八进制或十六进制输入数据时,在cin中必须指明相应的数据类型:hex为十六进制;oct为八进制;dec为十进制。 int i,j

22、,k,l;cinhexi;/指明输入为十六进制数cinoctj;/指明输入为八进制数cink;/输入仍为八进制数cindecl;/指明输入为十进制数当执行到语句cin时,若输入的数据为:11 11 12 12结果:i:17j:9k:10l:12使用非十进制数输入时,要注意以下几点:1、八进制或十六进制数的输入,只能适用于整型变量,不适用于字符型变量,实型变量。2、当在cin中指明使用的数制输入后,则所指明的数制一直有效,直到在接着的cin中指明输入时所使用的另一数制为止。如上例中,输入k的值时,仍为八进制。3、输入数据的格式、个数和类型必须与cin中所列举的变量类型一一对应。一旦输入出错,不仅

23、使当前的输入数据不正确,而且使得后面的提取数据也不正确。cina,b; cina b; cinab; int a, b;cinab; 与输入cin对应的输出是cout输出流。当要输出一个表达式的值时,可使用cout来实现,其一般格式为:cout ;其中运算符“”称为插入运算符,它将紧跟其后的表达式的值,输出到显示器当前光标的位置。 输出数据coutint a=6;float f1=12.4;char s1 =“abcd”;coutatf1ts1endl;t为转义字符Tabendl为回车或n显示器显示器显示器a6f112.4s10dcba612.4abcdcout将双引号中的字符串常量按其原样输

24、出char ch1=a,ch2=b;cout“c1=“ch1t“c2=“ch2endl;c1=ac2=bint i1=4,i2=5;float a=3.5;cout“a*i1=“a*i1endl“a*i2=“a*i2endl;a*i1=14a*i2=17.5在输出的数据项之间进行隔开的另一种办法是指定输出项的宽度。如上面的两个输出语句可改写为:cout setw(6) isetw(10)jendl;_ _ _ _ _ 4_ _ _ _ _ _ _ _12cout setw(5)msetw(10)j*kendl;_ _ _ _ 7_ _ _ _ _ _ _ _ 24其中setw(6)指明其后的输

25、出项占用的字符宽度为6,即括号中的值指出紧跟其后的输出项占用的字符位置个数,并向右对齐。setw是“set width”的缩写。指定输出项占用的宽度: 使用setw()应注意以下三点:1、在程序的开始位置必须包含头文件iomanip.h,即在程序的开头增加:#include 2、括号中必须给出一个表达式(值为正整数),它指明紧跟其后输出项的宽度。3、该设置仅对其后的一个输出项有效。一旦按指定的宽度输出其后的输出项后,又回到原来的缺省输出方式。输出八、十六进制数和科学表示法的实数对于整型数据可指定以十六进制或八进制输出,而对于实型数据可指定以科学表示法形式输出。例如,设有如下一个程序:#incl

26、ude void main(void) float x=3.14,y=100; cout.setf(ios:scientific,ios:floatfield); /表明浮点数用科学表示法输出 cout xt; cout yendl; 执行该程序后的输出为:3.140000e+000 1.000000e+002与cin中类同,当在cout中指明以一种进制输出整数时,对其后的输出均有效,直到指明又以另一种进制输出整型数据为止。对实数的输出,也是这样,一旦指明按科学表示法输出实数,则接着的输出均按科学表示法输出,直到指明以定点数输出为止。明确指定按定点数格式输出(缺省的输出方式)的语句为:cout

27、.setf(ios:fixed,ios:floatfield);3.1表达式3.2算术运算和赋值3.3算术类型转换3.4增量和减量3.5关系与逻辑运算3.6if语句3.7条件运算符3.8逗号表达式3.9求值次序与副作用 第3章表达式和语句算术运算符和算术表达式一、算术运算符和算术表达式+ * % 用算术运算符连接起来的式子是算术表达式两个整数相除结果为整数 1/2=0 5/2=2整数才可求余,余数的符号与左边数的符号相同。3%2=1 -3%2=-1 3%-2=1 -3%-2=-1 8%4=0二、优先级与结合性() * / % + 三、强制转换类型(类型名)(表达式)(double) a (in

28、t) (x+y) (int) 6.2%4=2在强制类型运算后原变量不变,但得到一个所需类型的中间变量。如:int x; float y=5.8; x=(int)y;x=5y=5.8y的值没有改变,仍是单精度浮点型四、自增、自减运算符 + i6i37 int i, j; i=3; j = +i;i=4 j=4 +在前, 先运算,后赋值 int i, j; i=3; j = i+;i=4 j=3 +在后, 先赋值,后运算j44i3j34i=6; i+; i=i+1 i=7 +i; i=i+1 i=7 i=6; i; i=i1 i=5 i ; i=i1 i=5i671)自增、自减运算符只能用于变量,

29、不可用于常量和表达式因为表达式在内存内没有具体空间,常量所占的空间不能重新赋值3+ (x+y)+ (i)+若i=3, j=2 (i+) +j 等于5i=4, j=22)结合方式自右至左,优先级最高,向右取最大i+ (i+) i+j (i+) +j赋值运算符和赋值表达式bmw=2002=左边必须是变量名。若“ = ” 两边变量类型不同,在赋值时要进行类型转换。转换原则:根据左边变量的类型转换。 少字节多字节1)若多字节变量为unsigned ,则转换后多余字节补零。000000001111111111111111unsignedshort int a=-1;unsigned long b;b=a

30、;ab111111111111111111111111有符号型,符号扩展short int a=-1;long b;b=a;2)若多字节变量为有符号型,则转换后扩展少字节的最高位。转换后,数据的符号不变。ab 多字节少字节低位照搬1111111111111111int a=-1;short int b;b=a;b=-1int a=65535;short int b;b=a;b=-1ba11111111赋值表达式a=b=5 ; b=5 a=5=的结合性为自右至左 复合的赋值运算符a+=3 a=a+3 x*=y+3 x=x*(y+3)x/=x-4 x=x/(x-4) x+=y x=x+yi+=j-

31、 i=i+(j-)a=12; a+=a-=a*a;12a a=a-(a * a) =12-(12*12)=-132 a=a+(-132)=-132-132=-264-132-264关系运算符和关系表达式关系运算符(比较运算) = = = != = = 与 = a=5; 赋值运算 a= =5;判断是否相等 = 的优先级大于= = !=3. 算术运算符的优先级大于关系运算符的优先级关系表达式:用关系运算符将表达式连接起来称为关系表达式。其值非真即假。在C+语言中,用非0代表真,用0表示假。关系表达式的结果只有两个,真为1,假为0。 a=2 b=3 c=4a2 ab+c a= =2 a= =aaa

32、b=a= =2aA b= =a+1c-a= =a001001101 逻辑运算符 运算符 与& 或 | 非! A B 结果000010100111有0出0,全1出1A,B同时成立&A B 结果000011101111有1出1,全0出0A或B有一个成立| |A 结果0 11 0有0出1,有1出0!江苏籍的男生江苏籍的学生和所有男生非江苏籍的学生江苏籍&男生例如:两个条件:江苏籍 男生江苏籍|男生!江苏籍注意:1.优先级:!&| | !算术关系逻辑赋值逗号3.不可写为 1x10 应为:1x & x3 & 2 | 8=1)&(c=5)100sizeof()运算符 sizeof()运算符是一个单目运算符

33、,用于计算某一个操作数类型的字节数。其格式为:sizeof()sizeof(int) /其值为4sizeof(float) /其值为4sizeof(double) /其值为8sizeof(char) /其值为1逗号运算符和逗号表达式表达式1,表达式2,表达式3,表达式n顺序求解,结果为最后一个表达式的值,并且优先级最低。a=(3+4, 5*6, 2+1); a=3a=3*3, a+6, a+7;16(a=3*5, a*4), a+520a=9a=15下列语句中表达式中i, j的值各为多少1、int i=0, j=0; 2、 int i=0, j=1; i=3, (j+)+i ; i+=j*=3

34、;3、int i=1, j=0; 4、int i=1, j=1; j=i=(i=3)*2); i+=j+=2;i=3,j=1i=3,j=3i=6,j=6i=4,j=3各类数值型数据间的混合运算整型、实型、字符型数据间可以混合运算。floatdoublelongunsignedintchar10+a+1.5-87.65*b在进行运算时,不同类型的数据要先转换成同一类型的数据再进行运算。转换规则如下:4.1while语句(“当”型循环结构)4.2do while 语句4.3for语句4.4switch语句(多分支选择语句)4.5转向语句 第4章过程化语句程序的三种基本结构1、顺序AB2、选择条件?

35、真假ABxy?真假z=xz=y3、循环A当P为真当型i+i=10i+PAYNif语句判断选择语句,有三种形式:if(表达式) 语句语句条件真假语句2语句1条件真假2) if(表达式) 语句1 else 语句2 if (ab) coutb) couta;else coutb) a=1; b=0; else a=0; b=1; a=0b=1a=1b=0ab真假if (i j) i+;if (ij); i+;i+ +ij真假if 总是与它上面最近的 else 配对,如要改变,用复合语句 。注意书写格式,相互配对的语句要对齐。ij真假i+ +例:输入两个实数,按代数值由小到大次序输出这两个数。void

36、 main( void ) float a,b,t; /定义变量coutab; /给变量赋值 a:7, b:3 if(ab) t=a; a=b; b=t; /交换数据,用中间变量 coutatbendl;/输出变量bat73773输出结果:3 7嵌套的条件语句(举例说明)x=100; a=10; b=20; ok1=5; ok2=0;if(ab?a:b ; / 求a, b中的大者当 a=2 b=1 ab为真,表达式的值等于a, max值为2当 a=1 b=2 ab为假,表达式的值等于b, max值为2注意:条件运算符的优先级比赋值运算符高 x=(x=3) ? x+2 : x-32. 结合方向自

37、左至右 ab?a:cd?c:d3. 三个表达式的类型可不同 z=ab?A:a+bx=5x=9, y=6, z=5;x=(x+y)%z=x%z+y%z)?1:0;coutx= xendl;x=1; y=2; z=3;x+=y+=z;couty?x+:y+)endl;y=y+z=5x=x+5=69x=0void main(void ) int x=1,y=2,z=3; x+=y+=z; coutxy?y:xendl; coutxy?x+:y+endl; coutx“,”yendl; couty?x+:y+endl; couty“,”zendl; x=3; y=z=4; cout=y&y= =x)?

38、1:0endl; cout=y&y=xendl;xyz 输出653653666356636,667996797,934434403441执行以下程序段后,变量a,b,c的值分别是:int x=10, y=9;int a,b,c;a=(-x= =y+)?-x:+y;b=x+;c=y;x=8 y=10 a=8b=8 x=9c=10void main(void ) int a=5,b=1,c=0; if(a=b+c) cout“* * *n”; else cout“$ $ $n”;* * *switch语句多分支选择语句。if语句只有两个分支,而实际问题中常常需要用到多分支的选择。如,成绩分为A(1

39、0085)、B(8470)、C(6960)、D(60以下)等。A10085YBY8470CY6960DYno passNNNN显示出错cin.get(grade);if(grade= =A) cout“10085n”;else if (grade= =B) cout“8470n”; else if (grade= =C) cout“6960n”; else if (grade= =D) cout“no passn”; else cout“errorn”; switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default:语句

40、n+1 switch(grade) case A:cout“10085n”; case B:cout“8470n”; case C:cout“6960n”; case D:cout“no passn”; default:cout“errorn”; 如果grade为 A,则结果为1008584706960no passerror其流程为:先计算表达式的值,然后顺序地与case子句中所列出的各个常量进行比较,若表达式的值与常量中的值相等,就开始进入相应的case语句执行程序,遇到case和default也不再进行判断,直至switch语句结束。如果要使其在执行完相应的语句后中止执行下一语句,可以在

41、语句后加break。switch(grade) case A:cout“10085n”; break; case B:cout“8470n”; break; case C:cout“6960n”; break; case D:cout“no passn”; break; default:cout“errorn”; 注意:1、switch与if不同,它仅能判断一种逻辑关系,即表达式是否等于指定的常量,而 if 可以计算并判断各种表达式。2、case子句后必须为常量,常常是整型和字符型。3、default可以省略,这时,不满足条件什么也不执行。4、case和default只起标号的作用,顺序可以颠

42、倒,颠倒时注意后面的break语句。5、多个case语句可以共用一组程序。 case A: case B: case C: cout“pass!n”;void main(void ) int i=10; switch(i) case 9: i+; case 10: i+; case 11: i+; default: i+; cout“i=”iendl; i=11i=12i=13i=13int x=1, y=0, a=0, b=0;switch( x ) case 1: switch( y ) case 0: a+; break; case 1: b+; break; case 2: a+; b

43、+; break; case 3: a+; b+; cout“a=“at“b=”bendl;a=1a=2 b=1a=2b=1有3个整数a,b,c,由键盘输入,输出其中最大的数。 while语句while ( 表达式) 语句组1 语句组2表达式语句组1真语句组2假a=3;while(a100) a=a+5;cout“a=“a;当循环语句超过一条时,要用 将语句组组合在一起。求 1+2+3+100void main(void) int i=1,sum=0; /定义变量,初始化 while(i=100) /构造循环 sum=sum+i; / 循环体,多次执行 i=i+1; cout“sum=”sum

44、endl; /输出结果循环条件初值循环次数123499100101sumi0112真33真64真105真真100真101真5050假sum50500sum1i1233641005050101循环结束!实际上是将i不停地累加到一起 注意:1、循环体如果为一个以上的语句,用 括起。2、循环体内或表达式中必须有使循环结束的条件,即一定有一个循环变量。3、while表达式可以成为语句,要特别小心。k=2;while(k!=0) coutk, k-;coutendl;k循环条件输出输出:212真21真10假回车void main(void) int num=0; while(num=2) num+; c

45、outnumendl; num循环条件输出1230真11真22真33假无void main(void) int y=10; while (y-); cout“y=”yendl;y条件输出输出:y=-1输出是什么?循环几次?10真无9真无真无1真无0假1循环:10次k=10;while( k=0 ) k=k-1;cout k; k10表达式0输出:0 x=10; while (x!=0) x-;x=10; while (x) x-;x=10; while(x-);x=10; while(-x); 以下语句,循环退出时x为多少?x=0 x=0 x=-1x=0#includevoid main()c

46、har ch;while(cin.get(ch)&ch!=n)switch (ch-2) case 0: case 1: cout(char)(ch+4); case 2: cout(char)(ch+4); break; case 3: cout(char)(ch+3) ; default : cout(char)(ch+2); break; coutendl; 从键盘输入2473,则程序的输出结果是:输出:668977直到P为真A直到型Dowhile语句表达式语句组1真语句组2假do 语句组1while(表达式);语句组2求 1+2+3+100void main(void) int i=1

47、,sum=0; /定义变量,初始化 do /构造循环 sum=sum+i; / 循环体,多次执行 i=i+1; while (i=100); cout“sum=”sum0)&(y5);cout“y=“y“,”“x=”xendl;y0 x0条件输出:y=1,x=010假若为while循环,则一次也不执行循环体,输出为:y=0, x=0s=7;do s-=2;while(s= =0);cout“s=”sendl; 第一次s75表达式N输出:s=5for语句for(表达式1;表达式2;表达式3) 语句组1(循环体)语句组2N表达式2语句组1Y语句组2表达式1表达式3for(循环变量赋初值;循环结束条

48、件;循环变量增值)求 1+2+3+100void main(void) int i, sum; for (i=1, sum=0; i=100; i+) sum=sum+i; cout“sum=”sumendl; void main(void) int i, sum; i=1; sum=0; while(i=100) sum=sum+i; i=i+1; cout“sum=”sumendl; 注意:1、当型循环,条件测试是在循环开始时进行,有可能一次也进入不了循环体。2、for语句中的三个表达式可以部分省略或全部省略,但;不能省略,若省略表达式2,则表示循环条件为真。3、for语句中三个表达式可以

49、是任何有效的C语言表达式。void main(void) char i, j ; for (i=a,j=z ; ij ; i+, j-) coutij; coutendl; 次数ijij输出输出:azbycxlomnaz真azby真bycx真cx真真mnmnnm假CR以下循环结果如何?for ( i=0, k= -1; k=1; i+, k+) cout“*n”;以下循环最多执行_次,最少执行_次for (i=0, x=0; ix; 101循环的嵌套一个循环体内又包含另一个完整的循环体,称为循环的嵌套。注意:1、循环体内有多个语句要用括起来。2、书写格式要清晰。for ( ; ; ) for

50、( ; ; ) void main(void) int i, j, k=0, m=0; for ( i=0; i2; i+) for ( j=0; j3; j+) k+; k- =j; m=i+j; cout“k=“k“, m=“ mendl; ii2jjn)1、m被n除得到余数r(0r n) r=m%nm=6 n=4 r=m%n=6%4=2while ( r=m%n ) m=n; n=r ; 最小公倍数为两数之积除以最大公约数。4*6/2=122、若r=0,则算法结束,n为最大公约数,否则做33、mn , nr , 回到1m=4 n=2 r=m%n=4%2=0所以,公约数=2最大公约数:能同

51、时被m和n整除的最大数。r=mn?n:mfor(i=1; ir; i+) if(m%i=0&n%i=0) a=i;couta;将 12345 的每位分别打印出来。12345105 12345/1012341234104 1234/10123123103 123/101212102 12/1011%101 1/100while(n)coutn%10 x; if (x= =123) break; 当输入123时,结束循环。break 只能退出一层循环或switch语句。a=10 ; y=0;do a+=2; y+=a; cout“a=“a“, y=“ y50) break; while (a=14

52、);第一次:a=12 y=12输出:a=12 , y=12第二次:a=16 y=28输出:a=16 , y=28第三次:a=16 y=44输出:a=16 , y=44第四次:a=16 y=60输出:a=16 , y=60continue:其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。void main(void) int i; for (i=1 ; i=5 ; i+ ) if (i%2) cout“*”; else continue; cout“#”; cout“ $n”;ii=5i%2输出输出:*#*#*#$1真1*#2真0无3真1*#4真0无5真

53、1*#6假$void main(void) int i, j, x=0 ; for (i=0 ; i2; i+) x+; for (j=0;j=3; j+) if ( j%2 ) continue; x+; x+; cout“x=“ xendl; jj%2xi=0 i2 第一次jj%2xi=1 i2 第二次i=2 i2 结束输出:x=80假21真22假33真3440假61真62假73真748void main(void ) int k=0; char c=A; do switch (c+) case A: k+; break; case B: k-; case C: k+=2; break;

54、case D: k=k%2; continue; case E: k=k*10; break; default: k=k/3; k+; while (cG); cout“k=” kendl; c+ck输出:k=4A真B2B真C4C真D7D真E1E真F11F假G4总结:在循环体中,break从循环体内跳出循环体,提前结束循环。for(. ; . ; . ) break; continue:其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。for(. ; . ; . ) continue; while( ) continue; 5.1函数概述5.2函数原型5

55、.3全局变量与局部变量5.4函数调用机制5.5静态局部变量5.6递归函数5.7内联函数5.8重载函数5.9默认参数的函数 第5章函数概述函数是程序代码的一个自包含单元,用于完成某一特定的任务。C+是由函数构成的,函数是C+的基本模块。有的函数完成某一操作;有的函数计算出一个值。通常,一个函数即能完成某一特定操作,又能计算数值。为什么要使用函数?1、避免重复的编程。2、使程序更加模块化,便于阅读、修改。参数(多个)函数值(唯一)函数体所编写的函数应尽量少与主调函数发生联系,这样便于移植。说明:1、一个源程序文件由一个或多个函数组成,编译程序以文件而不是以函数为单位进行编译的。2、一个程序可以由多

56、个源文件组成,可以分别编译,统一执行。3、一个程序必须有且只有一个main( )函数,C+从main( )函数开始执行。4、C+语言中,所有函数都是平行独立的,无主次、相互包含之分。函数可以嵌套调用,不可嵌套定义。5、从使用角度来说,分标准函数和用户自定义函数;从形式来说,分无参函数和有参函数。库函数是C+编译系统已预定义的函数,用户根据需要可以直接使用这类函数。库函数也称为标准函数。为了方便用户进行程序设计,C+把一些常用数学计算函数(如sqrt()、exp()等)、字符串处理函数、标准输入输出函数等,都作为库函数提供给用户,用户可以直接使用系统提供的库函数。库函数有很多个,当用户使用任一库

57、函数时,在程序中必须包含相应的头文件。 如 #include等。用户在设计程序时,可以将完成某一相对独立功能的程序定义为一个函数。用户在程序中,根据应用的需要,由用户自己定义函数,这类函数称为用户自定义的函数。 根据定义函数或调用时是否要给出参数,又可将函数分为:无参函数和有参函数。 函数定义的一般形式一、无参函数主调函数并不将数据传给被调函数。类型说明 函数名(void) 函数体 无参函数主要用于完成某一操作。不传递参数参数(多个)函数值(唯一)函数体void main(void ) printstar ( ); print_message ( ); printstar( );void pr

58、intstar (void ) cout“* * * * * * * * * * *n”; void print_message (void) couty)? x : y ; return z; void main (void ) int a,b,c; cinab; c=max (a , b) ; cout“The max is” cy)? x : y ; return z; void main (void ) int a,b,c; cinab; c=max (a , b) ; cout“The max is” cy)? x : y ; return z; void main (void )

59、int a,b,c; cinab; c=max (a+b , a*b) ; cout“The max is”cendl; 先计算,后赋值若a为3,b为5,则实参为8, 15,分别送给形参x,y。说明:1、在未出现函数调用时,形参并不占内存的存储单元,只有在函数开始调用时,形参才被分配内存单元。调用结束后,形参所占用的内存单元被释放。2、实参对形参变量的传递是“值传递”,即单向传递。在内存中实参、形参分占不同的单元。3、形参只作用于被调函数,可以在别的函数中使用相同的变量名。5a8b实参xy形参58void fun(int a, int b) a=a*10; b=b+a; coutatbendl

60、;void main(void) int a=2, b=3; fun(a,b); coutatbendl;ab23ab23202320 232 3void fun(int x, int y) x=x*10; y=y+x; coutxtyendl;void main(void) int a=2, b=3; fun(a+b,a*b); coutatby) return x ; else return y; 若函数体内没有return语句,就一直执行到函数体的末尾,然后返回到主调函数的调用处。先计算,后返回可以有多个return语句不带返回值的函数可说明为void型。函数的类型与函数参数的类型没有关

温馨提示

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

评论

0/150

提交评论