需要帮助来解决功能问题

时间:2016-09-23 12:54:04

标签: c sorting

我通过使用名为Bubbleswap的创建函数编写程序来重新排列数组元素,从而练习我的C技能。为了填充数组,我使用了随机数生成器。

当我使用下面的代码时,我会得到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();
}

4 个答案:

答案 0 :(得分:1)

该功能的签名如下

double bubblesort(double arrayA[], int n)

                   ^
                  arguments
         ^
        function name
  ^
 return value

因此,您声明bubblesort返回double类型的值,但代码中没有return语句。

有两种情况可能会发生这种情况:

  • 你真的希望函数返回一个值,但你忘了返回它(或者某些代码路径没有返回它)
  • 您为函数选择了错误的返回类型

在这种情况下,bubblesort这样的函数在给定其规范时不应返回任何内容,因此您应将double更改为void以明确说明此内容。

但是在行

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

存储函数bubblesort的返回值。 因此,在更改返回值类型时,您还必须删除这两行。

答案 1 :(得分:1)

您将该函数声明为

double bubblesort (double arrayA[], int n)

因此编译器需要返回值。如果你不需要,那么不要那样声明这个函数。

答案 2 :(得分:1)

您需要使用spark-submit \ --class Hello \ --master spark://master:7077 \ --num-executors 6 \ --conf spark.executor.extraJavaOptions="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedOops" \ first.jar 函数对数组进行排序,对吗?然后你不必从函数返回任何东西。因为通过将数组发送到函数,您可以发送它们的引用,并且将按排序顺序设置数组的元素。但是如果你想从函数中返回任何东西(就像你写的那样你将从数组中返回一个double值),你必须返回该数据类型的值。但你没有这样做。这就是程序没有正确编译的原因。

答案 3 :(得分: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];
    }