关于c语言中冒泡排序的一个小问题。

#include"stdio.h"

#define N 10

 int main()

 {

  float a[N]={1.78,1.77,1.82,1.79,1.85,1.75,1.86,1.77,1.81,1.80};

  int i,j;

  for(i=N-1;i>=0;i--)

  {

  for(j=0;j<i;j++) //如果在该行for语句中的j<i改为j<=i,则输出的数全变成0.0了。 请问为什么呢 ?

  {                        //和自身比较的话不就连if的条件都没满足吗,那就相当于没有执行if里面的语句,为什么

  if(a[j]>a[j+1]) //会出现这样的情况呢?

  {

  a[i]+=a[j];

  a[j]=a[i]-a[j];

  a[i]-=a[j];

     }

}

  }

  for(i=0;i<N;i++)

  {

  printf("%6.2f",a[i]);

  }

  putchar('\n');

  return 0;


慕粉1600176492
浏览 1587回答 3
3回答

望远

a[i]+=a[j];   a[j]=a[i]-a[j];   a[i]-=a[j];这是你交换两个数据的代码块,就是因为这种加减运算的方法所以当j==i时数组元素全是0,你可以自己推一推。 temp=a[j];   a[j]=a[i];   a[i]=temp;改成这样就行了。
打开App,查看更多内容
随时随地看视频慕课网APP