大学题库:数组排序,求该错
题目:1.从键盘上输入n个数(n<=20)放在一个一维数组中,排序,使其数组中下标为奇数的数由大到小排列,下表为为偶数的数由小到大排列,且下标为奇数的最小数大于下标为偶数的最大数。思路:用冒泡法将数组先排序,形成升序数列。将数列的前一半的元素从小到大赋值给偶数位,后一半的元素从大到小赋值给奇数位。
程序如下:
#include <stdio.h>
void main()
{
int n,i,j,t;
char s1[20],s2[20];
printf("please input numbers:");
gets(s1);
n=strlen(s1);
for(i=0;i<n-1;i++) \\冒泡法,已经检查,正确的。
for(j=0;j<n-i-1;j++)
{
if(s1[j]>s1[j+1])
{
t=s1[j];
s1[j]=s1[j+1];
s1[j+1]=t;
}
}
puts(s1);
for(i=0;i<=(n-1)/2&&s2[2*i+1]!='\0';i++) \\\程序错误处在此处赋值,比如我输4321,正确的S2输出应该是1423,但是计算机输出却是14232P。请大家帮忙!
指出错误。另求更好的算法学习!我只会C,是个新手,指针都还没学!
{
s2[2*i]=s1[i];
s2[2*i+1]=s1[n-1-i];
}
puts(s2);
}
}