打印已排序的浮点数组时出错

时间:2015-05-24 14:34:12

标签: c sorting

  

编写一个程序,该程序应该使用函数insert从数组中的用户获取5个浮点值,然后使用函数sort对这些值进行排序,然后使用函数disp在屏幕上打印排序值。

这是我的代码,请告诉我我做错了什么。排序后打印0.000。

#include <stdio.h>

void insert(float array[],int val);
void disp(float array[],int val);
void sort(float array[], int val);

void main ()
{
    float array[5],j;

    printf("Enter numbers: \n");
    insert(array,5);                 //array input function
    printf("Enter numbers are: \n");
    disp(array,5);                   //array output function
    sort(array,5);                   //array sort function
    printf("\nSorted Array is: \n");
    disp(array,5);                   //array output function
}

//array input function
void insert(float array[],int val)
{
    int k,i;
    for (k = 0;k<5;k++){
        scanf("%f",&array[k]);
    }
}

//array sort function
void sort(float array[], int val){
    int i,j;
    float hold;
    for(i=0; i<6; i++)
    {
        for(j=0; j<6; j++)
        {
            if(array[j]>array[j+1])
            {
                hold=array[j];
                array[j]=array[j+1];
                array[j+1]=hold;
            }
        }
    }
}

//array display function
void disp(float array[],int val)
{
    int k;
    for (k = 0;k<5;k++){
        printf("%f\n",array[k]);
    }
}

2 个答案:

答案 0 :(得分:1)

排序功能应如下所示:

//array sort function
void sort(float array[], int val)
{
  int i,j;
  float hold;
  for(i=0; i<4; i++)
  {
    for(j=0; j<4; j++)
    {
      if(array[j]>array[j+1])
      {
        hold=array[j];
        array[j]=array[j+1];
        array[j+1]=hold;
      }
    }
  }
}

在原始代码中,第一个循环执行两次太多。 第二个循环导致读数超出数组。由于你有5个元素,你需要进行4次比较。

答案 1 :(得分:0)

首先,您声明了一些您​​没有使用的变量,尤其是函数中的int val。 其次,您不需要实现一个函数来在数组中插入值,只需直接用scanf循环它。