📜  门| GATE-CS-2017(套装2)|第 47 题

📅  最后修改于: 2021-09-24 06:08:28             🧑  作者: Mango

考虑以下 C 程序片段。假设 swap(&x, &y) 交换 x 和 y 的内容。

int main()
{
    int array[] = {3, 5, 1, 4, 6, 2};
    int done = 0;
    int i;

    while (done == 0)
    {
        done  = 1;
        for (i = 0; i <= 4; i++)
        {
            if (array[i] = 1; i--)
        {
            if (array[i] > array[i-1])
            {
                swap(&array[i], &array[i-1]);
                done = 0;
            }
        }
    }

    printf("%d", array[3]);
}

程序的输出是_____。
注意:此问题显示为数字答案类型。
(一) 1
(乙) 2
(三) 3
(四) 4答案: (C)
说明: for循环执行后,数组内容:

第一次: 5 3 4 6 2 1
第二次: 6 5 4 3 2 1
第三次: 6 5 4 3 2 1
现在,当 while 循环再次执行时, done = 1 和第一个和第二个 for 循环,如果条件不满足。
因此,最终arr[3]的值=3,选项C是正确的。

请参阅此以了解更多信息:

#include 
void swap(int *t, int *x)
{
    int m;
    m = *t;
    *t = *x;
    *x = m;
}
  
int main()
{
    int array[] = {3, 5, 1, 4, 6, 2};
    int done = 0;
    int i;
  
    while (done == 0)
    {
        done  = 1;
        for( i = 0; i <= 4; i++)
        {
            if(array[i] < array[i+1])
            {
                swap(&array[i], &array[i+1]);
                done = 0;
            }
        }
        for (i = 5; i >= 1; i--)
        {
            if( array[i] > array[i-1])
            {
                swap(&array[i], &array[i-1]);
                done = 0;
            }
        }
    }
  
    printf("%d", array[3]);
}

这个问题的测验