书中的电源程序;c程序。朗;版本2,循环

书中的电源程序;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; 这里的寓意是函数参数已经是局部变量,不需要为了它而创建一个重复的局部变量。修改函数参数非常

我被“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;

这里的寓意是函数参数已经是局部变量,不需要为了它而创建一个重复的局部变量。修改函数参数非常好。

在每次迭代中
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在括号里(我喜欢你的答案!正如我之前问的“我们需要什么”在括号里,你澄清了这个问题,回答说我们可以省略它。