2016-09-23 60 views
1

我正在練習我的C技能,試圖通過使用名爲Bubbleswap的創建函數來按升序重新排列數組元素的程序。填充我使用隨機數生成器的數組。需要幫助來解決功能問題

當我使用下面的代碼時,我會得到消息Bubblesort函數缺少一個返回值,而它不應該需要一個。我認爲使用bubbleswap函數的請求無法正常工作。

//Opgave bubblesort functie 

#include "toolbox.h" 
#include <ansi_c.h> 
#include <stdio.h> 
#include <time.h> 

// functies // 
double bubblesort (double arrayA[], int n) 
{ 
int a,b,swap; 

    for (a =0;a<(n - 1);a++) 
    { 
     for (b=0;b<(n - a - 1);b++) 
     { 
      if(arrayA[b]>arrayA[b+1]) // for decreasing order use < 
      { 
       swap = arrayA[b]; 
       arrayA[b]= arrayA[b+1]; 
       arrayA[b+1]=swap; 
      } 
     } 
    } 
} 

// main script //  

int main()          
{ 
    int aantal,i;         //variables 
    double arrayA[1000],arrayB[1000] ; 
    float r; 

    srand(time(NULL));        // to start the random seeds 

    printf(" Typ het aantal getallen in. \n");  //request the elements 
    scanf("%d", &aantal); 

    for(i=0; i<aantal;i++)       // fill the array with random numbers 
    { 
     arrayA[i]=rand(); 
    } 

    printf("Getallen in volgorde \n");  //re-arrange the numbers with the help of bubblesort 
    for (i=0; i<aantal;i++) 
    { 
     r = bubblesort(arrayA, aantal);  //request the function bubblesort //r =arrayA[i]; 
     printf("%.0f \n", r); 
    } 

    getchar(); 
    getchar(); 
} 

回答

1

如果我理解正確的,由於您的評論//r =arrayA[i];,來實現這一目標,你可以改變:

r = bubblesort(arrayA, aantal,i); 

和:

double bubblesort (double arrayA[], int n,int i) 
    { 
    int a,b,swap; 

     for (a =0;a<(n - 1);a++) 
     { 
      for (b=0;b<(n - a - 1);b++) 
      { 
       if(arrayA[b]>arrayA[b+1]) // for decreasing order use < 
       { 
        swap = arrayA[b]; 
        arrayA[b]= arrayA[b+1]; 
        arrayA[b+1]=swap; 
       } 
      } 
     } 
     return arrayA[i]; 
    } 
1

函數的簽名如下

double bubblesort(double arrayA[], int n) 

       ^
        arguments 
     ^
     function name 
^
return value 

那麼就表示bubblesort返回double類型的值,但在你的代碼中沒有return聲明。

有些情況下,這可能會發生兩種情況:

  • 你真的打算函數返回一個值,但你忘了還(或一些代碼路徑不會返回)
  • 你選擇了功能

在這種情況下,像bubblesort函數不應該返回任何一個錯誤的返回類型,因爲它的規範,所以你應該改變doublevoid明確說明這一點。

但在該行

r = bubblesort(arrayA, aantal);  //request the function bubblesort //r =arrayA[i]; 
printf("%.0f \n", r); 

您存儲功能冒泡的返回值。 所以當更改返回值類型時,還必須刪除這兩行。

+0

謝謝大家,我現在明白= d – user246813

1

你聲明的功能

double bubblesort (double arrayA[], int n) 

所以編譯器期望返回值。如果你不需要它,那就不要用這種方式來聲明函數。

1

您需要使用bubblesort函數對數組進行排序,對吧?那麼你不必從函數中返回任何東西。因爲通過將數組發送給函數,您可以發送它們的引用,並且數組的元素將按排序順序進行設置。但是如果你想從函數中返回任何東西(比如你寫到你會從數組中返回一個double值),你必須返回一個該數據類型的值。但你沒有這樣做。這就是程序編譯不正確的原因。