gpt4 book ai didi

c - "the C programming language"本书习题1.2可能的错误结果

转载 作者:行者123 更新时间:2023-12-04 10:27:15 27 4
gpt4 key购买 nike

#include <stdio.h>
/* print Fahrenheit-Celsius table
for fahr = 0, 20, ..., 300 */
main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr-32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
}

根据上面的代码,我不明白你是如何在第一行得到下面的结果的。不应该是 0 -17 吗?此示例位于 C 编程语言的第 17 页。我只是想确保这与 C 的旧实现无关,并且我没有得到与本书相同的结果,因为我使用的是更新的编译器。

1    -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148

最佳答案

确实,在第一次通过 while 循环时,fahr 的值为 0,这就是将要打印的内容。这可能是您的图书版本中的错字:我们在评论中有多个报告说其他版本有 0 而您的版本有 1。

您对旧 C 代码在新编译器中表现不同的担忧是正确的。然而,这个程序中没有任何通常会导致较新编译器出现问题的东西:没有指针别名、没有并发、没有算术溢出等。 celsius 的前两个值的计算> 列确实涉及带负被除数的整数除法,这是在 C1999 之前部分实现定义的;如果书中为这些值提供了 -18-7,那就是原因。现代编译器会发出有关 main 缺少返回类型的警告,但这不会影响程序的语义。 (我不知道 任何 现代 C 编译器实际上为“隐式 int”发出 错误,无论是在其默认模式还是在其“严格符合 C2011”模式。当然,通常有一种方法告诉它将该特定警告变成错误。)这些问题都不会导致 fahr 的第一个值被打印为 1。

请从中吸取教训,您应该多相信自己在心理上模拟程序执行的能力,而不是打印书籍。还建议您获得更新的 C 教科书——不仅仅是更新版本的 K&R,而是一本涵盖现代语言的全新书籍。不过,我很遗憾地说我没有任何建议。

关于c - "the C programming language"本书习题1.2可能的错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48649959/

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