资源预览内容
第1页 / 共136页
第2页 / 共136页
第3页 / 共136页
第4页 / 共136页
第5页 / 共136页
第6页 / 共136页
第7页 / 共136页
第8页 / 共136页
第9页 / 共136页
第10页 / 共136页
亲,该文档总共136页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
程序设计 cs.sjtu 2011.9程序设计 - 1第第6 6章章 过程封装函数过程封装函数v函数v自己编写函数v函数的使用v数组作为参数v带默认值的函数v内联函数v重载函数v函数模版v变量的作用域v变量的存储类别v递归函数v基于递归的算法程序设计 cs.sjtu 2011.9程序设计 - 2函数的用途函数的用途v函数是程序设计语言中最重要的部分,是模 块化设计的主要工具。每一个C+程序都要用到函数。v即使你自己不定义新的函数, 在每一个完整的C+程序中都必须有一个main() 函数。v在C+语言中,字符处理、字符串处理和数学计算都是用函数的方式提供的。程序设计 cs.sjtu 2011.9程序设计 - 3第第6 6章章 过程封装函数过程封装函数v函数v自己编写函数v函数的使用v数组作为参数v带默认值的函数v内联函数v重载函数v函数模版v变量的作用域v变量的存储类别v递归函数v基于递归的算法程序设计 cs.sjtu 2011.9程序设计 - 4如何写一个函数如何写一个函数v函数定义v函数的返回值:返回值类型应与定义中的类型标识符 一致。C+的函数只能有一个返回值。v表示一个函数没有返回值,类型标识符用void。没有 返回值的函数也称为过程 类型标识符 函数名(形式参数表) 变量定义部分语句部分 return 返回值; 或 return(返回值); eg. int max(int a, int b)if (ab) return(a) else return(b); 函数体程序设计 cs.sjtu 2011.9程序设计 - 5函数的命名函数的命名v函数名是一个标识符,符合标识符命名 规范v函数名要有意义v函数名一般是一个动词短语,表示函数 的行为程序设计 cs.sjtu 2011.9程序设计 - 6函数举例无参数、无返回值的函数 v打印一个由五行组成的三角形*void printstar() cout num;if (num = 1 main()int x, y;cin x y;cout b) return(a); else return(b); 函数原型说明函数调用函数实现程序设计 cs.sjtu 2011.9程序设计 - 15函数调用函数调用#include int max(int a, int b) if (a b) return(a); else return(b); main()int x, y;cin x y;cout x y;cout n2? n1: n2); mainx(2)y(3)mainx(2)y(3)maxa(2)b(3)n1n2mainx(2)y(3)maxa(2)b(3 )n1n2pn(2)simainx(2)y(3)maxa(2)b(3 )n1(2)n2pn(3)simainx(2)y(3)maxa(2)b(3)n1(2 )n2(6)mainx(2)y(3)程序设计 cs.sjtu 2011.9程序设计 - 20第第6 6章章 过程封装函数过程封装函数v函数v自己编写函数v函数的使用v数组作为参数v带默认值的函数v内联函数v重载函数v函数模板v变量的作用域v变量的存储类别v递归函数v基于递归的算法程序设计 cs.sjtu 2011.9程序设计 - 21数组作为函数的参数数组作为函数的参数v设计一函数,统计10位同学的平均成绩v设计考虑:如何传递参数参数是10位同学的考试成绩,可以用10个整型数 来表示。所以有10个整型的形式参数一组同类数据可以用一个数组来描述,所以参数 也可以是一个10个元素的整型数组第二种方法更加简练返回值是平均成绩程序设计 cs.sjtu 2011.9程序设计 - 22统计函数的实现统计函数的实现int average(int array10) int i, sum = 0;for (i = 0; i scorei;cout inline float cube(float s) return s*s*s; int main() float side; cin side; cout 返回类型 FunctionName(形式参数表) /函数定义体v模板形式参数表可以包含基本数据类型,也可以包 含类类型(需加前缀class)templateT max(T a, T b) return ab ? a : b;程序设计 cs.sjtu 2011.9程序设计 - 43函数模板的使用函数模板的使用vmaxNum = max(3, 7);vmaxChar = max(z, a);vmaxDouble = max(3.5, 4.6);v函数模板的实例化:根据实际参数确定模板参数的值将模板参数的值代入函数模板,形成一个真正 的函数程序设计 cs.sjtu 2011.9程序设计 - 44第第6 6章章 过程封装函数过程封装函数v函数v自己编写函数v函数的使用v数组作为参数v带默认值的函数v内联函数v重载函数v函数模版v变量的作用域v变量的存储类别v递归函数v基于递归的算法程序设计 cs.sjtu 2011.9程序设计 - 45标识符的作用域标识符的作用域v一个标识符能被存取的程序部分,称为标识符的作用域v标识符的作用域与程序块有关。所谓的程序块是带有声明的复合语句v如右框中有两块Int main(void) int a = 2, b = 3;cout using namespace std;void f(); extern int x; /外部变量的声明int main() f();cout using namespace std;int x; /全局变量的定义void f() cout size;fill(1,0,size);for (row = 0; row “ “ awn;if (awn=Q | awn=q) exit(0);else queen_a11(k+1);/递归至第k十1列ai = bk+i-1 = c8+k-i = true; /恢复对应位置无皇后 程序设计 cs.sjtu 2011.9程序设计 - 107主程序主程序int col9; bool a9, b17,c17;int main() int j;for(j = 0; j 0 ? aleft : 0;maxLeft = maxSum(a, left, center);maxRight = maxSum(a, center + 1, right); 程序设计 cs.sjtu 2011.9程序设计 - 115for (int i = center; i = left; -i) leftSum += ai;if (leftSum maxLeftTmp)maxLeftTmp = leftSum;for (int i = center + 1; i maxRightTmp)maxRightTmp = rightSum;return max3(maxLeft, maxRight, maxLeftTmp + maxRightTmp); 程序设计 cs.sjtu 2011.9程序设计 - 116快速排序快速排序v思路:将待排序的数据放入数组a中,数据为alow, , ahigh从待排序的数据中任意选择一个,如alow, 将它放入变量k将待排序的数据分成两组,一组比k小,放入 数组的前一半;一组比k大,放入数组的后一 半;将k放入中间位置。对前一半和后一半分别重复上述方法。v最好时间效率:O(nlogn)程序设计 cs.sjtu 2011.9程序设计 - 11757304219681230457689lowhigh1230457689013245768901234576890123456789程序设计 cs.sjtu 2011.9程序设计 - 118快速排序要解决的问题快速排序要解决的问题v如何选择作为分段基准的元素?采用第一个元素选取第一个、中间一个和最后一个中的中 间元素v如何分段?考虑空间问题程序设计 cs.sjtu 2011.9程序设计 - 119快速排序函数快速排序函数Void quicksort(int a, int low, int high) int mid;if (low = high) return;mid = divide(a, low, high);quicksort( a, low, mid1);quicksort( a, mid+1, high); 程序设计 cs.sjtu 2011.9程序设计 - 120划分过程划分过程从右向左开始检查。如果high的值大于k,high减1, 继续往前检查,直到遇到一个小于k的值。v将大于k的这个值放入low的位置。然后从low位置开 始从左向右检查,直到遇到一个大于k的值。v将low位置的值放入high位置,重复第一步,直到low 和high重叠。将k放入此位置。5730421968lowhighK=5程序设计 cs.sjtu 2011.9程序设计 - 121730421968lowhighK=5730421968lowhigh173042968lowhigh130427968lowhigh123047968lowhigh程序设计 cs.sjtu 2011.9程序设计 - 122DivideDivide函数函数Int divide( int a, int low, int high) int k = alow;do while (low=k) high;if (low cents) continue; /coinj硬币不可用if (coinUsed cents - coinsj + 1 minCoins) /分解成coinsi和cents-coinsjminCoins = coinUsed cents - coinsj + 1;/用此硬币coinUsedcents = minCoins; 程序设计 cs.sjtu 2011.9程序设计 - 136总结总结 v函数可以将一段完成独立功能的程序封装起来。通过函数名就可执行这一段功能。使用函数可以将程序模块化 vC+的程序是由一组函数组成。每个程序必须有一个名为main的函数,它对应于一般的程序设计语言中主程序 v函数也可以调用自己,这样的函数称为递归函数 v基于递归的算法
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号