Microsoft PowerPoint - 3. 函数Functionl.ppt [兼容模式]

Similar documents
chap07.key

2013 C 1 # include <stdio.h> 2 int main ( void ) 3 { 4 int cases, a, b, i; 5 scanf ("%d", & cases ); 6 for (i = 0;i < cases ;i ++) 7 { 8 scanf ("%d %d

Microsoft PowerPoint - 6. 用户定义类型User-defined Datatypes.ppt [兼容模式]

Microsoft PowerPoint - 10 模板 Template.pptx

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

Microsoft PowerPoint - 4. 数组和字符串Arrays and Strings.ppt [兼容模式]

c_cpp

C/C++语言 - C/C++数据

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.06.doc

新版 明解C++入門編

Microsoft Word - 把时间当作朋友(2011第3版)3.0.b.07.doc

Microsoft PowerPoint - 5. 指针Pointers.ppt [兼容模式]

Strings

06-statement

NOWOER.OM m/n m/=n m/n m%=n m%n m%=n m%n m/=n 4. enum string x1, x2, x3=10, x4, x5, x; 函数外部问 x 等于什么? 随机值 5. unsigned char *p1; unsigned long *p

Microsoft PowerPoint - 8. 运算符重载 Operator Overloading.pptx

第三章 函数

Guava学习之Resources

<4D F736F F F696E74202D20B5DA3032BDB25FC0E0BACDB6D4CFF3312E BBCE6C8DDC4A3CABD5D>

主要内容 函数的定义 声明与调用 函数间的参数传递 函数嵌套与内联函数 形参带缺省值的函数与函数重载 数据的作用域 预编译处理与多文件结构 C++ 系统函数 2

C++ 程式設計

Strings

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Microsoft PowerPoint - CPP-Ch ppt [兼容模式]

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案

Microsoft PowerPoint - string_kruse [兼容模式]

第3章.doc

第七讲 继承与多态

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

C++ 程序设计 实验 2 - 参考答案 MASTER 2017 年 5 月 21 日 1

Microsoft Word cppFinalSolution.doc

untitled

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

untitled

提问袁小兵:

OOP with Java 通知 Project 4: 推迟至 4 月 25 日晚 9 点

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

Microsoft Word - ch04三校.doc

Microsoft Word - CPE考生使用手冊 docx

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

untitled

2016 年 地 质 工 程 系 教 学 工 作 安 排 2016 学 年 我 系 将 在 总 结 过 去 工 作 的 基 础 上, 结 合 今 年 学 院 以 抓 质 量 强 内 涵 促 改 革 调 结 构 建 品 牌 细 管 理 重 过 程 为 宗 旨, 以 规 范 管 理 深 化 内 涵 为

<4D F736F F D203136BCADBBD8D2E4D3EBD1D0BEBF2E646F63>

萧山中学课程建设方案.doc


Microsoft Word - 9pinggb_A4.doc

Microsoft Word - 9pinggb_A4-f4.doc

理 论 探 索 事 业 单 位 改 革 的 五 点 思 考 余 路 [ 摘 要 ] 事 业 单 位 改 革 是 中 国 改 革 的 重 要 环 节, 其 影 响 力 和 难 度 不 亚 于 国 有 企 业 改 革 本 文 着 重 围 绕 推 进 事 业 单 位 改 革 应 考 虑 的 五 个 方 面

日 本 位 于 亚 洲 东 部, 太 平 洋 西 北 角, 是 我 国 东 方 的 一 个 岛 国 在 洪 积 世 ( 注 1) 的 大 部 分 时 期 内, 日 本 与 大 陆 相 连 大 约 在 洪 积 世 晚 期 至 冲 积 世 ( 注 2) 初 期, 日 本 各 地 发 生 海 进, 出 现

2深化教育教学改革、创新人才培养模式


Microsoft Word - 9pinggb_let.doc

Microsoft Word - 9pingb5_let.doc

退休權益.ppt [相容模式]

Microsoft Word - 1.《國文》試題評析.doc

