gpt4 book ai didi

c - 'while loop' 内存在 C 编程中如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:50 27 4
gpt4 key购买 nike

我想看看我对这个简单程序的工作方式的理解是否正确。 它有效,我只是想确保我了解原因。

    #include <stdio.h>

int main(){
int x, y = 0, z;
x = 123;

while(x != 0){
z = x % 10;
y = y * 10 + z;
x /= 10;
}

printf(">>> %d", y);
return 0;
}

output
>>> 321

我觉得是这样的。

所以“x”最初声明的值为 123 被循环采用以及条件 声明当 x 不等于 0 时程序继续。

循环从原始声明开始 “x”取内存 123 中的内容,“z”被赋值: 以下操作的其余部分; 123 % 10 = 12.3 留下包含 3 的“z”

这就是最后一个数字变成第一个数字的方式 内存现在包含 12。

"y"将内存中的 12 乘以 10 总计 120 添加到“z”,即 3 所以内存现在包含 123。

然后“x”取内存中的123/10
总计 12.3 = 12。 所以内存现在包含 12

循环从上一次迭代开始 “x”取内存 12 中的内容,“z”被赋值: 手术后的剩余部分; 12% 10 = 2。

这是倒数第二个数字成为第二个数字的地方。 所以内存现在包含 1。

然后“y”取内存中的内容 1 * 10 = 10 2 即“z” 所以内存现在包含 12。

然后“x”取内存中的内容 12/10 = 1.2 并且只返回 1 的商。 所以内存现在包含 1。

循环从上一次迭代开始 “x”取内存 1 中的内容,“z”被赋值:以下操作的其余部分; 1 % 10 = 0.1 留下 z 包含 1。

这是第一个数字成为最后一个数字的地方。 所以内存现在包含 0。

“y”取内存 0 * 10 = 0 + 1 中的内容,即“z”。 所以内存现在包含 1。

“x”取内存中的内容 1/10 = 0.1 除法运算符仅返回商。 所以内存现在包含 0。

现在 "x"= 0 所以条件已经满足 程序中断了。

所以如果有人能告诉我我是对的还是 向我解释哪里出了问题并帮助我 正确地看到这些概念,我真的会 感谢他们的见解。

谢谢。

最佳答案

你的逻辑不对(相当不对)。部分'...留下商所以内存现在包含 12。然后 y 获取内存中的内容 12…' 非常奇怪。除法是使用整数运算完成的,而不是 float 。有一个适中的机会在某个地方有一个包含 12 的寄存器,但它没有乘以 10 或任何东西,并且 12 的存在与否对其余部分无关紧要代码(除非编译器设法使用它而不是为 x/= 10 执行第二次除法)。

更准确的逻辑版本

实际逻辑更像是:

  • x == 123 表示 x != 0 所以代码通过循环:

    • z = 123 % 10 表示 z == 3
    • y = 0 * 10 + 3 表示 y == 3
    • x/= 10 表示 x == 12
  • x == 12 表示 x != 0 所以代码通过循环:

    • z = 12 % 10 表示 z == 2
    • y = 3 * 10 + 2 表示 y == 32
    • x/= 10 表示 x == 1
  • x == 1 表示 x != 0 所以代码通过循环:

    • z = 1 % 10 表示 z == 1
    • y = 32 * 10 + 1 表示 y == 321
    • x/= 10 表示 x == 0
  • x == 0 表示循环终止:

    • y 的值为 321

使用打印语句查看代码运行情况

请注意,您可以通过向代码中添加适当的打印来避免一些焦虑。例如:

#include <stdio.h>

int main(){
int x, y = 0, z;
x = 123;

printf("x = %d\n", x);
while(x != 0){
z = x % 10;
printf("z = %d\n", z);
y = y * 10 + z;
printf("y = %d\n", y);
x /= 10;
printf("x = %d\n", x);
}
printf(">>> %d\n", y);
return 0;
}

您还可以学习使用调试器单步执行代码,以查看 xyz 中的值通过循环。我发现使用 printf() 语句很有用——我编写的代码通常适合这种调试。如果您开发 GUI 程序,它的帮助可能不大,或者需要在设置(打印信息的地方)时更加小心才能有所帮助。

关于c - 'while loop' 内存在 C 编程中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54528413/

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