日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言编写计算ackerman函数的递归函数ack(n,x,y),第六章函数与宏定义实验报告二...

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言编写计算ackerman函数的递归函数ack(n,x,y),第六章函数与宏定义实验报告二... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C程序設計實驗報告

實驗項目:

6.4.2.2. 利用復化梯形公式計算定積分

6.4.2.3. 計算Ackerman函數

6.4.3.1. 編寫計算x的y次冪的遞歸函數getpower(int x,int y),并在主程序中實現輸入輸出

6.4.3.2. 編寫計算學生年齡的遞歸函數

姓名:鄒慧瑩??實驗地點:教學樓514??實驗時間:2019.5.16

一、實驗目的與要求

6.4.2.2. 利用復化梯形公式計算定積分

掌握C語言中定義函數的方法;

掌握通過“值傳遞”調用函數的方法。

6.4.2.3. 計算Ackerman函數

掌握遞歸函數的設計方法;

進一步練習閱讀檢查與調試修改C程序的方法。

6.4.3.1. 編寫計算x的y次冪的遞歸函數getpower(int x,int y),并在主程序中實現輸入輸出

寫出該函數的遞歸算法:

在遞歸函數中,使用數字1作為回歸條件;

在遞歸函數中,使用if_else語句根據條件的真假來決定是遞推還是回歸。

6.4.3.2.編寫計算學生年齡的遞歸函數

寫出解決該函數的遞歸算法:

遞歸公式如下,根據公式容易寫出遞歸程序。

在遞歸函數中,使用數字1作為回歸條件;

在遞歸函數中,使用if_else語句根據條件的真假來決定是遞推還是回歸。

6.4.3.3.編寫遞歸函數實現Ackman函數

根據遞歸公式編寫遞歸函數;

在遞歸函數中,使用if_else語句根據條件的真假來決定是遞推還是回歸。

二、實驗內容

問題描述:

(1)編制一個函數sab(a,b,n),其功能為利用復化梯形公式計算定積分

其中n為對區間[a,b]的等分數。要求該函數在一個獨立的文件中。

(2)編制一個主函數以及計算被積函數值的函數f(x),在主函數中調用(1)中的函數sab(a,b,n)計算并輸出下列積分值

要求主函數與函數f(x)在同一文件中。

(3)編制另一個主函數以及計算被積函數值的函數f(x),在朱函數中調用(1)中的函數sab(a,b,n)計算并輸出下列積分值

同樣要求主函數與f(x)在同一文件中。

(4)要求畫出模塊sab()的流程圖。

方法說明:

設定積分為

則復化梯形求積公式為

其中h=(b-a)/n,Xk=a+kh。程圖如圖下圖所示:

實驗代碼

1.頭文件

#include

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);

}

result=h*(x1+x2)/2+h*x3;

return result;

}

2.6.4.2.2-1文件

#include

#include

#include"6.4.2.2.h"

double f(double x)

{

double result;

result=x*x*exp(x);

return result;

}

main()

{

double a,b,result;

int n;

printf("請輸入a,b,n\n");

scanf("%lf,%lf,%d",&a,&b,&n);

result=sab(a,b,n);

printf("%lf",result);

return 0;

}

3.6.4.2.2-2文件

#include

#include"6.4.2.2.h"

double f(double x)

{

double result;

result=1/(25+x*x);

return result;

}

main()

{

double a,b,result;

int n;

printf("請輸入a,b,n\n");

scanf("%lf,%lf,%d",&a,&b,&n);

result=sab(a,b,n);

printf("sab(%lf,%lf,%d)=%lf",a,b,n,result);

return 0;

}

輸出結果

對應的示例輸出:

對應的示例輸出:

問題分析:

剛開始不知道怎么引用外部文件,沒有把頭文件的類型改掉,導致第一題花了很久的時間。后面老師講了之后就知道要改文件類型。二者就是在寫代碼的時候中間多打了個空格發現結果會和真實結果有細微差別

若這樣是對不上真實結果的。但是我還不能理解為啥不能多加空格。