Ps22Pdf

$%%& ()*+, %&, %-&&%%,. $ %,, $,, & /$- 0(1 $%%& %& 234 %-%, 5&%6&633 & 3%%, 3-%, %643 -%%% :::; 7<9; %-%, 3$%$ :::;

# $# #!# # # # # # # %# # # &# # # # #! "

实 习 上 下 点 表 格 解 释 和 相 关 纪 律 要 求 : 1 表 格 中 所 有 名 词 都 为 简 称, 包 括 医 院 名 称 四 年 级 五 年 级 各 专 业 名 称 等 所 有 时 间 都 为 学 生 装 好 行 李 出 发 时 间, 请 提 前 0 分 钟 将 行 李 运 到

3 基 金 杠 杆 从 分 级 基 金 的 概 念, 我 们 知 道 了 分 级 基 金 的 A 份 额 是 每 年 获 得 固 定 收 益 的 稳 健 份 额,B 份 额 是 具 有 杠 杆 效 应 的 激 进 份 额 分 级 基 金 中 的 杠 杆 一 般 有 三 类 : 份 额 杠 杆 =(A

简报158期.doc

zt

OOP with Java 通知 Project 3 提交时间 3 月 29 日晚 9 点 Piazza Project 2 投票

C/C++ 语言 - 循环

<4D F736F F D C2E0BEC7A6D2A4ADB14DB0EAA4E52DB8D5C344A8F72E646F63>

FY.DOC

}; "P2VTKNvTAnYNwBrqXbgxRSFQs6FTEhNJ", " " string imagedata; if(0!= read_image("a.jpg",imagedata)) { return -1; } string rsp; ytopen_sdk m_sd

untitled

硕士论文正文

Chapter12 Derived Classes

untitled

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

untitled

슬라이드 1

校园之星

运算符重载 为什么要 运算符重载 那些运算符可以重载, 哪些不可以 如何实现运算符重载 实现方式 : 成员函数与非成员函数 类型转换 怎样实现对象与基本数据类型数据的运算 2

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

概述

提纲 1 联编与多态性 2 用虚函数实现多态 3 虚函数的工作原理 4 纯虚函数与抽象类 5 总结与思考 Dongke Sun (Southeast University) C++ Programming and Algorithms April 12, / 36

无类继承.key

運算子多載 Operator Overloading

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

C 1

Microsoft PowerPoint - L17_Inheritance_v4.pptx

Microsoft Word - 01.DOC

第 1 页共 9 页 文档履历 版本号日期制 / 修订人内容描述 V 正式版本

不 知 肉 味 的 用 法 相 同? (A) 長 煙 一 空, 皓 月 千 里 (B) 五 臟 六 腑 裡, 像 熨 斗 熨 過, 無 一 處 不 伏 貼 (C) 兩 片 頑 鐵, 到 他 手 裡, 便 有 了 五 音 十 二 律 似 的 (D) 吾 觀 三 代 以 下, 世 衰 道 微 12. 文

nooog

净, 保 持 面 部 整 洁 这 里 要 说 一 下 的 是, 很 多 男 生 注 意 了 胡 子, 却 忘 了 鼻 毛, 而 旁 人 或 者 同 学 往 往 也 不 好 意 思 提 醒 建 议 面 试 前 一 定 要 仔 细 照 一 照 镜 子, 好 好 检 查 一 下 有 些 人 讲 话 多 了

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

新・明解C言語入門編『索引』

网C试题(08上).doc

2013 C 1 #include <stdio.h> 2 int main(void) 3 { 4 int cases, i; 5 long long a, b; 6 scanf("%d", &cases); 7 for (i = 0; i < cases; i++) 8 { 9 scanf("%

软件工程文档编制

C++ 程序设计 OJ9 - 参考答案 MASTER 2019 年 6 月 7 日 1

A B C D E A B C F A C. D F. A. B. C. D. E. F.

第2章 递归与分治策略

Transcription:

函数 Function 如何重用代码 How to reuse code

3 4 = 3*3*3*3

3 4,6 5 : 拷贝 - 粘帖代码 (Copy-paste code)

3 4,6 5,12 10 : 拷贝 - 粘帖代码 (Copy-paste code) Bad!

使用函数 (with a function)

使用函数 (with a function)

使用函数 (with a function) good!

为什么定义自己的函数? 可读性 :sqrt(5) 比粘帖一段计算平方根的代码更清楚! 可维护性 : 改变一个算法, 只需要修改这个算法的函数 ( 相比修改每一处代码 ) 代码重用 : 其他人可以使用你实现的算法!

函数定义语法 函数名 intraisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; }

