碧海潮声大学生网

标题: 〖求助〗哪位高手帮我看看我这个程序错在哪啊? [打印本页]

作者: 夕阳玻璃    时间: 2006-2-28 10:43
标题: 〖求助〗哪位高手帮我看看我这个程序错在哪啊?
一维数组的比较法排序

#include<stdio.h>
main()
{
int k,i,j,t,a[100];
  printf("put in data\n");
  for(i=0;  ;i++)
  {
   scanf("%d",&a);
   if(a<0)break;
   }
   for(j=0;j<i-1;j++)
     {
      for(k=j;k<i-1;k++)
       {if(a[k]<a[k+1])
        {
         t=a[k];
         a[k]=a[k+1];
         a[k+1]=t;
         }
       a[j]=a[i-1];
       }
      }
  for(j=0;j<i;j++)
  printf("%4d",a[j]);
  getch();
}
作者: 夕阳玻璃    时间: 2006-2-28 14:02
谁帮帮我啊?
作者: feelingai    时间: 2006-2-28 14:52
貌似LZ是用冒泡法...

把小的数放前...
作者: feelingai    时间: 2006-2-28 14:52
#include<stdio.h>
main()
{
int k,i,j,t,a[100];
printf("put in data\n");
for(i=0; ;i++)
  {
  scanf("%d",&a);
  if(a<0)break;
  }
  for(j=0;j<i-1;j++)
   {
   for(k=j;k<i-1;k++)
    {if(a[k]<a[k+1])
      {
      t=a[k];
      a[k]=a[k+1];
      a[k+1]=t;
      }
    a[j]=a[i-1];
    }
   }
for(j=0;j<i;j++)
printf("%4d",a[j]);
getch();
}

看不懂这句是什么意思...
作者: feelingai    时间: 2006-2-28 14:56
建议LZ写程序多用注释...

虽然很短....
作者: 墙角野猫    时间: 2006-2-28 17:13

#include
main()
{
int k,i,j,t,a[100];
printf("put in data\n");
for(i=0; ;i++)
{
scanf("%d",&a);
if(a<0)break; /*a是数组名,是指针*/
}
for(j=0;j {
for(k=j;k {if(a[k] {
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
/* a[j]=a[i-1]; */
}
}
for(j=0;jprintf("%4d",a[j]);
getch();
}


作者: 墙角野猫    时间: 2006-2-28 17:36
还是有问题!
作者: 墙角野猫    时间: 2006-2-28 17:44
#include
main()
{
int k,i,j,t,a[100];
printf("put in data\n");
for(i=0; ;i++)
{
scanf("%d",&a);
if(a<0)break; /*a是数组名,是指针*/
}
for(j=0;j {
for(k=0;k/*第二次循环从0开始,不是从j开始,j是变量会变化*/
{if(a[k] {
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
/* a[j]=a[i-1]; */
}
}
for(j=0;jprintf("%4d",a[j]);
getch();
}

作者: 色恩    时间: 2006-2-28 17:46
明显是乱码…
作者: 墙角野猫    时间: 2006-2-28 17:52
没大问题了,WIN-TC编译通过,
put in data
5(Enter)
3(Enter)
6(Enter)
8(Enter)
4(Enter)
9(Enter)
-1(Enter)
  9  8  6  5  4  3
作者: 墙角野猫    时间: 2006-2-28 17:57

实际上第二次循环不需要那么多次

#include
main()
{
int k,i,j,t,a[100];
printf("put in data\n");
for(i=0; ;i++)
{
scanf("%d",&a);
if(a<0)break;
}
for(j=0;j {
for(k=0;k<i-1-j;k++)
if(a[k] {
t=a[k];
a[k]=a[k+1];
a[k+1]=t;
}
}
for(j=0;jprintf("%4d",a[j]);
getch();
}


作者: 墙角野猫    时间: 2006-2-28 17:59
还有用a<0来作判断条件并不好
作者: 夕阳玻璃    时间: 2006-3-1 18:18
#include<stdio.h>
main()
{
int k,i,j,t,a[100],d;
  printf("put in data\n");
  for(i=0;;i++)
  {
   scanf("%d",&a);
   if(a<0)break;
   }
   for(d=0;d<=i-1;d++)
   printf("%4d",a[d]);
   printf("\n");

   for(j=0;j<i-1;j++)
     {
      for(k=j;k<i-1;k++)
       {if(a[k]>a[k+1])
        {
         t=a[k];
         a[k]=a[k+1];
         a[k+1]=t;
        }
       }
        t=a[j];
        a[j]=a[i-1];
        a[i-1]=t;

      }
  for(j=0;j<i;j++)
  printf("%4d",a[j]);
  getch();
}

这是我刚改的,虽然结果正确,但老师要求比较法,这个是不是啊?
作者: stass    时间: 2006-3-1 18:57
好像没毛病了,以后多交流啊
作者: 墙角野猫    时间: 2006-3-1 22:51
比较法是怎么样的?
这个应该是冒泡法吧
作者: 墙角野猫    时间: 2006-3-1 22:54
标题: z

请务必把回复页面左侧的


Wind Code自动转换


关掉,不然会被自动转换掉,成了斜体标志






欢迎光临 碧海潮声大学生网 (http://www.zjoubbs.com/) Powered by Discuz! X3.2