<分区>
使用两个函数:
为以下等式开发一个 C 程序:
我已经做到了。但没有输出。
#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
纸笔数学支持它,所以你的算法到目前为止是合理的!
给它一些负数和一些大数,看看它从这里做了什么!