函数定义语法 返回类型 int raisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; }

函数定义语法 参数 1 intraisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; }

函数定义语法 参数 2 intraisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; }

函数定义语法 参数列表 intraisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; } 参数是有次序的 :

函数定义语法 函数签名 int raisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; }

函数定义语法 int raisetopower ( int base, int exponent) { int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; } return result; } 函数体

函数定义语法 intraisetopower ( int base, int exponent) { } } int result = 1; for( inti = 1; i< exponent ; i++){ result = result*base; return result; 返回语句 : 返回与返回类型相同的值

函数调用 函数定义 intraisetopower( int base, int exponent){ int result = 1; for( inti= 1; i< exponent ; i++){ result = result*base; } return result; } 函数调用 intmain() { intthreeexpfour = raisetopower(3, 4) ; cout << "3^4 is " << threeexpfour << endl; return 0; }

返回值 最多只能返回一个值, 其类型需与返回类型一致.

返回值 最多只能返回一个值, 其类型需与返回类型一致. 如果没有返回值, 则函数返回类型为 void 类型

返回值 最多只能返回一个值, 其类型需与返回类型一致. 如果没有返回值, 则函数返回类型为 void 类型 - 注意 : 不能声明 / 定义一个 void 类型的变量!

返回值 return 语句不一定在函数的最后. 只要执行一个 return 语句, 函数执行就结束了!

实参与形参类型要一致 函数定义的参数列表中变量称为形式参数 ( 简称形参 ); 而函数调用时传给函数的参数叫做实际参数 ( 实参 ) 实参的类型要和对应的形参类型一致 ( 或能转化为形参类型 ).

实参与形参类型要一致 函数定义的参数列表中变量称为形式参数 ( 简称形参 ); 而函数调用时传给函数的参数叫做实际参数 ( 实参 ) 实参的类型要和对应的形参类型一致 ( 或能转化为形参类型 ).

实参与形参类型要一致 函数定义的参数列表中变量称为形式参数 ( 简称形参 ); 而函数调用时传给函数的参数叫做实际参数 ( 实参 ) 实参的类型要和对应的形参类型一致 ( 或能转化为形参类型 ).

函数重载 许多函数可以有相同的名字, 但不同的参数 调用时, 根据参数匹配确定调用哪个函数

函数重载

函数重载

函数声明必须在函数被调用之前

函数声明必须在函数被调用之前 - 解决方法 1: 改变函数声明次序

函数声明必须在函数被调用之前 - 解决方法 1: 改变函数声明次序 - 解决方法 2: 使用一个函数原型 (function prototype), 通知编译器将有一个这种函数

函数原型 (prototype) 必须和函数签名 (signature) 匹配, 虽然参数名字可以变化

函数原型 (prototype) 必须和函数签名 (signature) 匹配, 虽然参数名字可以变化

函数原型通常放在一个单独的头文件中, 将函数原型和函数的实现隔离开来

函数可调用它们自身 递归 (Recursion)

函数可调用它们自身 递归 (Recursion)

函数可调用它们自身 递归 (Recursion)

全局变量 (Global Variables) foo() 函数被调用了多少次? 使用一个全局变量 - 可被任何函数访问 int numcalls = 0; 全局变量 void foo() { ++numcalls; } int main() { foo(); foo(); foo(); cout << numcalls << endl; // 3 return 0; }

作用域 (Scope) 变量在哪里声明, 决定了变量在哪里能被访问 numcalls 具有全局作用域, 能被任何函数访问

作用域 (Scope) 变量在哪里声明, 决定了变量在哪里能被访问 numcalls 具有全局作用域, 能被任何函数访问 result 具有函数作用域, 每个函数有自己单独的 result 变量

传值 (value) 还是传引用 (reference) Pass by value vsby reference 目前调用函数都是传值 - 形参是实参的拷贝. 函数内对形参变量的修改不会影响函数外的变量 ( 包括实参 ). 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference main 函数作用域 q=3 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference main 函数作用域 increment 函数作用域 q=3 a=3 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference main 函数作用域 increment 函数作用域 q=3 a=4 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference 如果想修改原来的变量而不是复制原来的变量, 可以传递引用 (reference) 如用 int&a 代替 inta 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference main 函数作用域 q=3 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference main 函数作用域 increment 函数作用域 q=3 a 输出结果

传值 (value) 还是传引用 (reference) Pass by value vsby reference main 函数作用域 increment 函数作用域 q=4 a 输出结果

实现 swap 函数 : 交换两个变量 main 函数作用域 q=3 r=5

实现 swap 函数 : 交换两个变量 main 函数作用域 q=3 r=5 swap 函数作用域 a b

实现 swap 函数 : 交换两个变量 // 执行完这一句 main 函数作用域 q=3 r=5 swap 函数作用域 t=3 a b

实现 swap 函数 : 交换两个变量 main 函数作用域 // 执行完这一句 q=5 r=5 swap 函数作用域 t=3 a b

实现 swap 函数 : 交换两个变量 main 函数作用域 // 执行完这一句 q=5 r=3 swap 函数作用域 t=3 a b

返回多个值 Returnn 语句只能返回一个值, 引用参数可用于输出结果

默认参数值 Default values in parameters 默认参数一律靠右 #include <iostream> using namespace std; int divide (int a, int b=2){ int r = a/b; return (r); } int main (){ cout << divide (12) << '\n'; cout << divide (20,4) << '\n'; return 0; }

#include <iostream> using namespace std; 内联函数 Inline Functions 指示编译器内联展开, 可避免函数调用开销 ; 对于包含循环的或复杂代码, 编译器仍作为普通函数 inline string concatenate (const string& a, const string& b){ return a+b; } int main (){ string s= Li, w = Wang ; string full = concatenate(s,w); return 0; }

函数的 Declaring 声明与定义 defining 函数使用前须声明 Declaring functions void swap(int &a, int &b); // 使用前先声明 int main(){ int x = 3, y = 4; swap(x,y); std::cout<<x<< <<y<< \n ; return 0; } void swap(int &a, int &b) { int t = a; a = b; b = t; }

库 (Librarys) 库的发布包含 :1) 头文件, 其中有函数原型的说明 ;2) 二进制的.dll 或.so 文件包含了 ( 编译过的 ) 函数实现 - 好处 : 你不需要共享你的.cpp 源代码文件!

库 (Librarys) 库的发布包含 :1) 头文件, 其中有函数原型的说明 ;2) 二进制的.dll 或.so 文件包含了 ( 编译过的 ) 函数实现 - 好处 : 你不需要共享你的.cpp 源代码文件!

库 (Librarys)-cmath 我们根本不需要自己实现之前的 raisetopower 和 squareroot 函数, 因为作为标准库的一部分 cmath 库已经实现了 pow 和 sqrt 函数 我们只需要调用它们!

作业 1. 不运行程序, 说出程序输出结果

2. 指出下列程序中的错误 1)

2)

3)

4)

5)

6)

3. 编写一个函数计算一个已知半径的圆的面积 函数参数采用引用参数和返回值两种方式返回结果 格式如下 : void circlearea( double r, double& A); double circlearea(double r); } intmain(){ double r = 23.5, A; //. std::cout<< the area of the circle is : <<A << \n ; return 0;