計算階層與次方之函數
試撰寫一浮點函數 f(x, n)供主程式來呼叫,可用來計算下面的數學式(必須分別
利用 power(x, n)與 fac(n)來計算分子與分母。)
以上是題目
請問我程式這樣有那裡寫錯了?
#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;
}
修正兩個地方:
1.把double b=1.0
和return b;
搬到迴圈外面後即可正確執行
2.num 的宣告由int
改為double
以下是 f(5,3) 的結果
#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;
}