void fun(char *s[], int n)

void fun(char *s[], int n)
{
char *t;int i,j
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strlen(s[i])>strlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;}
}
main()
{char *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"}
fun(ss,5); printf("%s,%s\n",ss[0],ss[4]);
}

请告诉我,程序怎么运行的,请详细帮我分析一下,这个仿真题我不会做帮我一层一层的分析一下,谢谢

void fun(char *s[], int n) //排序函数,按字符串长度从小到大进行排序 //这是主元法排序,即:一一不动,用动的和不动比较
{
char *t;int i,j
for(i=0;i<n-1;i++) //不动
for(j=i+1;j<n;j++) //动
if(strlen(s[i])>strlen(s[j])) //比较字符串长度,如果前者长度比后者大,就交换两个字符串的地址(该地址存储在字符串数组中){t=s[i];s[i]=s[j];s[j]=t;}
}
main()
{char *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"} //定义一个字符串数组,用来存储数据
fun(ss,5); //调用排序函数,传递字符串首地址以及元素个数printf("%s,%s\n",ss[0],ss[4]); //打印出最小值和最大值
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-05
这个程序是从MAIN函数开始执行,首先创建了一个指针字符串数组,其实这个等同于一个二维数组,比如 ss[0]指向的"bcc"的首字母b,ss[1]指向的"bbcc"首字母b,后面的同理!然后开始调用上面定义的fun函数.在fun函数中,定义了一个字符指针数组和一个整形变量的常量的形参,在函数开始时定义了一个指针变量t和整形变量i,j,strlen(s[i])实现的是计算s[i]的长度,比如"bcc"就是4,因为其实在电脑中真正存的是"bcc\0",\0是字符串的结束标志符,而后面通过一次次的比较字符串的长度来实现把字符串重新排序,而这种排序法是冒泡排序法,最后程序调用C的输出函数printf打印输出结果结果是:xyaaaacc.如果还有身不动可以追问!