您好,欢迎访问三七文档
第八章函数内蒙古科技大学实训中心实参与形参的对应关系有四种情况:⑴形参和实参都用数组⑵实参用数组名,形参用指针⑶实参形参都用指针⑷实参用指针,形参用数组名例编写一个判断字符串是否为“回文”的函数,如果是回文数则函数的返回值为1,不是回文数则返回0。所谓“回文”数是指顺读与倒读都相同的字符串,例如“ABCDCBA”。abcdcba\0a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]main(){chara[20];intf;gets(a);f=func(a);if(f==1)printf(“它是回文数\n”);elseprintf(“它不是回文数\n”);}引入——求1+2+3+……+n的值#includestdio.hintsum(intn);main(){intn;ints=0;scanf(“%d”,&n);/*例如输入50,则n为50*/for(i=1;i=n;i++)s=s+i;printf(“heis%d\n”,s);}sum(n);s=#includestdio.hintsum(intn);main(){intn;intresult;scanf(“%d”,&n);/*例如输入50,则n为50*/result=sum(n);printf(“heis%d\n”,result);}intsum(intn){inti;ints=0;for(i=1;i=n;i++s=s+i;return(s);}改进——求1+2!+3!+……+n!的值jc(i)intjc(intn){inti;intt=1;for(i=1;i=n;i++t*=i;return(t);}答案——求1+2!+3!+……+n!的值#includestdio.hdoublesum(intn);doublejc(intn);main(){intn;doubleresult;scanf(“%d”,&n);result=sum(n);printf(“1+2!+3!+……+%d!=%f\n”,n,result);}doublejc(intn){inti;doublet=1;for(i=1;i=n;i++t*=i;return(t);}doublesum(intn){inti;doubles=0;for(i=1;i=n;i++s=s+jc(i);return(s);}8.8函数的嵌套调用函数的嵌套调用——在调用一个函数的过程中,又调用另一个函数。1.C语言的函数定义是平行的、独立的,一个函数内不能再定义另外一个函数。2.C语言不能嵌套定义函数,但可以嵌套调用函数。main(){a();}a(){b();}b(){}作业整理笔记认真阅读148~149页152~167页自主编程170页8.5用调用函数的方法求:链接两个字符串(参考在后)用两种方法完成1!+2!+3!+……+n!用调用函数方法,实现两个字符串的连接。main(){chara[50],b[20];gets(a);gets(b);func(a,b);puts(a);}main(){chara[50],b[20];char*p,*q;gets(a);gets(b);p=a;q=b;func(p,q);puts(a);}\0\0\0eraooh\0\0\0\0\0\0\0\0uoyab8.9函数的递归调用f函数调用f函数调用f1函数f1函数调用f2函数f2函数递归调用在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。直接调用本函数间接调用本函数例——求n!main(){intn;doubleresult;doublefun(intn);scanf(“%d”,&n);result=fun(n);printf(“%d!=%f”,n,result);}doublefun(intn){inti;doublet=1;for(i=1;i=n;i++t*=i;return(t);}例——间接递归调用求n!如果我们定义fun()这个函数为求阶乘函数,则fun(n)=n*fun(n-1)当n==1或n==0时,阶层值为1当n=2时,阶层值为fun(n)=n*fun(n-1)现在用递归法求n!,方法是:5!=4!*54!=3!*43!=2!*32!=1!*21!=1通式为:n!=(n-1)!*n数学模型(公式):fun(0)=1,fun(1)=1;fun(n)=n*fun(n-1);/*n=2*/求出n!的值。(用递归法)doublefun(intn){if(n==1||n==0)return(1);elsereturn(n*fun(n-1));}main(){intn;doubleresult;doublefun(intn);scanf(“%d”,&n);result=fun(n);printf(“%d!=%f”,n,result);}数学模型(公式):fun(0)=1,fun(1)=1;/*n=1或n=0*/fun(n)=n*fun(n-1);/*n=2*/doublefun(intn){doublef;if(n==1||n==0)f=1;elsef=n*fun(n-1);return(f);}求出n!的值。(用递归法)第一次调用fun函数执行4*fun(3),遇到fun(3),离开fun()函数,再次调用fun()函数(第2次)本次未得到4!的结果,不能往主函数中返值;doublefun(intn){doublef;if(n==1||n==0)f=1;elsef=n*fun(n-1);return(f);}第二次调用fun()函数执行3*fun(2),遇到fun(2),离开fun()函数,再次调用fun()函数(第3次)本次未得到3!的结果,不能往上次函数中返值;doublefun(intn){doublef;if(n==1||n==0)f=1;elsef=n*fun(n-1);return(f);}第三次调用fun()函数执行2*fun(1),遇到fun(1),离开fun()函数,再次调用fun()函数(第4次)本次未得到2!的结果,不能往上次函数中返值;doublefun(intn){doublef;if(n==1||n==0)f=1;elsef=n*fun(n-1);return(f);}第四次调用fun()函数执行f=1,得到1!,将值返回到上次函数中;doublefun(intn){doublef;if(n==1||n==0)f=1;elsef=n*fun(n-1);return(f);}例——间接递归调用求斐波那契额数列第n项的值数学模型(公式):fun(1)=1,fun(2)=1;/*n=1或n=2*/fun(n)=fun(n-1)+fun(n-2);/*n=2*/intfun(intn){intf;if(n==1||n==2)f=1;elsef=fun(n-1)+fun(n-2);return(f);}intfun(intn){if(n==1||n==2)return(1);elsereturn(fun(n-1)+fun(n-2));}例——间接递归调用求斐波那契额数列第n项的值1.doublefun(intn){if(n==1||n==2)return(1);elsereturn(fun(n-1)+fun(n-2));}main(){intn;intresult;intfun(intn);scanf(“%d”,&n);result=fun(n);printf(“斐波那契额数列第%d项的值为%d\n”,n,result);}2.intfun(intn){intf;if(n==1||n==2)f=1;elsef=fun(n-1)+fun(n-2);return(f);}
本文标题:函数3 c语言
链接地址:https://www.777doc.com/doc-3355760 .html