📜  C 程序的输出 |设置 4

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

C 程序的输出 |设置 4

预测以下程序的输出问题 1

#include‹stdio.h›
int main()
{
    struct site
    {
        char name[] = "GeeksforGeeks";
        int no_of_pages = 200;
    };
    struct site *ptr;
    printf("%d",ptr->no_of_pages);
    printf("%s",ptr->name); 
    getchar();
    return 0;
}

输出:
编译器错误

解释:
请注意结构/联合声明和变量声明之间的区别。当你声明一个结构时,你实际上是在声明一个适合你目的的新数据类型。所以你不能初始化值,因为它不是变量声明而是数据类型声明。

参考:
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/SYNTAX/struct.html

问题2



int main()
{
    char a[2][3][3] = {'g','e','e','k','s','f','o',
                           'r','g','e','e','k','s'};
    printf("%s ", **a);
    getchar();
    return 0;
}

输出:
极客

解释:
我们已经创建了一个应该有 2*3*3 (= 18) 个元素的 3D 数组,但我们只初始化了其中的 13 个。在 C 中,当我们在数组中初始化更少的元素时,所有未初始化的元素在 char 的情况下变为 '\0',在整数的情况下变为 0。

问题 3

int main()
{
   char str[]= "geeks\nforgeeks";
   char *ptr1, *ptr2;
       
   ptr1 = &str[3];
   ptr2 = str + 5;
   printf("%c", ++*str - --*ptr1 + *ptr2 + 2); 
   printf("%s", str); 
   
   getchar();
   return 0;
}

输出:
嘿嘿
怪胎

解释:
在“geeks\nforgeeks”中,最初ptr1指向'k',ptr2指向'\n'。在打印语句中,str 处的值增加 1,ptr1 处的值减少 1。所以字符串变成了“heejs\nforgeeks”。

第一个打印语句变成
printf(“%c”, 'h' – 'j' + 'n' + 2)

'h' – 'j' + '\n' + 2 = -2 + '\n' + 2 = '\n'

首先打印报表字符。下一个打印语句打印“heejs\nforgeeks”。

问题 4

#include 
int fun(int n)
{
    int i, j, sum = 0;
    for(i = 1;i<=n;i++)
        for(j=i;j<=i;j++)
            sum=sum+j;
    return(sum);
}
  
int main()
{
    printf("%d", fun(15));
    getchar();
    return 0;
}

输出:120
解释: fun(n) 计算前 n 个整数的总和,或者我们可以说它返回 n(n+1)/2。

问题 5

#include  
int main()
{
    int c = 5, no = 1000;
    do {
        no /= c;
    } while(c--);
 
    printf ("%d\n", no);
    return 0;
}

输出:异常——除以零

说明:上面的程序有一个bug。它也进入 c = 0 的 do-while 循环。像这样使用 do-while 循环时要小心!!