iT邦幫忙

1

計算階層與次方之函數

  • 分享至 

  • xImage

計算階層與次方之函數
試撰寫一浮點函數 f(x, n)供主程式來呼叫,可用來計算下面的數學式(必須分別
利用 power(x, n)與 fac(n)來計算分子與分母。)

https://ithelp.ithome.com.tw/upload/images/20211218/20136759rjcAfeVakZ.jpg


以上是題目
請問我程式這樣有那裡寫錯了?

#include<stdio.h>
#include<stdlib.h>
double f(double,int); /*宣告sigma函數*/
double power (double,int);/*宣告指數函數*/ 
double fac (int); /*宣告階乘函數*/ 

int main(){
	
    double sum,x,cum,fun;
	int num,n,z;
	do{
		printf("請輸入f(x,n)的值:");
	    scanf("%lf %d",&x,&n);	
	}while(n<1);
	
	for(z=1;z<=n;z++){
	   sum=power(x,z);/*呼叫指數程式*/ 
	   printf("sum=%lf\n",sum);
	   num=fac(z);/*呼叫階乘程式*/ 
	   printf("num=%lf\n",num);
	   cum=f(sum,num);/*呼叫sigma程式*/
	   printf("cum=%lf\n",cum);
	   fun+=cum;
	   printf("fun=%lf\n",fun);
	} 
	
	printf("%f",fun);

    return 0;
	
} 

double power (double x,int n) /*指數函數*/ 
{
    for(int a=1;a<=n;a++){
    	double b=1.0;
    	b*=x;
    	return b;
	}	
}

double fac (int n) /*階乘函數*/ 
{
	for(int a=1;a<=n;a++){
		double b=1.0;
		b*=a;
		return b;
	}
}

double f (double power ,int fac) /*sigma函數*/ 
{
	double mum;
	mum=power/fac;
	return mum;
	
}
fillano iT邦超人 1 級 ‧ 2021-12-19 06:58:34 檢舉
return寫在for迴圈裡?這樣迴圈不會跑完哪。
1092B0007 iT邦新手 3 級 ‧ 2021-12-19 11:23:25 檢舉
對齁 忘記了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

3
海綿寶寶
iT邦大神 1 級 ‧ 2021-12-19 10:52:04
最佳解答

修正兩個地方:
1.把double b=1.0return b;搬到迴圈外面後即可正確執行
2.num 的宣告由int改為double

以下是 f(5,3) 的結果
https://ithelp.ithome.com.tw/upload/images/20211219/20001787ODh3078aQj.png

#include<stdio.h>
#include<stdlib.h>
double f(double,int); /*宣告sigma函數*/
double power (double,int);/*宣告指數函數*/ 
double fac (int); /*宣告階乘函數*/ 

int main(){
	
    double sum,x,cum,fun,num;
	int n,z;
	do{
		printf("請輸入f(x,n)的值:");
	    scanf("%lf %d",&x,&n);	
	}while(n<1);
	
	for(z=1;z<=n;z++){
	   sum=power(x,z);/*呼叫指數程式*/ 
	   printf("power=%lf\n",sum);
	   num=fac(z);/*呼叫階乘程式*/ 
	   printf("fac=%f\n",num);
	   cum=f(sum,num);/*呼叫sigma程式*/
	   printf("sigma=%lf\n",cum);
	   fun+=cum;
	   printf("fun=%lf\n",fun);
	} 
	
	printf("%f",fun);

    return 0;
	
} 

double power (double x,int n) /*指數函數*/ 
{
    double b=1.0;
    for(int a=1;a<=n;a++){
    	b*=x;
	}	
    return b;
}

double fac (int n) /*階乘函數*/ 
{
    double b=1.0;
	for(int a=1;a<=n;a++){
		b*=a;
	}
    return b;
}

double f (double power ,int fac) /*sigma函數*/ 
{
	double mum;
	mum=power/fac;
	return mum;
	
}
1092B0007 iT邦新手 3 級 ‧ 2021-12-19 11:23:54 檢舉

已解決,謝謝您

/images/emoticon/emoticon54.gif

我要發表回答

立即登入回答