📜  门| GATE-CS-2017(Set 2)|第47章

📅  最后修改于: 2021-07-02 17:38:56             🧑  作者: 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]);
}

该程序的输出是_____。
注意:此问题显示为“数值答案类型”。
(A) 1
(B) 2
(C) 3
(D) 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]);
}

这个问题的测验