-2

我对 C 编程非常陌生[昨晚我的丈夫决定让我将伪代码中的作业转换为可工作的 C 程序......] 所以我为这可能多么简单而道歉。我也是stackoverflow的新手,所以如果我犯了任何基本错误,请告诉我。

我写了以下内容:

 int CalcPower(int n, int m)
{
    int result = 1;
    int i;
    if(m = 0);
    result = 1;
    if(m = 1);
    result = n;
    for (i = 2; i <= m; i++);
    {
        result = result*n;
    }
    return result;
}

但是我用数字 (2,4) 和 (2,8) 运行它,结果无论如何都是 4。我的错误在哪里?

谢谢!

4

6 回答 6

4
if(m = 0);
result = 1;

相当于

if(m = 0)
    ;
result = 1;

您需要从语句;末尾删除 。for

您还需要==用于比较。 m=0分配0m然后返回0,导致您的if条件失败。

if(m == 0)
    result = 1;
于 2013-11-13T07:46:26.870 回答
3

是的,有几件事,首先其他人也在他们的回答中提到:

  • 当您需要比较运算符时,您正在使用赋值运算符:=分配,==比较。
  • 分号是语句的结尾,;是一个空的但有效的语句,所以if(m ==0);说:“如果 m 为 0,什么也不做”。您的for循环也遇到了同样的问题。
  • 正如我在评论中所说:如果您知道答案,为什么要分配:if(m==0) result = 1;有点多余,恕我直言,我只想写if (m == 0) return 1;

现在,别的东西:
你正在计算一个 int,以另一个 int 的力量计算。从技术上讲, 2^33 应该是“可计算的”,但 int 根本不够大。这是一个替代建议:

long long calc_power(int i, unsigned int exp)
{
    long long result;
    if (exp == 0) return 1;
    result = i;
    for (--exp;exp;--exp) result *= i;
    return result;
}

我还删除了if (exp == 1), 作为循环的编写方式,它现在可以处理它。
值得解释的陈述:

long long calc_power(int i, unsigned int exp)

我稍微更改了函数的签名:它现在返回一个long long值,以容纳更大的值, -function 的可能会返回。我还将第二个参数声明为unsigned int,以避免不得不处理负面权力。你的函数还没有准备好,但你没有检查是否m < 0,你只是假设它是有效的输入。

if (exp == 0) return 1;

注意:右括号后没有分号

result = i;

这会将 int 提升为一个long long值,并自动将 i^1 分配给result.

for(--exp;exp;--exp) result *= i;

这里发生了很多事情。首先,循环以 开始,与, 或--exp相同。 循环继续的条件很简单。如果为 0,则计算结果为 false。假设为 1,则开始循环自动设置为 0,并且永远不会进入循环。如果大于 1,则循环继续,递减直到它也达到零。 在每次迭代中,计算其缩写。 完成所有这些后,返回一个值...exp -= 1exp = exp -1;
expexpexpexpexpexp
result *= i;result = result * i
return resultlong long

正如 H2CO3 所指出的,这个片段可以进一步简化:

long long calc_power(int i, unsigned int exp)
{
    long long result = 1;//assign 1
    for (;exp;--exp) result *= i;
    return result;
}

而不是检查 a exp == 0,只需从一开始就分配 1 result,然后从那里取东西就可以了……
请注意,这for(;exp;--exp)不是错字。第一个分号必须存在,但那里没有需要评估的表达式。如果你找到for (exp;exp;--exp),那也有效。

注意:
这个函数绝不是“准备好生产”,这只是一个如何计算的基本示例i1^i2,对于一个更完整的pow函数示例,看看这里,看看你是否可以计算出代码作品。不过,您可能需要更多信息,也许还需要一本关于 C 语言的书

于 2013-11-13T08:17:34.430 回答
0
  1. 分号结束语句;

if ( / * Some condition * /);

基本上意味着if(/*whatever*/)什么 都不做;而不是

if(/*Something*/)
/*i do it my way*/ ;

或更好

if(/*Something*/)
{
/*i do it my way*/ ;
}
  1. = 是赋值,== 等于 tester

    如果(米 = 1);

这意味着分配1m 赋值运算符返回 RHS,因此它变成

if(1)
{

}

意思是if(true)

于 2013-11-13T07:56:24.253 回答
0

还有for循环

 for (i = 2; i <= m; i++); should be for (i = 2; i <= m; i++){ ...

您的 for 循环将从i = 2 to m增量运行,但它不能反映打算在其下执行的逻辑。

于 2013-11-13T07:47:34.180 回答
0

你的问题在这里:

for (i = 2; i <= m; i++);

您需要;从这一行的末尾删除;目前,它实际上是这样的:

for (i = 2; i <= m; i++)
    /* No instructions to execute */;
于 2013-11-13T07:47:41.003 回答
-1

if(m = 0);意味着您将 0 分配给变量 m,因此它永远不会为真。您也在';'if 语句中放入 a,因此 if 之后的语句不会受到条件的影响。

'=' is an assignment operator

'==' is the comparison operator


int CalcPower(int n, int m)
{
    int result = 1;
    int i;
    if(m == 0)
    result = 1;
    if(m == 1)
    result = n;
    for (i = 2; i <= m; i++)
    {
        result = result*n;
    }
    return result;
}
于 2013-11-13T07:48:29.737 回答