网站大量收购独家精品文档,联系QQ:2885784924

11 第十一章 对函数的进一步讨论.ppt

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

第11章 对函数的进一步讨论 11.1 传给main函数的参数 11.2 通过实参向函数传递函数名或指向函数的指针变量 11.3 函数的递归调用 11.1 传给main函数的参数 11.2 通过实参向函数传递函数名或指向函数的指针变量 11.3 函数的递归调用 11.3 函数的递归调用 习题 函数递归调用的程序填空 * #include stdio.h main(int argc,char *argv[]) {int i; printf(argc=%d\n,argc); for(i=1;iargc;i++) printf(%s,argv[i]); printf(\n); } 在主函数main中也可以含有参数,我们通过一个程序来介绍一下它的使用。 若在命令行中输入: myc A COMMAND LINKCR 如上的输入中,空格表示间隔符,所以是4个字符串,argc的值就为4,则argv[0]就指向”myc”, argv[1]就指向”A”, argv[2]就指向”COMMAND”, argv[3]就指向”LINK”。 main(int argc,char **argv) argc=4 A COMMAND LINK 在C语言中函数名代表该函数的入口地址,因此可以定义一种指向函数的指针 来存放这种地址。例如: #include stdio.h double fun (int a, int *p) { : : } main() {double (*fp)(int, int *); double y; int n; fp=fun; : : y=(*fp)(56,n); : : } 主函数 被调用函数 /*定义了一个指针变量fp,该指针变量只能指向 返回值为实型的函数*/ /*把函数fun的入口地址赋值给指针变量fp,即fp指向了该函数*/ y=fun(56,n); 在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的 递归调用。 直接递归调用 int f ( int x ) {int y,z; ……….. z=f(y); } 间接递归调用 int f1 ( int x ) {int y,z; ……….. z=f2(y); } int f2 ( int t ) {int u,v; ……….. v=f1(u); } 递归调用程序举例: #include stdio.h int fac(int n) {int t; if(n==1 || n==0) return 1; else {t=n*fac(n-1); return t; } } main() {int m,y; scanf(%d,m); if(m0) printf(Input data error); else {y=fac(m); printf(%d!=%d\n,m,y); } } 程序执行时,比如输入4。 t=4 * fac(3) t=3 * fac(2) t=2 * fac(1) 1 1 2 6 退出函数,将t的值作为该函数的返回值,所以该函数的值为24。当退出用户自定义函数时,该函数中的变量全部释放。 4!=24 例1:请补充函数,fun函数是求n的阶乘。 #include stdio.h long fun(int n) { if (___1___) return (n*fun(___2___)); return ___3___; } main() { printf(10!=%ld\n, fun(10)); } 例2:请在函数fun的横线上填写若干表达 式,使从键盘上输入一个整数n,输出斐 波数列,如:0 1 1 2 3 5 8 13……… #include stdio.h int fun(int n); main() { int i, n = 0; scanf(%d, n); for (i=0; in; i++) printf(%d , fun(i)); } int fun(int n) { if (___1___) return 0; else if (___2___) return 1; else return ___3___; } 答案: 例1:n1 n-1 1 或 1L 答案: 例2:n==0 n==1 fun(n-1)+fun(n-2) *

文档评论(0)

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

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

1亿VIP精品文档

相关文档