使用while循环而不是pow:此错误是什么意思?

时间:2019-04-02 02:22:07

标签: c

我正在尝试使用C编程创建一些代码,这些代码可以使用用户指定的两个值来显示具有一定功效的数字。我想在第一部分使用pow,在第二部分使用while循环。但是,我在当前的代码中遇到了一个我似乎无法摆脱的错误。

这是我不熟悉的另一个错误:

error: invalid operands to binary * (have ‘int (*)(int,  int)’ and ‘int’)
       result2 = result2 * base;

我曾尝试调查其他具有相同错误的问题,但是它们之间的差异太大,以至于我无法理解。

我已经尝试研究“ long”,但是我的C教科书还没有使我感到满意,所以我尽可能避免使用它。

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

int result2(int base, int exponent);

int main(void)
{
    double base;
    double exponent;
    double result1;

    puts("Please enter a value as the base and another as the exponent.");
    scanf("%lf%lf", &base, &exponent);

    result1 = pow(base, exponent);

    printf("Library solution: %lf\n", result1);

    printf("My solution: %d\n", result2(base, exponent));
}

int result2(int base, int exponent)
{
    int i;


    for(i=1; i<=exponent; i++)
    {
        result2 = result2 * base;
    }
    return;
}

我希望能够使用两种带有用户值的方法正确地计算方程。但是,由于这个错误,我似乎无法超越并实现这一目标。谢谢。

2 个答案:

答案 0 :(得分:2)

int result2(int base, int exponent)
{
    int i;

    for(i=1; i<=exponent; i++)
    {
        result2 = result2 * base;
    }
    return;
}

result2是函数的名称。您应该创建一个变量来完成该工作,而不是像使用变量那样累积循环结果。然后在最后返回变量的值。

int result2(int base, int exponent)
{
    int i;
    int result = 1;

    for(i=1; i<=exponent; i++)
    {
        result = result * base;
    }
    return result;
}

更好的是,给函数起一个不同的名字。 result2听起来像变量名。该函数应命名为表明其功能的名称。由于使用了powpower怎么样?

int power(int base, int exponent)
{
    int result = 1;

    for (int i=1; i<=exponent; i++)
    {
        result *= base;
    }

    return result;
}

其他一些小的改进是在int i循环内声明for,并使用result *= base作为result = result * base的简写。

答案 1 :(得分:0)

我对您的代码做了一些修改。

1)将功能result2重命名为my_expresult2听起来像个变量。

2)修改功能my_expint的类型,使其与main的变量类型一致。

3)在result中添加变量my_exp,以存储for循环的部分结果。

4)在i声明内声明了for

5)调用pow内部的my_expprintf并删除result1不再是必需的。

6)将计算result的方式更改为更紧凑的方式。

除了类型更改外,大多数更改都是表面修饰。

int my_exp(int base, int exponent);

int main(void)
{
    int base;
    int exponent;

    puts("Please enter a value as the base and another as the exponent.");
    scanf("%i", &base);
    scanf("%i", &exponent);

    printf("Library solution: %i\n", pow(base, exponent));
    printf("My solution: %i\n", my_exp(base, exponent));
}

int my_exp(int base, int exponent)
{
    //int i;
    int result;
    result = 1;

    for(int i=1; i<=exponent; i++)
    {
        result *= base;
    }
    return result;
}