计算机上海大学c第三章

上传人:san****019 文档编号:71414167 上传时间:2019-01-20 格式:PPT 页数:30 大小:2.12MB
返回 下载 相关 举报
计算机上海大学c第三章_第1页
第1页 / 共30页
计算机上海大学c第三章_第2页
第2页 / 共30页
计算机上海大学c第三章_第3页
第3页 / 共30页
计算机上海大学c第三章_第4页
第4页 / 共30页
计算机上海大学c第三章_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《计算机上海大学c第三章》由会员分享,可在线阅读,更多相关《计算机上海大学c第三章(30页珍藏版)》请在金锄头文库上搜索。

1、C+程序设计实用教程,清华大学出版社 2008,第3章 数据的表示 及I/O操作,第2讲,第3章 数据的表示及I/O操作,数据的表示 函数 运算表达式 语句 I/O流格式控制 应用举例 *趣味程序行走的字符串 小结,3.2 函数,3.2.1 函数的形式参数 传值型参数(传递右值) 引用型参数(传递变量,传递左值) 3.2.2 函数的返回类型 无返回类型(void) 数值返回(临时变量) 引用返回(变量返回),概述,函数是程序按功能划分的基本单位,俗称子程序 函数有三个方面的内容: 函数原型 编译器检查程序中调用函数语句语法正确性的依据 程序员编写调用函数语句的依据 函数定义 函数功能的具体实现

2、 是连接器链接目标代码、函数库的依据 函数调用 实际使用函数,必要时需提供待加工的实际数据(被称为实际参数),函数原型,语法格式 返回类型 函数名(形式参数表); 例如: int rand(); / 产生随机数 double sqrt(double x); / 算术平方根 double pow(double x, double y); / x的y次幂 或只指出形参的数据类型 int rand(void); / 无形式参数 double sqrt(double); / 一个形参(一元函数) double pow(double, double);/ 两个形参(二元函数),函数定义,系统所提供的函数

3、(标准函数) 已经定义且被编译成函数库文件 函数原型在相应的头文件中 只要包含相应的头文件,便可使用这些函数 但这些函数的具体定义成为黑箱 例如: double x=2.0, y; y = sqrt(x); sqrt函数到底是如何将2.0加工成1.414的,不必关心。 用户自定义函数 函数实现 根据算法实现具体的功能; 是求解问题算法的程序语言表达。,函数调用,将实际参数交给函数进行加工,返回一定的结果 函数的形式参数决定了对实际参数的使用方式 无参数 仅某个表达式的值(包括某变量的值)传递给函数 将变量本身传递给函数 函数的返回类型 无返回 (void) 仅返回一个数值 (存放在临时变量中)

4、 返回一个变量 (已经存在的变量),3.2.1 函数的形式参数,无形式参数 调用函数时无须提供实际参数,但是表示函数调用的圆括号不能缺少。 例如:n = rand(); / 产生一个随机数 传值型(形式参数为定义变量) 函数调用时,将创建形参变量,意味着 为形式参数变量分配自己的内存空间; 用实际参数(表达式)的值初始化形参变量; 新创建的形参变量存放在栈空间中,函数返回时销毁 (与自动变量类似); 函数体内对形参的操作与实参无关。,3.2.1 函数的形式参数,引用型(形式参数为声明引用) 函数调用时,不创建变量,形参为实参的别名,意味着: 形参不另外占用内存空间; 用实参初始化形参的引用声明

5、; 引用型形参“绑定”实参,直至函数返回; 函数体内对形参的操作,就是对实参的操作 (与实参相关)。,3.2.1 函数的形式参数,综上所述 函数在调用时,其形式参数变量的定义及初始化,遵循变量定义及初始化的规定; 函数在调用时,其形式参数引用的声明及初始化,遵循引用声明及初始化的规定; 形式参数的生命期从函数调用时起,至函数返回时止。 函数原型中形式参数名称可以缺省,不能缺省的 数据类型 传值型 数据类型 & 引用型,3.2 函数,3.2.1 函数的形式参数 传值型参数(传递右值) 引用型参数(传递变量,传递左值) 3.2.2 函数的返回类型 无返回类型(void) 数值返回(临时变量) 引用

