关于子函数的问题,求解析

有以下程序:
#include <stdio.h>
struct S{intn;inta[20];}; void f(struct S *p)

inti,j,t;
for(i=0;in-1;i++) for(j=i+1;jn;j++) if(p->a[i]>p->alil)
{t=p->a[i]; p->a[i]=p->a[j]; p->a[j]=t; }

main()

int i;structSs={10,{23168754109}}; f(&s);
for(i=0;i<s.n;i++)printf("%d,",s.a[il);

程序运行后的输出结果是()。
A.2,3,1,6,8,7,5,4,10,9,

B.10,9,8,7,6,5,4,3,2,1,

C.1,2,3,4,5,6,7,8,9,10,

好家伙,兄弟你这代码乱的,我连蒙带猜地整理了一遍

#include <stdio.h>

struct S{
    int n;
    int a[20];
    }; 

void f(struct S *p)
{
    int i, j, t;
    
    for(i = 0; i < p->n; i++)
        for(j = i+1; j < p->n; j++)
            if( p -> a[i] > p -> a[j]){
                t = p -> a[i];
                p -> a[i] = p -> a[j];
                p -> a[j] = t; 
                }
}

int main(void)
{
    int i;
    struct S s = {10, {2, 3, 1, 6, 8, 7, 5, 4, 10, 9}}; 
    
    f(&s);

    for(i = 0; i < s.n; i++)
        printf("%d, ", s.a[i]);
    
    return 0;
}

最终的输出结果就是C。这是在通过函数给结构中的数组a排序,从小到大。

从a[0]开始与a[1]比较,当a[0]>a[1]时就交换他们的值。内层循环会遍历a[i]之后的每一个值,和a[i]比较后将较小的值换到a[i]的位置上去。外层循环结束后,所有的值都会按照从小到大的顺序排列完毕。

答案是C
理由:
main函数里面首先对结构体s进行了初始化,然后调用函数f,进入函数f以后,里面就是一个选择排序算法,排序依据是从小到大排序,排序完成后在对里面的内容进行输出

选C.
解释:此处另一种形式的冒泡排序,且根据循环比较,此处为升序排序。

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!