书中的电源程序;c程序。朗;版本2,循环
我被“C编程语言”一书中的这一行代码困住了- “对于(p=1;n>0;--n)”-计数器从1运行到1以上,而步骤为-1。但是柜台是什么?n本身书中的电源程序;c程序。朗;版本2,循环,c,cycle,C,Cycle,我被“C编程语言”一书中的这一行代码困住了- “对于(p=1;n>0;--n)”-计数器从1运行到1以上,而步骤为-1。但是柜台是什么?n本身 (我曾经看到for(I=1;Ifor循环中的初始化表示p=1,而不是n=1,n已作为函数参数之一提供,并用作计数器。p是结果的累加器 写这篇文章的更清晰的方式可能是: int p = 1; while (n--) { p *= base; } return p; 这里的寓意是函数参数已经是局部变量,不需要为了它而创建一个重复的局部变量。修改函数参数非常
(我曾经看到for(I=1;Ifor循环中的初始化表示
p=1
,而不是n=1
,n
已作为函数参数之一提供,并用作计数器。p
是结果的累加器
写这篇文章的更清晰的方式可能是:
int p = 1;
while (n--) { p *= base; }
return p;
这里的寓意是函数参数已经是局部变量,不需要为了它而创建一个重复的局部变量。修改函数参数非常好。在每次迭代中
n
由于--n
而减少1
,当n
减少到0
条件n>0
变为假,循环中断
for (p = 1; n > 0; --n)
^
| When n = 0, condition becomes 0 > 0 that is false
在循环中,您将乘以p=p*base;
计算=>base*base*base*…n次
=>basen
p
用于p=basen末尾的存储结果
您可能喜欢这样编写(一个小代码,我认为也有点快):
编辑:评论和答案:
用于(p=1;n>0;--n)
-计数器何时启动?
是的,n
是计数器,在for循环中,我们不需要初始化n
。我们只需要用1
初始化p
变量来存储结果。n
的值来自函数参数。您可以调用int power(int base,int n);
函数的主要位置,如:
result = power(3,2); // here base = 3, and n = 2
或
从n到p(到1)?
循环运行n
到1
次(非条件为>0
),例如在第一个示例中,当您调用
power(3,2);
时,循环运行n
=2
到1
。
同样,在第二次调用函数power(5,7);
循环运行n
=7
到1
为什么我们在这里需要p?
正如我在上面的回答p
中所写,我们需要存储结果
在循环中p
最初1
,但在每次迭代中,您将p
与base
值相乘,并仅将结果存储回p
。例如对于函数调用
power(3,2);
循环运行和p
计算如下:
基数=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
第二次迭代:
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
第三次迭代:
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
即32=9
简短:
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
中,用于(p=1;n>0;--n)-当计数器从n开始时?从n到p(到1)?为什么我们需要p?谢谢你提供了一个详细的答案。现在我明白了p=0是一种声明/初始化。也许,当我有更多的经验时,我会更了解它…实际上,我不知道这个循环是如何工作的-for(p=1;n>0;--n)-从1开始到大于1?或者从n开始到大于p?@Ilan:p
,而不是n
。仔细再读一遍。我明白了,但这没有帮助-为什么我们需要p?我们从n开始到n>0。如果p是终点,我们怎么能从p开始…哇!我拿不到它p
是累加器。你知道“功率”是什么吗函数应该做什么,它是如何定义的?当然,我知道,但我不明白为什么P在括号里(我喜欢你的答案!正如我之前问的“我们需要什么”在括号里,你澄清了这个问题,回答说我们可以省略它。