2015-05-24 31 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是長度或數組。 –