读书人

那里?该怎么解决

发布时间: 2012-04-21 14:34:44 作者: rapoo

那里?
可以通,但我不理解,高手解下吧,,如注部分:
main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i <10;i++)
{ p=i;q=a[i];
for(j=i+1;j <10;j++)
if(q <a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf( "%d ",a[i]);
}
printf( "\ninput number:\n ");
scanf( "%d ",&n);
for(i=0;i <10;i++)
if(n> a[i])
{for(s=9;s> =i;s--) a[s+1]=a[s];
break;}
a[i]=n;//里n不覆原有的值?
for(i=0;i <=10;i++)
printf( "%d ",a[i]);
printf( "\n ");
}


[解决办法]
#include <stdio.h>

main()
{
int i,j,p,q,s,n,a[11]={127,3,6,28,54,68,87,105,162,18};
for(i=0;i <10;i++)// 首先对数组a进行从大到小的排序
{ p=i;q=a[i];
for(j=i+1;j <10;j++)// 排序用的是选择排序法
if(q <a[j]) {p=j;q=a[j];}
if(p!=i)
{
s=a[i];
a[i]=a[p];
a[p]=s;
}
printf( "%d ",a[i]);
}
printf( "\ninput number:\n ");// 输入一个数n,将它按原来的顺序插入到数组中,
scanf( "%d ",&n);
for(i=0;i <10;i++)
{
if(n> a[i])// 如果n> a[i],那么i这个位置就应该是插入的n的位置
{
for(s=9;s> =i;s--)
{
a[s+1]=a[s];/* 如果n> a[i],就将a[9]到a[i](包括a[9]和a[i])向后移一位,即变成a[10]....a[i+1],
但是a[i-1]到a[0]并没有变。这样正好把a[i]这个位置空出来存放n。*/
}
break;
}
}
a[i]=n;/* 里n不覆原有的值?(当然不会,举个例子,如果输入的n是90,在循环中判断到有n> a[i]时,从数组a中我们知道
a[3]=87(排好序以后的)满足n> a[i],这个时候数组中的a[9]到a[3]都将变成a[10]到a[4]而数组中的a[2]到a[0]部分则不变,这就将a[3]
这个位置空了出来,这个位置就是用来存放n的) */
for(i=0;i <=10;i++)
printf( "%d ",a[i]);
printf( "\n ");
}

读书人网 >C语言

热点推荐