读书人

求好手解释啊越看头越大

发布时间: 2012-09-10 22:20:12 作者: rapoo

求高手解释啊,越看头越大
main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n") ;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
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(i!=p) {s=a[i];a[i]=a[p];a[p]=s;}
printf("%d ",a[i]); }
}
书上看到这个程序,从看到红字这块我就凌乱了,哪位高手来给详细分析下?十分感谢!

[解决办法]
这本书烧了吧,P用没有
[解决办法]
整成这样看吧。

C/C++ code
main()   {     int i,j,p,q,s,a[10];  printf("\n input 10 numbers:\n") ;    for(i=0;i<10;i++)  scanf("%d",&a[i]);  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(i!=p)        {          s=a[i];          a[i]=a[p];          a[p]=s;       }    printf("%d ",a[i]);   }}
[解决办法]
整成这样看吧。
C/C++ code
main()   {     int i,j,p,q,s,a[10];  printf("\n input 10 numbers:\n") ;    for(i=0;i<10;i++)  scanf("%d",&a[i]);  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(i!=p)        {          s=a[i];          a[i]=a[p];          a[p]=s;       }    printf("%d ",a[i]);   }}
[解决办法]
//输入10个数字按从大到小顺序排序并输出
main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n") ;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++){ //每轮选出最大值,依次放在a[0],a[1],...
p=i;q=a[i]; //p标记最大值下标,默认第i轮最大值为a[i],q存放最大值(其实有p即可)
for (j=i+1;j<10;j++) //遍历还未排序的元素,找出最大值
if(q<a[j]) {p=j;q=a[j];} //遇到比a[p]大的值,修正p
if(i!=p) {s=a[i];a[i]=a[p];a[p]=s;} //最大值不是默认值,a[i]与a[p]交换
printf("%d ",a[i]); } //输出第i个排好序的元素值
}

[解决办法]
样本取小点 模拟下
[解决办法]
C/C++ code
main()   {     int i,j,p,q,s,a[10];  printf("\n input 10 numbers:\n") ;    for(i=0;i<10;i++)      scanf("%d",&a[i]);  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(i!=p)           {s=a[i];a[i]=a[p];a[p]=s;}      printf("%d ",a[i]);   }}
[解决办法]
这是个排序的吧
[解决办法]
显然坑爹..
[解决办法]
貌似是排序,谭浩强的c语言里的例子吧
[解决办法]
C/C++ code
main()   {     int i,j,p,q,s,a[10];  printf("\n input 10 numbers:\n") ;    for(i=0;i<10;i++)  scanf("%d",&a[i]);  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(i!=p) {s=a[i];a[i]=a[p];a[p]=s;}  printf("%d ",a[i]); }}
[解决办法]
C/C++ code

for(i=0;i<10;i++)    {     p=i;     q=a[i];                           for (j=i+1;j<10;j++)          //楼主把它想象成打擂台,,,,q为a[i]的替身。         if(q<a[j])               //如果q打输了,说明它比较小,把大的放在q里继续和剩下的元素打         {                         //      其余的参考楼上的注释吧              p=j;              q=a[j];            }       if(i!=p)        {          s=a[i];          a[i]=a[p];          a[p]=s;       }    printf("%d ",a[i]);   }
[解决办法]
你需要耐心
[解决办法]
的确,很需要耐心,我想了想都不愿意想了,不过,如果要学得好的话,
最后还是得看下去了,呵呵!
[解决办法]

main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n") ;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++) //从a[0]开始比较,直至a[9]
{
p=i; //p用来存放当前最大值的下标,开始时假设a[i]为最大值
q=a[i]; //q存放当前最大值
for (j=i+1;j<10;j++) //从a[i]下一个值开始比较
if(q<a[j])
{
p=j; //如果a[j]大于当前最大值,将其下标j赋值给p,即保证p始终存放当前最大值下标
q=a[j]; //如果a[j]大于当前最大值,将其存入q,即保证q始终存放当前最大值
}
if(i!=p)
{
s=a[i];
a[i]=a[p];
a[p]=s; //如果i!=p,即a[i]不是当前最大值,则交换a[i]与a[p],即使a[i]存放当前最大值
}
printf("%d ",a[i]); //输出最大值
} // 如i<10,i加一继续比较
}
[解决办法]
同意这么做,这样更好看,最好写成标准的:如main改成void main
探讨

整成这样看吧。
C/C++ code

main()
{
int i,j,p,q,s,a[10];
printf("\n input 10 numbers:\n") ;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
p=i;
q=a[i];
for……

读书人网 >C++

热点推荐