第6章函数分析.ppt

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章函数分析

求最大公约数的主函数 void main() { int m,n,t; int gcd(int m, int n); scanf(“%d %d”,m,n); if (mn) {t=a; a=b; b=t; } t= gcd( m, n); /*调用函数gcd( m, n); */ print(“\n gcd=%d”,t); } 例 汉诺(Hanoi)塔问题: 古代有一个梵塔,塔内有A、B、C三个座,座A上有64个大小不等的盘子,大的在下,小的在上,如图所示。有一个和尚想把这64个盘子从座A全部移到座C,在移动过程中可以借助座A、座B或座C,但每次只允许移动一个盘子,并且不允许大盘放在小盘的上面。要求打印出移动的步骤。 编程思路: 这是一个使用递归方法解决问题的典型例子,编程时首先要找出递归的两个关键点,即: 递归终止条件:只有一个盘子时,可以直接移动。 递归表达式:要找递归表达式,可按如下设想进行: 将n个盘子从座A移到座C可以描述为: (1)将n-1个盘子从座A借助座C移到座B; (2)将剩下的一个盘子从座A移到座C; (3)将n-1个盘子从座B借助座A移到座C。 上述(1)、(3)两步操作都是将n-1个盘子从一个座上移到另一个座上,只是座的名字不同,因此,可以将它们的操作编写成一个函数,函数需要四个参数,一个是盘子的个数,另外三个分别为:起点座、借助座、终点座。 void main() { void hanoi(int n,char a,char b,char c); //声明递归函数 int m; printf(请输入盘子的个数:); scanf(%d,m); printf(%d个盘子移动的步骤如下:\n,m); hanoi(m,A,B,C); //调用hanoi函数 } //定义递归函数,将n个盘子从a座借助b座,移到c座 void hanoi(int n,char a,char b,char c) { if(n==1) //1个盘子,直接移动 printf(from %c to %c\n,a,c); else { hanoi(n-1,a,c,b); //递归调用hanoi函数 printf(from %c to %c\n,a,c); hanoi(n-1,b,a,c); //递归调用hanoi函数 } } 数组作为函数参数 1 数组元素作函数实参 由于实参可以是表达式,而数组元素可以是表达式的组成部分,因此数组元素可以作为函数的实参,与用变量作实参一样,是单向传递,即“值传送”方式。 例 有两个数组a和b,各有10个元素,将它们对应地逐个相比(即a[0]与b[0]比,a[1]与b[1]比……)。如果a数组中的元素大于b数组中的相应元素的数目多于b数组中元素大于a数组中相应元素的数目(例如,a[i]b[i]6次,b[i]a[i]3次,其中i每次为不同的值),则认为a数组大于b数组,并分别统计出两个数组相应元素大于、等于、小于的次数。 #include stdio.h void main() { int large(int x,int y); /* 函数声明 */ int a[10],b[10],i,n=0,m=0,k=0; printf(″enter array a∶\n″); for(i=0;i<10;i++=) scanf(″%d″,&a[i]); printf(″\n″); printf(″ enter arrayb∶\n″); for(i=0;i<10;i++=) scanf (″%d″,&b[i]); printf(″\n″); for(i=0;i<10;i++) { if(large (a[i],b[i] )== 1) n=n+1;   else if( large (a[i],b[i] )==0) m=m+1; else k=k+1;} 实参为数组元素 printf(a[i]b[i] %d times\na[i]=b[i] %d times\na[i]b[i] %d times\n,n,m,k); if(nk) printf(array a is larger than array b\n); else if (nk) printf(array a is smaller than a

文档评论(0)

wbjsn + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档