如何将数学方程(求和)转换为代码?

时间:2011-01-04 17:16:16

标签: c

使用两个功能:

  • 因子函数
  • 电源功能

为以下等式开发C程序:

alt text

我做到了这一点。但没有输出。

#include <stdio.h>
#include <math.h>

double factorial(double x);
double Power_function(double y);

int main(){
  double answer=0;
  double n;
  double y;

  printf("Enter Y :The last limit of the summation:>");
  scanf("%ld",&y);
  for (n=1;n<=y;++n){
    answer=answer +factorial(n)*Power_function(n)*y;
  }

  printf("The Answer is %0.2f\n",answer);
  return 0;
}

double factorial(double x)
{
  double ans;
  if (x==0){
    ans = 1;
  }
  else
  {
    ans = x*factorial(x-1);
  }
  return ans;
}

double Power_function(double y){
  double ans;
  ans=pow(2,y);
  return ans;
}

4 个答案:

答案 0 :(得分:1)

你正在寻找从1到y的(n!* 2 ^ n)之和。

total variable is 0  
for 1 until y:  
multiply factorial(n) and pow(2, n) and add this to total
end of loop
print out total

答案 1 :(得分:1)

我没有为你做任何事,但这是一个基本的大纲。

你必须完成它。

int answer = 0;
int n;
for(n=1; n <= y; ++n)
{
    answer = answer + (n! * 2^n)*y;
}

答案 2 :(得分:1)

我怀疑这是什么学习结果之一,这里太多的帮助会让游戏消失。

我想我可以肯定地说你需要将等式的每个部分分解为更小的可解零部分。

三个最大的部分是求和,N因子(N!)和2到幂N

求和实际上是一个循环,N从1开始到y结束,所以寻找C语法来写一个循环(暗示有两种常见类型,while和for)

另外两个是功能,如果您允许使用预制功能,那么很多只存在google,这将很好地排序,如果不是,您将不得不自己编写。

factorial是n*(n-1)*(n-2)...(n-(n-2))*(n-(n-1))

所以4! = 4*3*2*1

recursive function的主要候选者或具有降序循环的函数

2,幂n是2乘以n次

所以2到2 = 2*2

2到3 = 2*2*2,依此类推

再一次循环看起来像是一个好的开始。

之后,只需在循环中使用两个函数,就可以让用户输入Y并测试一些数字。

1,2,3将是一个良好的开端,因为他们很好并且很容易在计算器上锻炼。

到目前为止我一直都很好,希望,-1应该让我看到的每个例子都发生有趣的事情,这是在我们开始用32号这样的大数字推出船之前。

编辑: 是的,我已经看了你的代码,看起来你的问题不在你的算法的实现中,它没有正确地读取变量,在你设置它之后输出y得到0,所以有些东西不是'在那里工作得很好。我不是一个编码器,但我快速破解了一些自由的谷歌搜索和你的非功能代码,并让它读取一个参数然后解析为一个双。

#include<stdio.h>
#include<math.h>
double factorial(double x);
double Power_function(double y);

main(int argc, char *argv[]){
  double answer=0;
  double n;
  double y;
  y = atol(argv[1]);
  //printf("%lf\n",y);
  for (n=1;n<=y;++n){
    answer=answer +factorial(n)*Power_function(n)*y;
  }

  printf("The Answer is %0.2f\n",answer);
  return 0;
}

double factorial(double x)
{
  double ans;
  if (x==0){
    ans = 1;
  }
  else
  {
    ans = x*factorial(x-1);
  }
  return ans;
}

double Power_function(double y){
  double ans;
  ans=pow(2,y);
  return ans;
}

基本上你的代码使用不同的输入法

使用

编译

gcc so.c -lm

执行

./a.out 1 收益率The Answer is 2.00

./a.out 2 收益率The Answer is 20.00

./a.out 3 收益率The Answer is 174.00

笔和纸数学支持它,所以你的算法到目前为止都是合理的!

给它添加一些负数和一些巨大的数字,看看它从这里做了什么!

答案 3 :(得分:0)

要做的第一件事就是写下你手动完成这个等式的工作。例如,尝试1到5,看看你得到了什么。