2016-09-23 59 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值),你必须返回一个该数据类型的值。但你没有这样做。这就是程序编译不正确的原因。