c语言 在线等

来源:百度知道 编辑:UC知道 时间:2024/09/21 22:34:57
#include "stdio.h"
#include "stdlib.h"
void main()
{float *p,t,m;
int i,j,n;
printf("请输入n:\n");
scanf("%d",&n);
p=(float *)malloc((n+1)*sizeof(float));
printf("请输入数组:\n");
for(i=0;i<n;i++)
scanf("%f",p+i);
for(i=1;i<n;i++)
{j=i-1,t=*(p+i);
while(*(p+j)<t&&j>=0)
{*(p+j+1)=*(p+j),j--;}
*(p+j+i)=t;
}
printf("请输入插入的数:\n");
scanf("%f",&m);
i=n;
while(*(p+i)<m&&i>=0)
{*(p+i+1)=*(p+i),i--;}
*(p+i+1)=m;
for(i=0;i<n+1;i++)
printf("%f ",*(p+i));
free((void *)p);
}
编译没问题,可运行就出错

排序算法错了,不如上网找个冒泡排序直接套用下

倒数第8行,i=n错了,应该是i=n-1;因为你后面循环中第一句是p+i+1,如果是i=n的话就越界了

是不是软件的问题啊,你从新开一下看看。

为什么可以编译的?两句语句之间用逗号分开,应该不可以编译的阿

下面是我的程序,把逗号删掉,注释是修改过的。
#include <stdio.h>
#include <stdlib.h>

void main()
{
float *p,t,m;
int i,j,n;
printf("input n:\n");
scanf("%d",&n);
p=(float *)malloc((n+1)*sizeof(float));
printf("input:\n");
for(i=0;i<n;i++)
scanf("%f",p+i);
for(i=1;i<n;i++)
{
j=i-1;
t=*(p+i);
while(*(p+j)<t&&j>=0)
{
*(p+j+1)=*(p+j);
j--;
}
*(p+j+1)=t; // 把原来的i改为1
}
printf("insert:\n");
scanf("%f",&m);

i=n-1;
while(*(p+i)<m&&i>=0)
{
*(p+i+1)=*(p+i);
i--;
}
*(p+i+1)=m;
for(i=0;i<n+1;i++)
printf("%f ",*(p+i));
free(p);
}

#include &l