当前位置: 代码迷 >> C语言 >> [求助]程序改正问题
  详细解决方案

[求助]程序改正问题

热度:226   发布时间:2006-02-09 09:51:00.0
[求助]程序改正问题
题目要求:编程,对n个输入数按绝对值从小到大排序后输出(运行时先输入n的值,然后用malloc函数为数组动态分配存储单元)。
我编的程序如下:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{float *p,temp;int i,j,n;
scanf("%d",&n);
p=(float *)malloc(n);
for(i=0;i<n;i++)
scanf("%f",&p[i]);
for(i=0;i<n-1;i++)
for(j=i;fabs(p[j])>fabs(p[j+1]);j--)
{ temp=p[j];p[j]=p[j+1];p[j+1]=temp;}
for(i=0;i<n;i++)printf("%f\n",p[i]);
}
出现的问题是:运行后能出现正确的结果,但是停不下来,在关闭结果显示框时无反应,出现一段时间的死机,而后被强制结束。
请问问题出在哪里,能出现正确的结果,但是程序却无法停下来。
哪位朋友帮我解决一下,非常感谢。
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{float *p,temp;int i,j,n;
scanf("%d",&n);
p=(float *)malloc(n);
for(i=0;i<n;i++)
{scanf("%f",&temp);p[i]=temp;}
for(i=0;i<n-1;i++)
for(j=i;fabs(p[j])>fabs(p[j+1]);j--)
{ temp=p[j];p[j]=p[j+1];p[j+1]=temp;}
for(i=0;i<n;i++)printf("%f\n",p[i]);
getch();
}
----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main()
{
float *p,temp;int i,j,n;
scanf("%d",&n);
p=(float *)malloc(n*sizeof(float));
if(!p)
{
printf("malloc fail!!");
return;
}

for(i=0;i<n;i++)
scanf("%f",&p[i]);

for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(fabs(p[j])>fabs(p[j+1]))
{
temp=p[j];p[j]=p[j+1];p[j+1]=temp;
}
}
}
for(i=0;i<n;i++)
printf("%f\n",p[i]);
free(p);
}


----------------解决方案--------------------------------------------------------
  相关解决方案