C程序的输出| 27套
预测以下 C 程序的输出。
问题 1
#include
int main(void)
{
int i;
int power_of_ten[5] = {
00001,
00010,
00100,
01000,
10000,
};
for (i = 0; i < 5; ++i)
printf("%d ", power_of_ten[i]);
printf("\n");
return 0;
}
在上面的示例中,我们创建了一个包含 5 个元素的数组,其元素是 10 的幂(即 1、10、100、1000 和 10,000),并且我们使用简单的 for 循环打印这些元素。所以我们期望上面程序的输出是“1 10 100 1000 and 10000”,但是上面的程序没有显示这个输出,而是显示
"1 8 64 512 10000"
让我们更详细地讨论上述程序。在数组内部,我们声明了以“0”开头的元素,这是十进制数的八进制表示(有关详细信息,请参阅此 GFact)。
这就是为什么所有这些数字都以八进制表示的原因。 “010”是十进制“8”的八进制表示,“0100”是十进制“64”的八进制表示等等。
最后一个元素“10000”不以“0”开头,这就是为什么它是十进制格式并按原样打印。
问题2
#include
int main(void)
{
https://www.geeksforgeeks.org
printf("Hello, World !!!\n");
return 0;
}
乍一看,上面的程序看起来会出现编译错误,但它可以正常工作(但会发出编译警告)。仔细观察上面的程序,在这个程序中“http:”将被视为goto标签,两个正斜杠将作为单行注释。这就是程序将正常工作的原因。
问题 3
#include
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
int main(void)
{
int i;
int arr[] = {1, 2, 3, 4, 5};
for (i = -1; i < ARRAY_SIZE(arr) - 1; ++i)
printf("%d ", arr[i + 1]);
printf("\n");
return 0;
}
在上面的程序中,“ARRAY_SIZE”宏替换表达式以获取数组中存在的元素总数,我们使用 for 循环打印这些元素。但程序不打印任何东西。让我们看看代码有什么问题。
替换表达式返回的值采用“unsigned int”格式,在 for 循环中,我们将无符号 5 与有符号 -1 进行比较。在这个比较中 -1 被提升为无符号整数。 -1 以无符号格式表示,因为它的所有位都设置为 1(即 0xffffffff),这是一个太大的数字
替换宏的值后,for 循环如下所示。
for (i = -1; 0xffffffff < 5; ++i)
在上面的循环中确实 0xffffffff 不小于 5,这就是为什么 for 循环条件失败,并且程序退出循环而不打印任何内容。