6、返回(变量返回),3.2.2 函数的返回类型,函数的返回类型 无返回类型(void) 数值返回 数据类型 函数名(参数表); 函数结果存放在一个临时变量中,该临时变量用函数调用表达式本身表示; 该临时变量的在参与一次运算后被销毁。 引用返回 数据类型 返回一个已经存在的变量,该变量用函数调用表达式本身表示。,例3.2 求解一元二次方程,问题描述 由于一元二次方程ax2+bx+c=0由其系数唯一确定,可将方程抽象为3个系数a,b,c(数据类型为double); 在实数域中,一元二次方程可能: 无实数根 (类型0) 有两个相同的根 (类型1) 有两个不同的根 (类型2) 需两个变量x1,x2(do

7、uble型)存放方程可能的根; 还需要一个变量flag(数据类型int)表示方程的类型,以便确定x1与x2是否有意义(x1与x2总是联系某内存单元,总数有其数值的)。 要求设计一个函数(黑箱)根据a,b,c(假定a0)确定x1,x2及flag的值。,函数原型设计,函数原型设计方案一 返回类型void。6个参数 a,b,c传值型;x1,x2,flag引用型 void Solver(double a, double b, double c, double 返回方程的类型,符号 & 的书写位置自由,函数定义(以方案二为例),#include using namespace std; int Solv

8、er(double a, double b, double c, double / 判别式等于0,返回1 ,#include / 测试函数的功能 using namespace std; int Solver(double a, double b, double c, double ,关于参数单向/双向传递,函数的黑箱特性 接收输入 实现功能 返回结果 形式参数 传值型接收实参(输入:单向传递给函数) 引用型接收实参并“返回”结果(输入/输出:双向) 返回类型 返回结果返回一个数据(输出:单向) int Solver(double, double, double, double ,返回结果,单

9、向传递,双向传递 “返回”结果,返回与“返回”,利用函数的返回类型只能返回一种数据类型的结果; 利用引用型形式参数能“返回”多个多种数据类型的计算结果; 注意: 对应于引用型形式参数的实际参数必须是可以被引用的量 如:flag = Solver(1, 2, -3, 4, 5);是错误的(不能将常量4、5作为变量)。,例3.3 交换两个实参的值,#include using namespace std; void swap(int ,希望输出 x = 3, y = 5 x = 5, y = 3 如何设计swap函数?,分析: 函数返回类型void, 要求“返回”2个数值,int &a, int

10、&b,int temp; temp = a; a = b; b = temp;,#include using namespace std; void swap1(int a, int b) int temp; temp = a; a = b; b = temp; int main() int x=3, y=5; cout ”x = ” x ”, y = ” y endl; swap1(x, y); cout ”x = ” x ”, y = ” y endl; return 0; ,输出结果 x = 3, y = 5 x = 3, y = 5 Swap1是个无用的函数,函数返回类型举例,无类型(

11、void)返回 void greeting() cout ”Hello.” endl; return; / 此语句可省略 数值返回(例3.4) 函数调用表达式表示一个临时变量,不能作左值; 引用返回(例3.5) 函数调用表达式表示所返回的变量,可作左值。,例3.4 加法运算函数,#include using namespace std; int Add(int a, int b) a += b; return a; int main() int a=3, b; b = Add(a, 2); cout a ”, ” b endl; return 0; ,希望输出 3, 5 注意:不能改变两个加数

12、的值, 且得到一个新结果(第3个量)。 系统提供的临时变量; 这个变量是无名的,用函数 调用表达式表示。,a += b; return a;,例3.5 迭加计算函数,#include using namespace std; int ,两个函数的比较,int Add(int a, int b) a += b; / 仅修改了形参变量,与实参无关 return a; / 返回a的值,存放到一临时变量中 / a及b的生命期即将结束 int / 引用返回a所绑定的实参变量 ,3.3 运算表达式,3.3.1 C+运算符汇总 (表3-3) 优先级、结合方向 3.3.2 单目运算 (只有一个操作数) 3.3

13、.3 二进制位运算 (,&,|) 3.3.4 迭代赋值运算 (位运算迭代赋值) 3.3.5 抽取及插入运算 (及) 3.3.6 三目条件运算 (? :) 3.3.7 逗号运算 (,) 3.3.8 区分作用域 (:),3.3.6 三目条件运算,C+中唯一的三目运算符,需要3个操作数。格式 表达式1 ? 表达式2 : 表达式3 若表达式1为真(非零),则整个三目条件运算表达式的值为表达式2的值;否则为表达式3的值。,double abs(double x) if(x=0) return x; else return x; 或 double abs(double x) return x=0 ? x

14、: -x; ,3.3.7 逗号运算,一系列用逗号连接起来的表达式。格式 表达式1,表达式2,表达式n 依次计算各表达式的值 整个逗号表达式的值为表达式n的值 区分作用域 :全局变量名 std:cout ”OK” std:endl; cin, cout, endl等属于std名字空间。 编写语句 using namespace std; 之后可以省略 std:,3.4 语句,语句是对程序某动作的完整表达 表达式语句(赋值语句、输入语句、输出语句、函数调用语句)。格式: 表达式; (表达式后加分号) 流程控制语句(条件分支语句、开关语句、循环语句、跳转语句、返回语句) 复合语句 用一对花括号 包围

15、起来的若干条(0条、一条或多条)语句; 在语法上作为一个单语句使用; 空语句 ; (一个分号),int sum(int n) int i, s = 0; for(i=1; i=n; ) s += i; i+; return s; ,int sum(int n) int i, s = 0; for(i=1; i=n; s+=i+) ; return s; ,int sum(int n) int i, s = 0; for(i=1; i=n; i+) s += i; return s; ,累加计算函数(1+2+3+n),循环体语句分别是 单语句 复合语句 空语句 3种方法等效,Thank You !,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号