6.4.2.3. 計算Ackerman函數:

問題描述:

(1)根據方法說明,編制計算Ackman函數的遞歸函數ack(n,x,y)。

(2)編制一個主函數,由鍵盤輸入n,x,y,調用(1)中的函數ack(n,x,y),計算Ackman函數。

(3)在主函數中,輸入前要有提示,并檢查輸入數據的合理性,若輸入的數據不合理,則輸出出錯信息。輸出要有文字說明。

(4)輸入(n,x,y)=(2,3,1)運行該程序。然后自定義幾組數據再運行該程序。

方法說明:

Ackman函數的定義如下:

n,x,y為非負整數,且

程序流程圖如下:

實驗代碼:

#include

int Ack(int n,int x,int y)

{

int a;

if(n==0)

a=x+1;

else if(n==1&&y==0)

a=x;

else if(n==2&&y==0)

a=0;

else if(n==3&&y==0)

a=1;

else if(n>=4&&y==0)

a=2;

else if(n!=0&&y!=0)

a=Ack(n-1,Ack(n,x,y-1),x);

return a;

}

main()

{

int n,x,y,resul

printf("please input n,x,y:\n");

scanf("%d,%d,%d",&n,&x,&y);

if(n<=0||x<=0||y<=0)

printf("error! please input again");

result=Ack(n,x,y);

printf("Ack(%d,%d,%d)=%d\n",n,x,y,result);

}

輸出結果:

問題分析:推出遞推公式是關鍵

6.4.3.1. 編寫計算x的y次冪的遞歸函數getpower(int x,int y),并在主程序中實現輸入輸出:

問題描述:編寫程序,分別從鍵盤輸入數據x和y,計算x的y次冪并輸出。

流程圖:

實驗代碼:

#include"stdio.h"

long getpower(int x, int y)

{

if(y==1)

return x;

else

return x*getpower(x,y-1);

}

main()

{

int num,power;

long answer;

printf("輸入一個數:");

scanf("%d",&num);

printf("輸入冪次方:");

scanf("%d",&power);

answer=getpower(num,power);

printf("結果是:%d\n",answer);

}

實驗結果:

問題分析:根據算法和流程圖寫程序

6.4.3.2.編寫計算學生年齡的遞歸函數

問題描述:用遞歸算法計算學生的年齡。已知第一位學生年齡最小為10歲,其余學生一個比一個大2歲,求第五位學生的年齡。

實驗流程圖如下:

實驗代碼:

#include

int age(int n)

{

int c;

if(n==1)

c=10;

else

c=age(n-1)+2;

return c;

}

main()

{

int n=5;

int answer;

answer=age(n);

printf("%d",answer);

}

實驗結果:

問題分析:定義一個值代替age(n),整體來說比較簡單。

6.4.3.3.編寫遞歸函數實現Ackman函數

問題描述:定義遞歸函數實現下列Ackman函數:

其中m、n為正整數。設計程序求Acm(2,1),Acm(3,2)。程序流程圖如下圖所示:

流程圖如下:

實驗代碼:

#include

Acm(int m,int n)

{

int result;

if(m==0)

result=n+1;

else if(n==0)

result=Acm(m-1,1);

else if(n>0&&m>0)

result=Acm(m-1,Acm(m,n-1));

return result;

}

int main()

{

printf("Acm(2,1)=%d\nAcm(3,2)=%d",Acm(2,1),Acm(3,2));

return 0;

}

實驗結果:

問題分析:無

三、實驗小結

1.明白在遞歸函數中,使用if_else語句根據條件的真假來決定是遞推還是回歸

2.一般要定義一個值來代替函數的值

3.看懂流程圖的分支以及理解

4.調用外部文件要修改文件類型

5.細節要注意,比如那個多了空格就結果不一樣。

原文:https://www.cnblogs.com/zzzdka/p/10883795.html

總結

以上是生活随笔為你收集整理的c语言编写计算ackerman函数的递归函数ack(n,x,y),第六章函数与宏定义实验报告二...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。