0; --n)"- 计数器从 1 运行到大于 1,而 step 为 -1。但柜台是什么? n本身? (我曾经看到过类似-6ren">
gpt4 book ai didi

c - 本书 "c program. lang."版本 2 中的电源程序,循环

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:55 25 4
gpt4 key购买 nike

我坚持使用“C 编程语言”一书中的这一行代码 -"for (p = 1; n > 0; --n)"- 计数器从 1 运行到大于 1,而 step 为 -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;
}

最佳答案

在每次迭代中n递减1,因为--n,当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 次 < strong>=> 基础n

p 用于存储最后的结果 p = basen

你可能喜欢这样写(一小段代码,我觉得也有点快):

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

编辑:评论和回答:

for (p = 1; n > 0; --n) - when the counter starts?

是的n是计数器,在for循环中我们不需要初始化n。我们只是用 1 初始化 p 变量来存储结果。 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

from n to p (to 1)?

循环运行 n1 次(不是条件为 > 0)例如
在第一个示例中,当您调用 power(3,2); 时,循环运行 n = 21 .同样在函数 power(5,7); 的第二次调用中,循环运行 n = 71

Why we need p here?

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

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

基数 = 3 , n = 2p = 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 即 32 = 9

关于c - 本书 "c program. lang."版本 2 中的电源程序,循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17719346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com