C++语言程序设计(上)ppt.ppt

上传人:za****8 文档编号:15798721 上传时间:2020-09-06 格式:PPT 页数:241 大小:499.02KB
返回 下载 相关 举报
C++语言程序设计(上)ppt.ppt_第1页
第1页 / 共241页
C++语言程序设计(上)ppt.ppt_第2页
第2页 / 共241页
C++语言程序设计(上)ppt.ppt_第3页
第3页 / 共241页
点击查看更多>>
资源描述
C+语言程序设计(上),第1章 计算机与程序设计 第2章 数据类型、运算符与表达式第3章 输入和输出第04章 控制结构第5章 函数第6章 数组第7章 指针第9章 链表 第10章 面向对象程序设计基本概念 第11章 类与对象第12章 类和对象的使用第13章 运算符重载 第14章 继承第15章 多态性第16章 文件和流第17章 异常第18章 模板,第1章 计算机与程序设计,讲授内容,计算机系统的基本组成、工作原理 程序设计的基本过程和方法 程序设计语言基本概念及其发展历史 结构化程序设计和面向对象程序设计方法 典型的C+编程环境、开发过程和程序结构 程序设计风格,1.1 计算机系统概述(1/4),计算机系统 机器系统 能接收和存储信息 能对数据进行处理和计算 能输出结果 计算机系统由硬件系统和软件系统组成 硬件系统包括CPU、显示器、内存、硬盘、键盘等 软件系统包括各种程序和文档,1.1 计算机系统概述(2/4),计算机硬件是软件实现的基础 运算器对数据进行算术运算和逻辑运算 主存储器存储二进制信息,与运算器、控制器等直接交换信息 控制器按程序的要求,控制计算机各功能部件协调一致地动作 控制器 + 运算器 = 中央处理器 中央处理器 + 主存储器 = 处理机,1.1 计算机系统概述(3/4),计算机硬件是软件实现的基础 输入设备将用户信息(数据、程序等)变换为计算机能识别和处理的信息形式 输出设备将计算机中二进制信息变换为用户所需要并能识别的信息形式 辅助存储器存储主存储器难以容纳、又为程序执行所需要的大量文件信息,1.1 计算机系统概述(4/4),计算机软件计算机系统中的指挥者 系统软件最靠近硬件,如编译程序和操作系统等 支撑软件支撑其它软件的开发和维护,如各种数据库管理系统、接口软件和工具组 应用软件用于特定应用领域,如财务管理系统 上述分类是交叉和变化的 一个软件可以在一个系统中是系统软件,在另一个系统中是支撑软件 在同一系统中,一个软件可以既是系统软件,也是支撑软件,1.2 程序设计基本概念(1/6),问题求解过程步骤 问题定义明确要解决的问题 算法设计把要求解的问题转化为计算机的解题步骤 程序编码对设计出来的算法实现进行编程实现 测试和调试发现和纠正程序中的错误,1.2 程序设计基本概念(2/6),算法与程序 算法由有限个步骤组成的求解问题的方法 算法的特点 有穷性:执行有穷个步骤后必须终止 确定性:每一个步骤必须是无二义的 能行性:每一个步骤都可以在有限时间内做完 输入:一般有输入信息 输出:一般有一个或多个输出信息,1.2 程序设计基本概念(3/6),算法的描述方式 文字描述 自然语言 图形描述 流程图、盒图,PAD图等 程序语言描述 计算机程序,如C+,1.2 程序设计基本概念(4/6),程序的组成 数据 数据结构,程序处理的数据 操作 处理数据的操作步骤,即算法 程序 数据结构 算法,1.2 程序设计基本概念(5/6),程序设计和程序编码 先设计,后编码 设计是基础,是编码的依据 设计的好坏影响代码的质量,1.2 程序设计基本概念(6/6),程序设计语言 描述数据和对数据的操作 机器语言 用机器基本指令编码,二进制形式 汇编语言 使用一组助记符编码,需要汇编才能运行 高级语言 表示方法更接近于待解问题的表示方法,需要编译才能运行,1.3 程序设计方法(1/4),结构化程序设计 任何程序逻辑都可以用顺序、选择和循环三种基本结构表示,1.3 程序设计方法(2/4),结构化程序设计 自顶向下,逐步求精 描述问题,分析问题,分解问题成相对独立的子问题(反复进行,逐步分解) 描述子问题的数据和操作 模块化原则 尽量采用典型基本控制结构:顺序、选择、循环 缺点(对于大型软件开发) 稳定性低、可修改性和可重用性差,1.3 程序设计方法(3/4),面向对象程序设计 面向问题 现实世界是由对象组成的 问题由哪些对象组成?对象之间如何相互作用? 结构化程序由函数组成,面向对象程序由对象组成 易于扩展、可维护性好,1.3 程序设计方法(4/4),面向对象分析和设计步骤 找出问题中的对象和类 确定每个对象应具备的属性和功能 确定类、对象之间关系,相互作用的方式 用程序代码实现这些对象和类,1.4 C与C+ (1/3),C语言的历史 起源于Algol 60 在Algol 60的基础上发展出CPL语言 1967年发展为BCPL,用于编写操作系统和编译器 1970年贝尔实验室将BCPL改良成B,并用B语言实现了第一个UNIX操作系统 1972年左右,Dennis Ritchie和Ken Thompson在贝尔实验室设计UNIX系统时,开发出了C语言 之后,C语言发展出很多版本 1988年,美国国家标准化协会(ANSI)制定了C的标准ANSI C,1.4 C与C+ (2/3),C语言的特点 数据类型丰富 运算符丰富,共34个运算符 支持结构化程序设计 方便、灵活,结合了高级语言的基本结构、语句和低级语言的实用性 程序生成代码质量高、程序执行效率高 可移植性好,可用于UNIX 、AIX、WINDOWS等操作系统,1.4 C与C+ (3/3),C+语言 在C语言中引入了面向对象的思想 是一种混合型的语言,同时支持结构化程序设计和面向对象程序设计方法 兼容C语言,可不加修改地使用C语言代码 允许数据抽象,支持封装、继承和多态等特征,1.5 C+编程简介,使用IDE开发C+程序 编辑(edit) 预处理(preprocess) 编译(compile) 连接(link) 装入(load) 执行(execute),例子1:C+程序:输入一个人的姓名,然后输出HELLO,* * *,/ ex1_2.cpp: 输入姓名,然后在屏幕输出问候信息。 # include int main( ) char name20; / 输出提示信息 cout name; / 输入姓名 / 输出信息,并使用n换行 cout HELLO, name ! n; return 0; / 指示程序运行 ,1.6 程序设计风格(1/2),用好的设计方法编写结构好的程序 提高程序的可读性、可理解性和可修改性,以利于程序查错、测试及维护 程序员要养成良好的程序设计风格,1.6 程序设计风格(2/2),注意点 以简洁明了的方式编写C+程序 缩排规则 标识符命名规则 注释 输出信息直观清晰,布局合理,学习目的检测,了解计算机系统、程序设计语言、程序设计的基本概念 掌握简单C+程序的结构 明确程序设计风格的意义,作业,1.2 1.3 1.7 1.9,第2章 数据类型、运算符与表达式,讲授内容,C+语言的基本元素、字符集和关键字 基本的数据类型的表示方法 常量和变量 类型转换 各种运算符与表达式,2.1 C+的字符集和关键字(1/2),字符集 由52个字母、10个数字、27个特殊字符组成 所有C+程序(忽略换行符和字符串常量中的内容)都由字符集中的字符按一定规则构成,2.1 C+的字符集和关键字(2/2),C+标识符是满足如下条件的一串字符 由字母(az,AZ)或下划线(_)开头; 其它部分可以由字母、下划线或数字(09)组成; 只有前32个字符有效; C+的63个关键字也是标识符,但不能作其它用(保留字),2.2基本数据类型(1/5),C+程序中的每个数据对象(如2、x1、x1+2)都有确定的数据类型 C+的数据类型包括基本数据类型和复合数据类型 基本数据类型有 整型、浮点型、字符型、布尔型 不同数据类型有自己的取值范围和所允许的操作,2.2基本数据类型(2/5),整型 signed short int (简写为 short ) signed int (简写为 int ) signed long int (简写为 long ) unsigned short int (简写为 unsigned short) unsigned int (简写为 unsigned ) unsigned long int (简写为 unsigned long),2.2基本数据类型(3/5),浮点型 float (浮点型) double (双精度型) long double (长双精度型) 均有符号 不允许的操作:取余、位运算等,2.2基本数据类型(4/5),字符型 char signed char unsigned char 实质是占一个字节的整型数(小整数) 允许的操作:和整型相同,2.2基本数据类型(5/5),布尔型 bool 值为true和false 可以当作整数用(true一般为1,false为0) 把其它类型的值转换为布尔值时,非零值转换为true,零值转换为false,2.3变量与常量(1/9),函数体 说明语句 类型名、变量、常量表达式 执行语句 表达式 变量、常量、运算符,2.3变量与常量(2/9),扩充的巴克斯范式 表示语法(全书统一,不涉及语义) 1|2|3|4|5|6|7|8|9 0|1|2|3|4|5|6|7 0|1|2|3|4|5|6|7|8|9| a|b|c|d|e|f|A|B|C|D|E|F | u|U l|L 0,2.3变量与常量(3/9),扩充的巴克斯范式 | | 0| 0 0 x | 0X 0|1|2|3|4|5|6|7|8|9,2.3变量与常量(4/9),扩充的巴克斯范式 | .|. e | E + | f|l|F|L,2.3变量与常量(5/9),扩充的巴克斯范式 字符集中除单引号、反斜线外的任意字符 | | |“|?|a|b|f|n| r|t|v | | x,2.3变量与常量(6/9),扩充的巴克斯范式 “” 字符集中除双引号“、反斜线外的任意字符 | 其它可显示字符 | ,2.3变量与常量(7/9),变量 四要素: 变量名、类型、存储空间、值 必须先声明后使用,一般声明形式为: auto|register|static|extern ,2.3变量与常量(8/9),符号常量 符号常量是经过定义的代表常量的标识符 C+定义符号常量的格式如下: #define #define是C+的预处理指令,说明程序中的都代表了。,2.3变量与常量(9/9),例子: #define PRICE 30 #include main() int num, total; num=10; total=num* PRICE; couttotal= totalendl; return 0; ,2.4类型转换(1/4),举例 (int)3.14 将3.14转换成整数3 (double)3 将3转换成双精度浮点数3.0 double(3) 将3转换成双精度浮点数3.0,2.4类型转换(2/4),提升规则 将数值转换成较低的类型,如从float到int 必须显式地使用类型转换,如(int)3.14; 将数值转换成较高的类型 可以通过隐式的类型转换,如3.14+2,2.4类型转换(3/4),隐式类型转换 表达式中运算符的操作数类型与要求不符时,要进行隐式类型转换,使之符合要求 隐式类型转换规则: (1)表达式中如有char、short和enum类型的数据时,自动将它们转换成int类型 (2)把表达式中不同类型的数据转换成精度最高、占用内存最多的那个数据的类型 在赋值表达式中,自动将赋值运算符右边表达式的值的类型转换成左边变量的类型,2.4类型转换(4/4),强制类型转换(显式类型转换) 形式为: () 或 () 例如: (double)3/2 或 double(3)/2 (double)(3/2)或 double(3/2),2.5运算符和表达式(1/11),运算符的优先级和结合性 运算符包括: 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符 根据组成表达式的运算符的不同,表达式可以分为算术表达式、关系表达式、逻辑表达式、位运算表达式、逗号表达式和赋值表达式,2.5运算符和表达式(2/11),算术运算之一:一元算术运算 + 正,运算结果同操作数 - 负,运算结果为操作数的负数 + 自增运算符;操作数的位置? - 自减运算符,2.5运算符和表达式(3/11),算术运算之一:基本算术运算(二元) + 加法,运算结果为两个操作数的和 - 减法,运算结果为左操作数减去右操作数的差 * 乘法,运算结果为两个操作数的乘积 / 除法,运算结果为左操作数除以右操作数的商 求余,运算结果为左操作数除以右操作数的余数,只用于整型数据,其结果也是整型,2.5运算符和表达式(4/11),算术运算之一:基本算术运算 两个整数作/运算,其结果为整数 具体结果依赖于具体机器,一般为直接截去小数部分 两个整数求余 如果两数都是正数,结果为正 否则结果与左操作数的符号一致(Microsoft C+),2.5运算符和表达式(5/11),算术表达式 | | + | - | + | + | - | - | | () ,2.5运算符和表达式(6/11),关系运算 |=|=|!=,2.5运算符和表达式(7/11),逻辑运算 | | | 字符输出函数putchar int putchar(int c );,例子1:字符输入输出,/ ex3_1.cpp # include int main() char a=a, b=b, c; c = getchar(); putchar(a); putchar(b); putchar(c); putchar(c); putchar(); putchar(0101); putchar(n); return 0; ,程序运行如果,s abcsA,3.3 格式化输入输出(1/12),格式化输入函数scanf 输入各种类型的数据,并存入相应的参数中 读取输入流中的指定的字符 跳过输入流中的指定的字符,3.3 格式化输入输出(2/12),格式化输入函数scanf scanf( , ) 描述输入数据遵循的格式,可以包含3种类型的字符:格式指示符、空白字符(空格、Tab键和回车键)和非空白字符(普通字符) 是存放数据的地址的列表,参数之间用“,”分隔。参数列表是一个地址列表 scanf(%d %f %d, 12 34.5 678,3.3 格式化输入输出(3/12),scanf函数的格式指示符 % * %是格式指示符的前导符 * 赋值抑制符,表示该格式指示符对应的数据读入后,不赋给相应的变量 scanf(%d %*d %d %d, 输入 12 34 567 89,3.3 格式化输入输出(4/12),scanf函数的格式指示符 % * 宽度是任选项,为一整数n,指明了该输入数据长度为n,如果有多余的部分将被舍弃 scanf(%3c%3c, ch1和ch2均为字符型变量,输入为:abcdefg,3.3 格式化输入输出(5/12),scanf函数的格式指示符 % * 转换说明符,3.3 格式化输入输出(6/12),格式化输出函数printf 指定浮点值保留的小数位数 浮点值小数点对齐 输出数据的右对齐和左对齐 将直接字符插入到输出数据中 将浮点数按照指数形式输出 将整数按照八进制或十六进制形式输出 按指定的域宽和精度输出数据,3.3 格式化输入输出(7/12),格式化输出函数printf printf (, ); 描述了输出数据的格式。可以包含3种类型的字符 格式指示符, 则被参数列表中相应的数据替换 转义字符,按其含义输出相应的特殊符号 普通字符,按照原样输出,3.3 格式化输入输出(8/12),格式化输出函数printf printf (, ); 存放输出数据的表达式列表。 格式指示符的数量、顺序与输出参数相对应。 printf函数执行时,从左到右依次处理格式控制串,遇到格式控制字符,先计算相应的输出参数表达式,然后将该参数的计算结果按照格式指示符指定的方式输出,3.3 格式化输入输出(9/12),格式化输出函数printf printf (, ); 中的格式指示符 % 其中、 和可选,3.3 格式化输入输出(10/12),格式化输出函数printf 中的格式指示符 % 共五种不同的标志,3.3 格式化输入输出(11/12),格式化输出函数printf 中的格式指示符 % 域宽,指明了数据打印的宽度。如果数据实际长度小于域宽,则数据输出右对齐;如果数据实际长度大于域宽,系统自动突破域宽限制,按数据的实际长度输出,3.3 格式化输入输出(12/12),中的格式指示符 精度:对于整数,表示至少要打印的数字个数,如果数据长度小于精度,则左边补齐0;如果数据实际长度大于精度,则按数据实际长度输出。 对于浮点数,如果转换说明符为e、E和f,精度表示小数点后的有效位数,如果数据小数部分的长度小于精度,则在右边补齐0;否则按精度对数据进行舍入输出。 如果浮点数的转换说明符为g和G,精度表示打印数据的最大的长度。 对于字符串,精度表示字符串输出的最大长度,如果输出字符串长度小于精度,则按照字符串的实际长度输出;否则按精度截取输出字符串开头的n个字符(假设精度为n)输出,例子2:格式化输入输出例子(1/2),/ ex3_2.cpp: 基本格式化输入和输出 # include int main() int num1; float num2; char ch2; int na, nb, nc, nd, ne, nf, ng; double da, db, dc; printf(-Basic input and output:-n); printf(“Input a char, a int and a float:); scanf(%c %d %f, ,例子2:格式化输入输出例子(2/2),printf( Please enter seven integers: ); scanf( %d%i%i%i%o%u%x, ,3.4 用流进行输入输出(1/3),通过I/O流对象实现输入输出功能 将实现数据传送操作的设备抽象成对象 将“流”作为设备(如键盘、显示器等)和程序之间通讯的通道 C+预定义的四个输入输出对象 cout,标准输出设备,即显示器 cin,标准输入设备,即键盘 cerr和clog代表标准错误流对象,3.4 用流进行输入输出(2/3),通过cout流输出数据 cout ; cout . ; coutWelcome to C+ !n ; cout123 + 456 = (123 + 456) endl ;,3.4 用流进行输入输出(3/3),通过cin流输入数据 cin cin . . . ;,例子3:流输入输出例子,/ex3_5.cpp #include int main() char c ; int i ; float x , y ; cout i x y ; c=i; cout c= c ti= i; cout tx= x ty= y n ; return 0; ,3.5 流操纵算子(1/4),流操纵算子为流输入输出提供格式化输入输出的功能 常用的流操纵算子,3.5 流操纵算子(2/4),设置整数基数 将整数按十进制、八进制和十六进制等形式输出 流操纵算子oct将整数输出形式设置为八进制 流操纵算子hex将整数输出形式设置为十六进制 流操纵算子dec将整数输出形式设置为十进制,例子4:使用设置整数基数的流操纵算子,#include #include int main() int n; cout n; cout n in hexadecimal is: hex n endl dec n in octal is: oct n endl; return 0; ,3.5 流操纵算子(3/4),设置浮点数精度 流操纵算子setprecision和函数precision都可控制浮点数小数点后面的位数,例子5:使用设置浮点数精度的流操纵算子,/ex3_7.cpp: 设置浮点数精度的流操纵算子的使用 #include #include #include int main() double log2 = log( 2.0 ); int places; cout log(2) with precisions 0-9.n Precision set by the precision member function: endl; for ( places = 0; places = 9; places+ ) cout.precision( places ); cout log2 n; ,例子5:使用设置浮点数精度的流操纵算子,cout nPrecision set by the setprecision manipulator:n; / 使用setprecision算子 for ( places = 0; places = 9; places+ ) coutsetprecision(places)log2n; return 0; ,3.5 流操纵算子(4/4),设置域宽 函数width可以设置当前域宽(输入输出的字符数) 如果输出的数据所需的宽度比设置的域宽小,空位用填充字符(省缺为空格)填充 如果输出的数据所需的宽度比设置的域宽大,系统输出所有位 流操纵算子setw也可以设置域宽,例子6:使用设置域宽的流操纵算子,/ex3_8.cpp: 设置域宽的流操纵算子的使用 #include #define WIDTH 5 int main() int w = 4; char string WIDTH + 1 ; cout string ) cout.width( w+ ); cout string endl; cin.width( WIDTH ); return 0; ,学习目的检测,掌握各种输入输出函数 掌握通过I/O流进行输入输出的方法,作业,3.8 3.13,第04章 控制结构,讲授内容,顺序结构:表达式语句和复合语句 选择结构:if语句、if-else语句和switch语句 循环结构:while语句、do-while语句、for语句 控制转移语句:continue语句、break语句及goto语句,4.1 程序的基本控制结构,顺序结构:包括表达式语句和复合语句等 选择结构:if语句、if-else语句、switch语句 循环结构:while语句、do-while语句、for语句。 其它:空语句、continue语句、break语句、goto语句、return语句,4.2 顺序结构(1/3),表达式语句 表达式 ; 表达式语句示例: a = a + 3;/ 赋值语句 x = y = z = 0; / 多重赋值语句 t = 2,t + x + a; / 逗号表达式语句 z = i j ? x : x + y ;/ 条件表达式语句 f1(); / 函数调用语句 x1 = exp(x); / 函数表达式语句,计算 ex x2 = pow(x, y); /函数表达式语句,计算xy,4.2 顺序结构(2/3),空语句 空语句的形式如下: ; 表达式语句和空语句示例: a = a + 3;/ 赋值语句 ; / 空语句,4.2 顺序结构(3/3),复合语句 复合语句的语法: 复合语句示例: a = a + 3;/ 赋值语句 x = y = z = 0; / 多重赋值语句 t = 2,t + x + a; / 逗号表达式语句 z = i j ? x : x + y ;/ 条件表达式语句 ,例子1:计算圆的周长和面积,#include #include #define PI 3.14 int main() double radius, area; radius = 3.0 ; double perimeter; perimeter = PI * 2 * radius; cout“Perimeter is : “perimetern ; area = PI * radius * radius; cout“Area of the circle is : “arean ; return 0; ,4.3 选择结构(1/7),if 语句 if ( ) 可以是任意表达式(一般为逻辑表达式) if语句示例: if (grade=60) cout passed n;,4.3 选择结构(2/7),if-else 语句 if ( ) else if-else 语句示例: if (grade = 60) cout Passed !n; else cout Failed !n; (错:elsecout Failed !n;),4.3 选择结构(3/7),if-else 语句 if 或if-else的嵌套: if 或if-else中嵌套 if 或if-else if(grade=90)printf(“A”); else if (grade=80)printf(“B”); else if (grade=70)printf(“C”); else if (grade=60)printf(“D”); else printf(“F”); 注意else和if的匹配:在if语句后面若直接跟else,则把if语句、else和其后的语句一起作为if-else语句,4.3 选择结构(4/7),if-else 语句 if 或if-else的嵌套: if 或if-else中嵌套 if 或if-else if(grade=60) if(grade=100)printf(“AAA”); else if (grade=0)printf(“FFF”); 不等价于 if(grade=60) if(grade=100)printf(“AAA”); else if (grade=0)printf(“FFF”);,4.3 选择结构(5/7),if-else 语句 复合语句应用示例 if ( grade = 60 ) printf(“Passed.n”); else printf(“Failed.n”); printf(“Do you take this course again?y/n”); cinanswer; ,4.3 选择结构(6/7),switch 语句 switch ( ) case : case : case : default: 多个case分支和可选的default分支 的值为整数类型(int,char,) 每个的最后一个语句一般为break语句,每个也可以为空,4.3 选择结构(7/7),switch 语句流程,例子2:用switch语句实现成绩转换,#include int main() int score;scorePhrase; cout score; if (score 0) cout The score is illegal!; return 1; scorePhrase = score / 10; switch ( scorePhrase ) case 9: coutGrade is A. endl; break;,例子2:用switch语句实现成绩转换,case 8: coutGrade is B. endl; break; case 7: coutGrade is C. endl; break; case 6: coutGrade is D. endl; break; case 0:case 1:case 2:case 3:case 4:case 5: coutGrade is E. endl; break; default: coutThe score is illegal! endl; return 0; ,4.4 循环结构(1/13),while 语句 while( ) ,4.4 循环结构(2/13),while 语句 int product = 2; while ( product = 1000 )product = 2 * product;,例子3:while语句和switch语句的应用,/* 计算各级成绩的人数 */ #include int main() int grade; int aCount = 0, bCount = 0, cCount = 0, dCount = 0, fCount = 0; printf(Enter the letter grades.n); printf(Enter EOF to end.n); while ( ( grade = getchar() ) != EOF ) switch ( grade ) case A: case a: +aCount; break;,例子3:while语句和switch语句的应用,case B: case b: +bCount; break; case C: case c: +cCount; break; case D: case d: +dCount; break; case F: case f: +fCount; break; case n: case : break;,例子3:while语句和switch语句的应用,default: printf(Incorrect letter grade entered.); printf( Enter a new grade.n ); break; printf(nTotals for each grade are:n); printf( A: dn, aCount ); printf( B: dn, bCount ); printf( C: dn, cCount ); printf( D: dn, dCount ); printf( F: dn, fCount ); return 0; ,程序运行结果,Enter the letter grades. Enter EOF to end. A B C C A D F C E Incorrect letter grade entered. Enter a new grade. D A B Totals for each letter grade are: A: 3 B: 2 C: 3 D: 2 F: 1,4.4 循环结构(3/13),while 语句典型应用1:计数控制循环 循环反复执行,直到计数器达到特定的值,是定数循环:即循环次数是已知的。 示例:计算10个学生的平均成绩,例子4:计算10个学生的平均成绩,#include int main() int counter, grade, total, average; total = 0; counter = 1; while ( counter = 10 ) printf( Enter grade: ); scanf( “%d, ,程序运行结果,Enter grade: 98 Enter grade: 76 Enter grade: 71 Enter grade: 87 Enter grade: 83 Enter grade: 90 Enter grade: 57 Enter grade: 79 Enter grade: 82 Enter grade: 94 Class average is 81,4.4 循环结构(4/13),while 语句典型应用2:条件控制循环 问题 能计算任意个数学生的平均成绩 学生人数未知,是不定数循环 程序如何结束? 使用条件控制 当用户输入信号量(标记值)时,循环结束 信号量不能和一般数据混淆:特殊数据,例子5:计算N个学生的平均成绩,#include int main() float average; int counter, grade, total; total = 0; counter = 0; printf(Enter grade, -1 to end: ); scanf( “%d, ,例子5:计算N个学生的平均成绩,/* termination phase */ if ( counter != 0 ) average = (float)total/counter; printf(Class average is %.2f, average); else printf(No grades were enteredn ); return 0; ,程序运行结果,Enter grade, -1 to end: 75 Enter grade, -1 to end: 94 Enter grade, -1 to end: 97 Enter grade, -1 to end: 88 Enter grade, -1 to end: 70 Enter grade, -1 to end: 64 Enter grade, -1 to end: 83 Enter grade, -1 to end: 89 Enter grade, -1 to end: -1 Class average is 82.50,4.4 循环结构(5/13),do-while 语句 do while ();,4.4 循环结构(6/13),do-while 语句示例1 int counter = 1; do printf( “%dn, counter ); while (+counter = 10); 打印整数 1 到 10,4.4 循环结构(7/13),do-while 语句示例2 int counter=1,sum=0; do sum=sum+counter; while (+counter= 100); counter=? sum=?,4.4 循环结构(8/13),计数控制的循环举例 int counter = 1; /初始化 while (counter = 10) /重复条件 printf( “%dn”, counter ); +counter; /递增 或 int counter = 0; /初始化 while (+counter = 10) printf( “%dn”, counter );,4.4 循环结构(9/13),for 语句 for (;) ,4.4 循环结构(10/13),for 语句例子1 int counter; for(counter=1;counter=10;counter+) printf( “%dn, counter );,4.4 循环结构(11/13),for 语句例子2 int counter; for(counter=1; counter=10; counter+) printf( “%dn, counter ); 打印整数1到10.,4.4 循环结构(12/13),for 语句例子3 int i,j; for (i=0, j=0; j+i = 10; j+, i+) printf( “%dn, j + i );,4.4 循环结构(13/13),for 语句和while语句的关系 若中不含continue语句,则 for (;) 等价于: ; while () ;,例子6:2到100的偶数求和,/* for 循环 求和 */ #include int main() int sum = 0, number; for (number = 2;number = 100; number+=2) sum += number; printf( Sum is %dn, sum ); return 0; ,4.5 控制转移语句(1/4),break 语句 break; 只能用于循环体或switch语句中,使程序控制退出while, for, do/while 或 switch 结构 程序执行这些语句的后继语句 break 语句的用途 提早退出循环 跳出 switch 结构,4.5 控制转移语句(2/4),continue 语句 continue ; 只能用于循环体中,跳过while, for 或 do/while 循环体中的剩余语句 程序开始执行下一次循环 while 和 do/while continue 语句执行后,马上测试循环条件 for 语句 continue 语句执行后, 计算递增表达式,然后测试循环条件,例子7:在for循环结构中使用break语句,#include int main() int x; for ( x = 1; x = 10; x+ ) if ( x = 5 ) break; printf( %d , x ); printf(nBroke out of loop at x = %dn, x); return 0; ,例子8:在for循环结构中使用continue语句,#include int main() int x; for ( x = 1; x = 10; x+ ) if ( x = 5 ) continue; printf( %d , x ); printf(nUsed continue to skip printing the value 5n); return 0; ,4.5 控制转移语句(3/4),goto 语句 goto ; 使程序控制转移到前面带有 :的语句继续执行 是一个非关键字标识符, :和goto ;必须出现在同一个函数体中, :不能重复出现,4.5 控制转移语句(4/4),return 语句 return ; 或 return; 在主函数体中执行return语句,使整个程序结束 在其它函数体中执行return语句,返回到调用函数的相应位置继续执行,学习目的检测,掌握利用复合机制编写较复杂类的方法 理解this指针的作用、原理,了解类和对象的实现机制 掌握使用this指针编写能连续调用的成员函数的方法 掌握const对象和const成员函数的定义和使用方法 掌握编写友元函数的方法 掌握友元类的用法,作业,4.6 4.7 4.8 4.11 4.12,第5章 函数,讲授内容,函数的定义和函数原型 函数调用和参数传递机制 函数重载 存储类别和作用域 递归函数设计和函数的递归调用 类的复合 预处理指令,5.1 模块化程序设计(1/3),复杂问题一般可以分解为若干稍简单的问题 每个问题的解决对应一个模块的求解 解决复杂问题的系统一般由逐级抽象的诸模块组成 每个模块是一个类或函数,5.1 模块化程序设计(2/3),函数是C+程序构成的基础 任何C+程序至少包含一个函数main()函数 函数也是类的方法的实现手段 函数的作用 实现系统中按功能分解的各小任务 实现类对象的方法 C+程序的设计最终都落实到一个个函数的设计上,5.1 模块化程序设计(3/3),函数是C+源程序的基本模块 C+中的函数包括两类: 预定义函数, C+提供了丰富的库函数,程序员可以在自己的程序中直接使用 用户自定义函数,用户根据需要编写的函数 一个C+程序可包含多个文件,一个文件可包含多个函数,5.2 预定义函数的使用(1/2),C+提供了丰富的库函数,这些库函数的声明都放在相应的头文件中 要使用这些库函数,必须先包括相应的头文件,然后直接使用 例如:数学运算函数的声明包含在math.h中,要使用这些函数,程序中必须加上代码 #include ,5.2 预定义函数的使用(2/2),函数调用的一般过程 先计算实参表达式的值 然后将计算的结果交给被调用函数 再执行被调用函数的代码,直至返回语句return或到函数尾 最后程序控制返回到函数的调用处,继续执行 printf(“%.2f”,sqrt(900.0);的执行过程 以900.0为参数调用sqrt函数,得到返回结果30.0 以%.2f和30.0为参数调用printf函数,实现格式化输出,5.3 函数定义与函数原型,函数 模块化 所有在函数体中说明的变量都是局部变量 仅在定义的函数中有效 参数 函数间传递信息 局部变量,5.3 函数定义与函数原型,函数的优点 分而治之 有利于程序开发 避免代码重复 软件重用 重用已有的函数来构造新的程序 抽象隐蔽内部的细节,例子1:函数举例,#include int maximum( int,int,int );/*function prototype*/ int main() int a, b, c; printf( Enter three integers: ); scanf( %d%d%d, ,例子2:函数举例,#include int maximum( int,int,int ); int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子3:函数举例,#include int maximum( int x, int y, int z ) int max = x; if ( y max ) max = y; if ( z max ) max = z; return max; int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子4:函数举例,#include void maximum(int,int,int); int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, /* is not necessary */ ,例子5:函数举例,#include void maximum( int x, int y, int z ) int max = x; if ( y max ) max = y; if ( z max ) max = z; printf( Maximum is: %dn, max ); return; /* is not necessary */ int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子6:函数举例,#include int maximum( int x, int y, int z ) int max = x; if ( y max ) max = y; if ( z max ) max = z; printf( Maximum is: %dn, max ); return 0; /* necessary */ int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子7:函数举例,#include void maximum(int /* is not necessary */ ,例子8:函数举例,#include void maximum(int /* is not necessary */ ,例子9:函数举例,#include void maximum(int ,int ,int ); int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, /* is not necessary */ ,例子10:函数举例,#include void swap(int x,int y) int temp; temp = x; x = y; y = temp; main() int x = 10, y = 20; swap(x, y); cout x: x y: y endl; return 0; ,例子11:函数举例,#include void swap(int ,例子12:函数举例,#include inline void maximum( int x, int y, int z ) int max = x; if ( y max ) max = y; if ( z max ) max = z; printf( Maximum is: %dn, max ); return; /* is not necessary */ int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子13:函数举例,#include void maximum( int x, int y=0, int z=0 ) int max = x; if ( y max ) max = y; if ( z max ) max = z; printf( Maximum is: %dn, max ); return; /* is not necessary */ int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子14:函数举例(错误),#include void maximum( int x, int y=0, int z=0 ) int max = x; if ( y max ) max = y; if ( z max ) max = z; printf( Maximum is: %dn, max ); return; /* is not necessary */ void maximum( int x, int y ) int main() int a, b, c, max; printf( Enter three integers: ); scanf( %d%d%d, ,例子15:函数举例,#include int square( char ); long square( int ); double square( double ); int main() char c = 127; int i = 1000; double d = 3.1415926; cout The square of char integer “ (int)c is square( c ) endl; cout The square of integer i is square( i ) endl; cout The square of double d is square( d ) endl; return 0; int square( char x ) return x * x; long square( int x ) return x * x; double square( double x ) return x * x; ,5.3 函数定义与函数原型,函数定义格式 返回值类型说明 函数名标识符(形式参数定义) 语句序列 /*0n个语句*/ 返回值类型说
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!