考虑以下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]);
}
这个问题的测验