来自“c program.lang”的电力计划。版本2,循环

时间:2013-07-18 09:17:50

标签: c cycle

我坚持使用“C编程语言”一书中的这一行代码 - “ for(p = 1; n> 0; --n)” - 计数器从1运行到1以上,而步长为-1。但柜台是什么? n本身?

(我曾经看过 for(i = 1; i< = n; ++ i)类似的结构,所以计数器的问题很明显,但是在版本2中我遇到了我真的不知道柜台是什么以及在哪里......

从这里开始:

/* power:  raise base to n-th power; n >= 0; version 2 */
   int power(int base, int n)
   {
       int p;
       for (p = 1; n > 0; --n)
           p = p * base;

       return p; 
   }

3 个答案:

答案 0 :(得分:1)

for循环中的初始化表示p = 1,而非n = 1n已作为函数参数之一提供,并用作计数器。 p是结果的累加器。

更清楚地写这个可能是:

int p = 1;
while (n--) { p *= base; }
return p;

这里的道德是函数参数已经是局部变量,并且不需要为了它而创建重复的局部变量。修改函数参数非常好。

答案 1 :(得分:1)

在每次迭代中n1而递减--nn减少到0条件n > 0变为false并且循环中断。

for (p = 1; n > 0; --n)
              ^
              |  When n = 0, condition becomes 0 > 0 that is false

在循环中,您乘以p = p * base;评估 => base * base * base * ...n times => base n

p用于存储结果p = base n

你可能喜欢写它(一个小代码,我觉得有点快):

int p;
for (p = 1; n--  && (p*=base) ;)
return p;   

修改评论&答案:

  计数器启动时

for (p = 1; n > 0; --n) -

n是计数器,在for循环中我们不需要初始化n。我们只是使用p初始化1变量来存储结果。 n的值来自函数参数。你可以将你的int power(int base, int n);函数称为main中的某个位置,例如:

result = power(3,2);  // here base = 3, and n = 2

result = power(5,7); // here base = 5, and n = 7
  

从n到p(到1)?

循环运行n1次(非条件为> 0)例如
在第一个示例中,当您致电power(3,2);时,循环会针对n = 2运行至1。 同样在函数power(5,7);的第二次调用中,n = 71的循环运行。

  

为什么我们需要这里?

正如我在上面的回答p中所写,我们需要存储结果。例如

在循环p中最初1,但在每次迭代中,您将p乘以base值,并将结果仅存储回p。例如
对于函数调用power(3,2);循环运行,p计算如下:

base = 3,n = 2 p = 1; //初始化

第一次迭代:

condition n > 0 is True because n is 2 (2 > 0). 
p = p * base = 1 * 3 = 3
and p becomes 3. 
Now --n decreases n to 1

第二次迭代:

condition n > 0 is True because n is 1 (1 > 0). 
p = p * base = 3 * 3 = 9
and p becomes 9. 
Now --n decreases n to 0

第三次迭代:

condition n > 0 is False because n is 0 (0 > 0).  
condition false so loop breaks  

返回p即3 2 = 9

答案 2 :(得分:0)

简短而简单:

int power(int base, int n)

那是你得到n的地方,它是一个参数,

int p;
for (p = 1; n > 0; --n)

p用作总和,计算结果,它不用于计算循环步骤,我们可以像这样重写这两行:

int p = 1;
for(; n > 0; --n)

从这里可以看出p不会影响周期计数器

for(; n > 0; --n)

现在你应该明白,当n大于0这是循环的条件时循环运行,一旦这个陈述变为false,循环将停止,并且每一步n递减,因此循环将运行n次。

p = p * base;

如您所见p仅用于计算基数的功效(方法计算base^n的多少),结果存储在p