📜  C程序的输出| 27套

📅  最后修改于: 2022-05-13 01:56:10.839000             🧑  作者: Mango

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 循环条件失败,并且程序退出循环而不打印任何内容。