2015-05-24 33 views
-2

使用函数insert从数组中写入一个应该从用户获得5个浮点值的程序,然后使用函数sort对这些值进行排序,然后使用功能显示。打印排序的浮点数组时出错

这是我的代码,请告诉我我在哪里做了错事。排序后打印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]); 
    } 
} 
+0

为什么排序循环在0和5之间? – Tarik

+1

disp函数中val参数的用法是什么? – Tarik

回答

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个比较。

+0

感谢它的工作 –

0

首先,你声明一些变量,你没有使用,在功能特别int val。其次,你不需要实现一个函数来在数组中插入值,只需要直接用scanf来循环。

+0

其实我们正在学习函数,所以我们的教授要求我们使用单独的函数来获得更多的习惯。 int val是长度或数组。 –