《C语言课程课件 第十一章 对函数的进一步讨论》由会员分享,可在线阅读,更多相关《C语言课程课件 第十一章 对函数的进一步讨论(6页珍藏版)》请在金锄头文库上搜索。
1、第11章 对函数的进一步讨论 11.1 传给main函数的参数 11.2 通过实参向函数传递函数名或指向函 数的指针变量 11.3 函数的递归调用11.1 传给main函数的参数#include main(int argc,char *argv) int i;printf(“argc=%dn“,argc);for(i=1;i如上的输入中,空格表示间隔符,所以是4 个字符串,argc的值就为4,则argv0就 指向”myc”, argv1就指向”A”, argv2就指向”COMMAND”, argv3就 指向”LINK”。main(int argc,char *argv)argc=4 A COM
2、MAND LINK11.2 通过实参向函数传递函数名或指向函数的指针变量在C语言中函数名代表该函数的入口地址,因此可以定义一种指向函数的指针 来存放这种地址。例如:#include double fun (int a, int *p) : main() double (*fp)(int, int *);double y; int n;fp=fun;:y=(*fp)(56,: 主函数被调用函数/*定义了一个指针变量fp,该指针变量只能指向 返回值为实型的函数*/ /*把函数fun的入口地址赋值给指针变量fp,即fp指向了该函数*/y=fun(56,11.3 函数的递归调用在调用一个函数的过程中又
3、出现直接或间接地调用该函数本身,称为函数的 递归调用。直接递归调用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); 11.3 函数的递归调用递归调用程序举例:#include int fac(int n) int t;if(n=1 | n=0) return 1;elset=n*fac(n-1);return t; main() int m,y;scanf(“%d“,if(m long fun(int n) if (_1_)return (n*fun(_2_); return _3_; main() printf(“10!=%ldn“, fun(10); 例2:请在函数fun的横线上填写若干表达 式,使从键盘上输入一个整数n,输出斐 波数列,如:0 1 1 2 3 5 8 13 #include int fun(int n); main() int i, n = 0; scanf(“%d“, for (i=0; i1n-11 或 1L答案: 例2:n=0n=1fun(n-1)+fun(n-2)