1. 程式人生 > >C語言測試n的階乘和x的n次方

C語言測試n的階乘和x的n次方

題目描述
輸入一個正數x和一個正整數n,求下列算式的值。要求定義兩個呼叫函式:fact(n)計算n的階乘;mypow(x,n)計算x的n次冪(即xn),兩個函式的返回值型別是double。

x - x^{2}/2! + x^3/3! + ... + (-1)^{n-1}x^n/n! 

×輸出保留4位小數。

輸入
x n

輸出
數列和

樣例輸入
2.0 3

樣例輸出
1.3333

 

答案

/*************************************************************************
        > File Name: 2.c
        > Author: 
        > Mail: 
        > Created Time: Wed 12 Dec 2018 09:03:22 AM CST
 ************************************************************************/

#include<stdio.h>

double fact(int n)
{
        double s = 1.0;
    for(int i=1; i<= n; i++)
        {
                s=s*i;
        } 
        return s;
}

double mypow(double x,int n)
{                 
    double s = 1.0;
   
    //printf("%lf %d\n",x,n);

        if(n == 0)    
    {             
      return 1.0; 
    }             
                  
    if(n == 1)    
    {             
      return x;                                                                               
    }             
     
    s = x;
    for(int i =0;i<n-1;i++)
    {             
      s = x*s;   
    }

    //printf("%lf \n",s);
    return s;     
}   

void main(void)
{
    double x = 0.0;
    int n = 0;
    double s;

    scanf("%lf %d",&x,&n);
 
    //printf("%lf\n",mypow(-1.0,2));

    if(n == 1)
    {
        s = x;
    }
    else
    {
        s = x;
        for(int i=2;i<=n;i++)
        {
            s = s+ mypow(-1.0,i-1)*mypow(x,i)/fact(i);
        }
    }
    printf("%.4lf\n",s);
}

同事提供的答案,不用函式實現

#include <stdio.h>
int main ()
{
double x, ret, tmp1, tmp2;
int n, i, j;
while (~scanf("%lf %d", &x, &n))
{
ret = 0;
for (i = 1; i <= n; i++)
{
tmp1 = 1;
for (j = 1; j <= i; j++)
{
tmp1 *= x;
}
tmp2 = 1;
for (j = 1; j <= i; j++)
{
tmp2 *= j;
}
if (i % 2 == 1)
{
ret += tmp1 / tmp2;
}
else
{
ret -= tmp1 / tmp2;
}
}
printf("%.04f\n", ret);
}
return 0;
}

 

感興趣的可以自行測試

2004年秋浙江省計算機等級考試二級C 程式設計題(2) - C語言網

 

 

歡迎關注微信公眾號-嵌入式Linux

覺得不錯,請幫忙轉發,點贊,您的每一次支援,我都將銘記於心