一、利用复化梯形公式计算定积分
二、计算Ackerman函数
三、编写计算x的y次幂的递归函数getpower(int x,int y),并在主程序中实现输入输出
四、编写计算学生年龄的递归函数
五、编写递归函数实现Ackman函数算法
#include<stdio.h> double f(double x); double sab(double a,double b,int n) { double h,result,x1,x2,x3=0,t; int k; h=(b-a)/n; x1=f(a); x2=f(b); for(k=1;k<=n-1;k++) { t=a+k*h; x3=x3+f(t); } return h*(x1+x2)/2+h*x3; }
(2)6.4.2.2.1.cpp函数
#include<stdio.h> #include<math.h> #include"sab.h" double f(double x) { double result; result=x*x*exp(x); return result; } main() { double a,b,result; int n; printf("please input double a,b and integer n:"); scanf("%lf%lf%d",&a,&b,&n); result=sab(a,b,n); printf("sab(%lf,%lf,%d)=%f",a,b,n,result); return 0; }
(3)6.4.2.2.2.cpp设计
#include<stdio.h> #include"sab.h" double f(double x) { double result; result=1/(25+x*x); return result; } main() { double a,b,result; int n; printf("please input double a,b and integer n:"); scanf("%lf%lf%d",&a,&b,&n); result=sab(a,b,n); printf("sab(%f,%f,%d)=%f",a,b,n,result); return 0; }
运行结果以下:3d
(1)根据方法说明,编制计算Ackerman函数的递归函数ack(n,x,y)。调试
(2)编制一个主函数,由键盘输入n,x,y,调用(1)中的函数ack(n,x,y),计算Ackerman函数code
(3)在主函数中,输入以前要有提示,并检查输入数据的合理性,若输入的数据不合理,则输出出错信息。输出要有文字说明。blog
(4)输入(n,x,y) = (2,3,1)运行该程序。而后自定义几组数据再运行该程序。递归
方法说明:
Ackerman函数的定义以下:
1n,x,y为非负整数,且字符串
流程图以下图所示:get
#include<stdio.h> int Ack(int n,int x,int y) { int a; if(n==0) a=x+1; if(n==1&&y==0) a=x; if(n==2&&y==0) a=0; if(n==3&&y==0) a=1; if(n>=4&&y==0) a=2; if(n!=0&&y!=0) return Ack(n-1,Ack(n,x,y-1),x); return a; } main() { int a,b,c,d; printf("please input a,b,c:"); scanf("%d%d%d",&a,&b,&c); while (a<=0||b<=0||c<=0) { printf("error,please input again!\n"); scanf("%d%d%d",&a,&b,&c); } d=Ack(a,b,c); printf("Ack(%d,%d,%d)=%d\n",a,b,c,d); }
运行结果以下:
#include<stdio.h> long getpower(int x,int y) { if(y==1) return x; else return x*getpower(x,y-1); } main() { float num,power; long answer; printf("输入一个数:"); while((!scanf("%f",&num))||((int)num)!=num) { fflush(stdin); printf("输入错误,请从新输入!\n输入一个数:"); //scanf("%f",&num); } printf("输入幂次方:"); while((!scanf("%f",&power))||((int)power)!=power) { fflush(stdin); printf("输入错误,请从新输入!\n输入一个数:"); // scanf("%f",&power); } answer=getpower(num,power); printf("结果是:%ld",answer); return 0; }
运行结果以下:
#include<stdio.h> int age(int n) { int c; if(n==1) c=10; else return age(n-1)+2; return c; } main() { int n=5; printf("%d",age(n)); }
运行结果以下:
其中m、n为正整数。设计程序求Acm(2,1),Acm(3,2)。程序流程图以下图所示:
#include<stdio.h> Acm(int m,int n) { if(m==0) return n+1; if(n==0) return Acm(m-1,1); if(n>0&&m>0) return Acm(m-1,Acm(m,n-1)); } int main() { int m,n,x,y; printf("please input two integers m,n:"); scanf("%d%d",&m,&n); printf("please input two integers x,y:"); scanf("%d%d",&x,&y); printf("Acm(%d,%d)=%d\n",m,n,Acm(m,n)); printf("Acm(%d,%d)=%d",x,y,Acm(x,y)); }
运行结果以下:
一、要正确掌握如何实现进一步递推的功能,使用if-else语句根据条件的真假;来决定是递推仍是回归。 二、学会如何调用另外一个独立文件程序中的函数,且要注意,在独立文件头文件中还要对函数进行声明。 三、掌握如何判断一个数是否为整数,和输入输出的循环,幂函数的输出结果的格式要定义为%ld型,由于他要输出长整型数据。