《函数C语言》PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <stdio.h> double sum(int n) ; double jc(int n) ; main( ) { int n; double result;
scanf(“%d”,&n); result=sum(n);
printf(“1+2!+3!+……+%d!= %f\n”,n,result); }
如果我们定义fun()这个函数为求阶乘函数,则 fun(n) =n*fun(n-1)
当n= =1 或 n= =0 时,阶层值为1 当n>=2时,阶层值为fun(n)=n*fun(n-1)
数学模型(公式): fun(0)=1,fun(1)=1; fun(n)=n*fun(n-1); /* n>=2 */
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
a b c d c b a \0
main() {
}
char a[20]; int f; gets(a); f=func(a); if(f= =1)
printf(“它是回文数\n”); else
printf(“它不是回文数\n”);
f=n*fun(n-1);
return(f );
}
求出n!的值。 (用递归法)
第一次调用fun函数 执行 4*fun(3), 遇到fun(3) ,离开fun( )函数,再次调用
}
printf(“%d!=%f”,n, result); }
double fun(int n)
{
double f;
数学模型(公式):
if(n= =1|| n= =0)
fun(0)=1,fun(1)=1; /*n=1 或 n=0*/
f=1;
fun(n)=n*fun(n-1); /* n>=2 */
else
求出n!的值。 (用递归法)
main() { int n;
double result; double fun(int n);
scanf(“%d”,&n);
result=fun(n);
double fun(int n) {
if(n= =1|| n= =0) return (1);
else return (n*fun(n-1));
第八章 函数
内蒙古科技大学实训Байду номын сангаас心
实参与形参的对应关系有四种情况:
⑴形参和实参都用数组 ⑵实参用数组名,形参用指针 ⑶实参形参都用指针 ⑷实参用指针,形参用数组名
例 编写一个判断字符串是否为“回文”的函数,如果是回文数 则函数的返回值为1,不是回文数则返回0。所谓“回文”数是 指顺读与倒读都相同的字符串,例如“ABCDCBA”。
引入——求1+2+3+……+n的值
#include <stdio.h> int sum(int n) ; main( ) { int n;
int s=0;
scanf(“%d”,&n); /* 例如输入50,则n为50*/
sfo=r(siu=m1;(i<n=);n ; i++) s=s+ i ;
printf(“he is %d\n”, s);
}
改进——求1+2!+3!+……+n!的值
#include <stdio.h> int sum(int n) ; main( ) { int n;
int result;
scanf(“%d”,&n); /* 例如输入50,则n为50*/
result=sum(n);
printf(“he is %d\n”,result);
直接调用本函数 f函数
f1函数
f2函数
调用f函数 间接调用本函数
调用f2函数 调用f1函数
例——求n!
main() { int n;
double result; double fun(int n);
scanf(“%d”,&n);
result=fun(n);
printf(“%d!=%f”,n, result); }
8.8 函数的嵌套调用
函数的嵌套调用—— 在调用一个函数的过程中,又调用另一个函数。 1. C语言的函数定义是平行的、独立的,一个函数内不能再定义
另外一个函数。 2. C语言不能嵌套定义函数,但可以嵌套调用函数。
main() {
a(); } a( ) {
b( ); } b( ) { }
作业
整理笔记 认真阅读148~149页 152~167页 自主编程
gets(a); gets(b); p=a;q=b; func(p,q); puts(a); }
a hoo
are
\0 \0 \0
b y o u \0 \0 \0 \0 \0 \0 \0 \0
8.9 函数的递归调用
递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数 本身,称为函数的递归调用。
170页8.5 用调用函数的方法求:链接两个字符串(参考在后) 用两种方法完成1!+2!+3!+……+n!
用调用函数方法,实现两个字符串的连接。
main() {
char a[50],b[20];
gets(a); gets(b); func(a,b); puts(a); }
main() {
char a[50],b[20]; char *p,*q;
double jc(int n) { int i; double t=1;
for(i=1; i<=n; i++ t*=i;
return(t); }
double sum(int n) { int i; double s=0;
for(i=1; i<=n; i++ s=s+jc( i );
return(s); }
}
int sum(int n)
jc(i)
{ int i;
int s=0; for(i=1; i<=n; i++
s=s+ i ;
return(s);
}
int jc(int n)
{ int i; int t=1; for(i=1; i<=n; i++ t*=i; return(t );
}
答案——求1+2!+3!+……+n!的值
double fun(int n)
{ int i; double t=1; for(i=1; i<=n; i++ t*=i; return(t );
}
例——间接递归调用求n!
现在用递归法求n!,方法是:
5!=4!*5
4!=3!*4 3!=2!*3
通式为:
n!=(n-1)!*n
2!=1!*2
1!=1
scanf(“%d”,&n); result=sum(n);
printf(“1+2!+3!+……+%d!= %f\n”,n,result); }
如果我们定义fun()这个函数为求阶乘函数,则 fun(n) =n*fun(n-1)
当n= =1 或 n= =0 时,阶层值为1 当n>=2时,阶层值为fun(n)=n*fun(n-1)
数学模型(公式): fun(0)=1,fun(1)=1; fun(n)=n*fun(n-1); /* n>=2 */
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]
a b c d c b a \0
main() {
}
char a[20]; int f; gets(a); f=func(a); if(f= =1)
printf(“它是回文数\n”); else
printf(“它不是回文数\n”);
f=n*fun(n-1);
return(f );
}
求出n!的值。 (用递归法)
第一次调用fun函数 执行 4*fun(3), 遇到fun(3) ,离开fun( )函数,再次调用
}
printf(“%d!=%f”,n, result); }
double fun(int n)
{
double f;
数学模型(公式):
if(n= =1|| n= =0)
fun(0)=1,fun(1)=1; /*n=1 或 n=0*/
f=1;
fun(n)=n*fun(n-1); /* n>=2 */
else
求出n!的值。 (用递归法)
main() { int n;
double result; double fun(int n);
scanf(“%d”,&n);
result=fun(n);
double fun(int n) {
if(n= =1|| n= =0) return (1);
else return (n*fun(n-1));
第八章 函数
内蒙古科技大学实训Байду номын сангаас心
实参与形参的对应关系有四种情况:
⑴形参和实参都用数组 ⑵实参用数组名,形参用指针 ⑶实参形参都用指针 ⑷实参用指针,形参用数组名
例 编写一个判断字符串是否为“回文”的函数,如果是回文数 则函数的返回值为1,不是回文数则返回0。所谓“回文”数是 指顺读与倒读都相同的字符串,例如“ABCDCBA”。
引入——求1+2+3+……+n的值
#include <stdio.h> int sum(int n) ; main( ) { int n;
int s=0;
scanf(“%d”,&n); /* 例如输入50,则n为50*/
sfo=r(siu=m1;(i<n=);n ; i++) s=s+ i ;
printf(“he is %d\n”, s);
}
改进——求1+2!+3!+……+n!的值
#include <stdio.h> int sum(int n) ; main( ) { int n;
int result;
scanf(“%d”,&n); /* 例如输入50,则n为50*/
result=sum(n);
printf(“he is %d\n”,result);
直接调用本函数 f函数
f1函数
f2函数
调用f函数 间接调用本函数
调用f2函数 调用f1函数
例——求n!
main() { int n;
double result; double fun(int n);
scanf(“%d”,&n);
result=fun(n);
printf(“%d!=%f”,n, result); }
8.8 函数的嵌套调用
函数的嵌套调用—— 在调用一个函数的过程中,又调用另一个函数。 1. C语言的函数定义是平行的、独立的,一个函数内不能再定义
另外一个函数。 2. C语言不能嵌套定义函数,但可以嵌套调用函数。
main() {
a(); } a( ) {
b( ); } b( ) { }
作业
整理笔记 认真阅读148~149页 152~167页 自主编程
gets(a); gets(b); p=a;q=b; func(p,q); puts(a); }
a hoo
are
\0 \0 \0
b y o u \0 \0 \0 \0 \0 \0 \0 \0
8.9 函数的递归调用
递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数 本身,称为函数的递归调用。
170页8.5 用调用函数的方法求:链接两个字符串(参考在后) 用两种方法完成1!+2!+3!+……+n!
用调用函数方法,实现两个字符串的连接。
main() {
char a[50],b[20];
gets(a); gets(b); func(a,b); puts(a); }
main() {
char a[50],b[20]; char *p,*q;
double jc(int n) { int i; double t=1;
for(i=1; i<=n; i++ t*=i;
return(t); }
double sum(int n) { int i; double s=0;
for(i=1; i<=n; i++ s=s+jc( i );
return(s); }
}
int sum(int n)
jc(i)
{ int i;
int s=0; for(i=1; i<=n; i++
s=s+ i ;
return(s);
}
int jc(int n)
{ int i; int t=1; for(i=1; i<=n; i++ t*=i; return(t );
}
答案——求1+2!+3!+……+n!的值
double fun(int n)
{ int i; double t=1; for(i=1; i<=n; i++ t*=i; return(t );
}
例——间接递归调用求n!
现在用递归法求n!,方法是:
5!=4!*5
4!=3!*4 3!=2!*3
通式为:
n!=(n-1)!*n
2!=1!*2
1!=1