- 1、本文档共78页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[所有分类]计算机二级C语言第06章课件
{ float y; y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); return(y); } float root(float x1,float x2) /*定义root函数,求近似根 */ { int i; float x,y,y1; y1=f(x1); do { x=xpoint(x1,x2); y=f(x); if(y*y1>0) /*f(x)与f(x1)同符号 */ { y1=y; x1=x;} else x2=x; }while(fabs(y)>=0.0001); return(x); } main() /*主函数*/ {float x1,x2,f1,f2,x; do { printf("input x1,x2:\n"); scanf(“%f,%f”,&x1,&x2); f1=f(x1); f2=f(x2); }while(f1*f2>=0); x=root(x1,x2); printf(“A root of equation is%8.4f”,x); } 运行情况如下: input x1,x2: 2,6 A root of equation is 5.0000 从程序可以看到: (1) 在定义函数时,函数名为f、xpoint、root的3个函数是互相独立的,并不互相从属。这3个函数均定为实型。 (2) 3个函数的定义均出现在main函数之前,因此在main函数中不必对这3个函数作类型说明。 (3) 程序从main函数开始执行。先执行一个do-while循环,作用是:输入x1和x2,判别f(x1)和f(x2)是否异号,如果不是异号则重新输入x1和x2,直到满足f(x1)与f(x2)异号为止。然后用函数调用root(x1,x2)求根x。调用root函数过程中,要调用xpoint函数来求f(x1)与fx2)连线的 交点x。在调用xpoint函数过程中要用到函数f来求x1和x2的相应的函数值f(x1)和f(x2)。这就是函数的嵌套调用。见图6.8。 图6.8 (4) 在root函数中要用到求绝对值的函数fabs,它是对实型数求绝对值的标准函数。它属于数学函数库,故在文件开头用#include math.h即把使用数学库函数时所需用到的有关信息包含进来。 6.6 函数的递归调用 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。例如: int f(int x) { int y,z; z=f(y); return(2*z); } 在调用函数f的过程中,又要调用f函数,这是直接调用本函数,见图6.9。下面是间接调用本函数。 图 6.9 图6.10 在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数,见图6.10。 从图上可以看到,这两种递归调用都是无终止的自身调用。显然,程序中不应出现这种无终止的递归调用,而只应出现有限次数的、有终止的递归调用,这可以用if语句来控制,只有在某一条件成立时才继续执行递归调用,否则就不再继续。 关于递归的概念,有些初学者感到不好理解,下面用一个通俗的例子来说明。 例6.7 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2个人大2岁。问第2个人,说比第1个人大2岁。最后问第1个人,他说是10岁。请问第5个人多大?显然,这是一个递归问题。要求第5个人的年龄,就必须先知道第4个人的年龄,而第4个人的年龄也不知道,要求第4个人的年龄必须先知道第3个人的年龄,而第3个人的年龄又取决于第2个人的年龄,第2个人的年龄取决于第1个人的年龄。而且每一个人的年龄都比其前1个人的年龄大2。 即 age(5)=age(4)+2 age(4)=age(3)+2 age(3)=age(2)+2 age(2)=age(1)+2 age(1)=10 可以用式子表述如下: age(n)=10 (n=1) age(n-1)+2 (n>1) 可以看到,当n>1时,求第n个人的年龄的公式
文档评论(0)