我正在尝试使用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;
}
我希望能够使用两种带有用户值的方法正确地计算方程。但是,由于这个错误,我似乎无法超越并实现这一目标。谢谢。
答案 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
听起来像变量名。该函数应命名为表明其功能的名称。由于使用了pow
,power
怎么样?
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_exp
。 result2
听起来像个变量。
2)修改功能my_exp
到int
的类型,使其与main
的变量类型一致。
3)在result
中添加变量my_exp
,以存储for
循环的部分结果。
4)在i
声明内声明了for
。
5)调用pow
内部的my_exp
和printf
并删除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;
}