一、利用復化梯形公式計算定積分
二、計算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型,由於他要輸出長整型數據。