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

标签 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;
}

最佳答案

我怀疑这样做的学习成果之一是什么,这里过多的帮助会泄露游戏信息。

我想我可以有把握地说,您需要将等式的每个部分分解为更小的可解部分。

三个最大的部分是求和、N 阶乘 (N!) 和 2 的 N 次方

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

另外两个是函数,如果您允许使用预制函数,那么只需要谷歌一下就可以找到很多函数,否则您将不得不自己编写。

阶乘是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,所以有些东西'在那里工作得不太好。我不是 C 编码员,但我通过一些自由谷歌搜索和您的非功能代码快速破解了它,并让它读取一个参数,然后将其解析为 double 。

#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 产生 答案是 174.00

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

给它一些负数和一些大数,看看它从这里做了什么!

关于c - 如何将数学方程式(求和)转换为代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596420/

相关文章:

c - 打印每个单词的第一个字母 C

C - 进程返回 139 (0x8B) 段错误

c - 保护或加密来自 C 程序的输入/输出?

c - 制作文件选项

c - 递归手动跟踪

c - 导致段错误的结构

使用atoi将char数组转换为int数组

c - C 中的一个程序,用于获取前两个小于给定数字的斐波那契数

android -/system/bin/linker 中的段错误与为 Android 编译的二进制文件

C - 如何逐行读取 HTTP GET 请求的返回值?