如何在C编程中编写(a ^ n-1)

时间:2018-09-29 12:40:42

标签: c

我想用c编程编写(a ^ n-1)。我写了pow(a,n-1),输出是 错误。我怎么解决这个问题?谢谢。 这是我的代码:

#include <stdio.h>
#include<math.h>
int main() {

    float a, r,n;
    float sum = 0;
    a = 1.04*pow(a, n-1);
    r = 1.02*pow(1.04,-1);
    n = 2;

    sum = 360000*pow(1.04,n)-50000*(a * (1 - pow((r), n ))) / (1- (r));


    printf("\n%.2f", sum);
    return 0;
}

正确的输出应该是286376,但是程序显示了2903773

2 个答案:

答案 0 :(得分:0)

pow(a,n-1)转换为exp(log(a)*(n-1))并不完全相同。您可以尝试将输出取整:

round(pow(a, n-1))

答案 1 :(得分:0)

每个C程序都逐行执行。因此,在编译器启动时

a = 1.04*pow(a, n-1);

此行(变量an没有分配任何值,导致为您提供了垃圾值...

因此,问题是,您尚未在变量中分配值,而您仍在使用它们。

使用变量之前,必须先在变量中分配值。否则,他们将从内存中选择任何垃圾值(任何随机数)。

an中分配值,然后重试。

编辑:正如chux's comment所建议的那样,如果您的程序应该提供286376作为输出,则a的值应为1和值n应该是2

因此,您的正确代码应为:

#include <stdio.h>
#include <math.h>
int main() {
    float a=1, r, n=2;
    float sum = 0;
    a = 1.04*pow(a, n-1) ;
    r = 1.02*pow(1.04,-1);
    sum = 360000*pow(1.04,n)-50000*(a * (1 - pow((r), n ))) / (1- (r));
    printf("\n%.2f", sum);
    return 0;
}