清华大学C课件9.ppt
《清华大学C课件9.ppt》由会员分享,可在线阅读,更多相关《清华大学C课件9.ppt(69页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章函数、递推与递归第六章函数、递推与递归清华大学清华大学函数的概念、定义、调用和返回函数的概念、定义、调用和返回带自定义函数的程序设计带自定义函数的程序设计递推算法递推算法递归思想及算法实现递归思想及算法实现内内 容容 要要 点点 为什么需要函数?为什么需要函数?满足实际应用需求满足实际应用需求6.1 函数函数 函数是组成函数是组成 C/C+程序的基础程序的基础 C/C+库中已经为用户提供了许多标准库函数库中已经为用户提供了许多标准库函数 用户可以根据自己的需要选用合适的库函数用户可以根据自己的需要选用合适的库函数 如果没有所需函数,用户可自己定义和编写一些函数如果没有所需函数,用户可自己
2、定义和编写一些函数函数概述函数概述函数是模块化的基本单位函数是模块化的基本单位主调函数与被调函数主调函数与被调函数程序、源文件与函数关系程序、源文件与函数关系程序中各模块关系程序中各模块关系main()fun1()fun2()fun3()fun4()fun5()programint int mainmain()()int int a a,b b,sumsum;sumsum=AddAdd(a a,b b););/函数调用函数调用函数调用函数调用 int int AddAdd(int(int x x,int,int y y);/函数声明函数声明函数声明函数声明int int AddAdd(int(
3、int x x,int,int y y)/函数定义函数定义函数定义函数定义 /函数体取代函数声明尾部的函数体取代函数声明尾部的分号分号 要使用要使用C+函数,必须函数,必须完成如下工作:完成如下工作:提供函数定义提供函数定义 提供函数声明(原型)提供函数声明(原型)调用函数调用函数函数定义:函数定义:有返回值的函数有返回值的函数 没有返回值的函数(没有返回值的函数(void函数)函数)void functionName(parameterList)/没有返回值没有返回值 return;/可选可选typeName functionName(parameterList)/有返回值有返回值 retu
4、rn value;【任务任务6.1】素数判定素数判定思路:思路:设计一个函数设计一个函数 int checkprime(int a),负责检查负责检查 a 是否为素数:是否为素数:n 如果是素数,该函数返回如果是素数,该函数返回 1;n 否则,该函数返回否则,该函数返回 0。#include#include using namespace std;int main()int a=0;cout a;if(checkprime(a)/函数函数调用调用cout a 是素数是素数 endl;elsecout a 不是素数不是素数 endl;return 0;int checkprime(int n);
5、/函数声明函数声明int checkprime(int n)/函数函数定义,定义,n为形式参数为形式参数 int k=0;for(k=2;k=sqrt(n);k=k+1)if(n%k=0)/如果如果 n 能被能被k整除则返回整除则返回0 return 0;return 1;/n 不能被不能被k整除则返回整除则返回1有何问题?有何问题?函数原型函数原型 int checkprime(int n);n n提高算法效率提高算法效率n n只要在只要在只要在只要在 1 1 和和和和 n n 之间存在一个因子就可终止,并返回之间存在一个因子就可终止,并返回之间存在一个因子就可终止,并返回之间存在一个因子就
6、可终止,并返回 n n 不不不不是素数是素数是素数是素数n n若若若若 n n 可被可被可被可被 2 2 整除,不需检验其它数,程序终止并返回整除,不需检验其它数,程序终止并返回整除,不需检验其它数,程序终止并返回整除,不需检验其它数,程序终止并返回 n n 不是素数;若否,则所有偶数都不是因子,程序只需检不是素数;若否,则所有偶数都不是因子,程序只需检不是素数;若否,则所有偶数都不是因子,程序只需检不是素数;若否,则所有偶数都不是因子,程序只需检验奇数验奇数验奇数验奇数n n程序不必检验因子一直到程序不必检验因子一直到程序不必检验因子一直到程序不必检验因子一直到 n n,只需到,只需到,只需
7、到,只需到sqrtsqrt(n n)即可即可即可即可int int checkprime(int(int n n)int int i i;if(if(n n%2%2 =0)=0)return 0;return 0;for(for(i i=3;=3;i i=sqrtsqrt(n n););i i+=2)+=2)if(if(n n%i i=0)=0)return 0;return 0;return 1;return 1;问题问题问题问题1 1:本算法效率?:本算法效率?:本算法效率?:本算法效率?每次迭代都需要计算平方根,很费时每次迭代都需要计算平方根,很费时每次迭代都需要计算平方根,很费时每次迭
8、代都需要计算平方根,很费时问题问题问题问题2 2:本算法正确性?:本算法正确性?:本算法正确性?:本算法正确性?n n=1 =1 n n=2=2 时结果错误时结果错误时结果错误时结果错误int int checkprime(int(int n n)int int limitlimit,i i;limitlimit=sqrtsqrt(n n););if(if(n n%2%2 =0)=0)return 0;return 0;for(for(i i=3;=3;i i=limitlimit;i i+=2)+=2)if(if(n n%i i=0)=0)return 0;return 0;return 1
9、;return 1;问题:本算法正确性?问题:本算法正确性?问题:本算法正确性?问题:本算法正确性?浮点数的存储有误差,程序的正确性浮点数的存储有误差,程序的正确性浮点数的存储有误差,程序的正确性浮点数的存储有误差,程序的正确性依赖于机器的表示精度依赖于机器的表示精度依赖于机器的表示精度依赖于机器的表示精度int int checkprime(int(int n n)int int limitlimit,i i;limitlimit=sqrtsqrt(n n)+1;)+1;if(if(n n%2%2 =0)=0)return 0;return 0;for(for(i i=3;=3;i i=li
10、mitlimit;i i+=2)+=2)if(if(n n%i i=0)=0)return 0;return 0;return 1;return 1;if(if(n=n y)t=1;else t=-1;return t;函数定义示例:Compare函数;多条多条 return 语句语句int Compare(int x,int y)if(x=y)return 0;else if(x y)return 1;else return-1;编写函数编写函数 Swap,互换两个整型数据,互换两个整型数据 x、y 的值的值void Swap(int x,int y)int t;t=x;x=y;y=t;re
11、turn;/没有返回值只需直接写没有返回值只需直接写return语句语句函数定义示例:Swap 函数int IsDigit(char c)if(c=0&c=48&c=a&c=z)/az的的ASCII值为值为61H7AH /AZ的的ASCII值为值为41H5AH return c a+A;else return c;函数定义示例:TransformIntoUpperCase 函数编写函数编写函数 IsLeapYear,判断某个给定年份是否,判断某个给定年份是否为闰年为闰年int IsLeapYear(int year)return year%4=0&year%100!=0|year%400=0;
12、函数定义示例:IsLeapYear 函数int mysqrt(int x)int i=1,sum=0,count=0;while(sum=x)sum+=i;count+;i+=2;return count-1;求整数的平方根,取其整数部分求整数的平方根,取其整数部分求整数的平方根,取其整数部分求整数的平方根,取其整数部分思考:思考:参数的有效性、合法性判断参数的有效性、合法性判断应应 放在函数里放在函数里?放在主程序里放在主程序里?int mysqrt(int x)int i=0;while(i*i=x)i+;return i-1;函数定义示例:我的平方根函数我的平方根函数int main()
13、int times;char ch;coutch;while(ch!=q)couttimes;n_chars(ch,times);coutThe value of times is timesendl;coutch;cout0)coutc;coutn;double cube(double x);int main()double p,q;p=1.2;q=cube(p);coutp=pendl;cout实参实参p的地址是的地址是&pendl;coutq=qendl;return 0;double cube(double x)coutx=xendl;cout形参形参x的地址是的地址是&xx;x;ci
14、ny;ciny;coutcoutx“yendl;(1)x“yendl;(1)SwapSwap(x x,y y););cout coutx“yendl;(4)x“yendl;(4)return 0;return 0;例:互换两个整数例:互换两个整数void void SwapSwap(int(int x x,int,int y y)int int temptemp;cout coutx“yendl;(2)x“yendl;(2)temptemp=x x;x x=y y;y y=temptemp;cout coutx“yendl;(3)x“ya;a;cinb;cinb;coutcouta a“b b
15、endl;endl;SwapSwap();();cout couta a“b bendl;endl;return 0;return 0;void void SwapSwap()()int int temptemp;cout couta a“b bendl;endl;temptemp=a a;a a=b b;b b=temptemp;cout couta a“b bendl;endl;return;return;输出:输出:10 20 10 20 20 1020 10【任务6.2】给歌手打分 定义int Max(int a,int b)函数,返回a,b中的大者 定义int Min(int a,i
16、nt b)函数,返回a,b中的小者 定义整型变量p,用以保存 N个数中的最大值 定义整型变量q,用以保存 N个数中的最小值 定义一个整型变量 sum 做累加用 最终得分:(sum-p-q)/(N-2)#include#includeusing namespace std;int Max(int,int);int Min(int,int);int main()int p=0;int q=100;int sum=0,x=0;int i=1;for(i=1;i=10;i=i+1)cout“请第请第”i “位裁判给分位裁判给分”x;p=Max(x,p);q=Min(x,q);sum=sum+x;cou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 清华大学C 课件9 清华大学 课件
限制150内