C中的问题:如何正确调用main内部的函数

时间:2019-03-21 15:06:55

标签: c data-structures

因此本学期我必须处理数据结构中的这个项目,并且它要求我必须使用C进行编码。问题是我对C有点生疏,并且正在处理基本问题。问题之一是我必须用C编写一个实现BubbleSort的简单程序。 BubbleSort算法必须是一个单独的函数,并在主程序中调用它。这是我的努力。问题是它没有键入排序后的数组。我希望你能帮助我 。

代码:

int calculateRand()
{
    int num;
    num = (rand())%(UPPER-LOWER+1)+LOWER;
    return num;
}

void swap(int *xp, int *yp)
{
    int temp=*xp;
    *xp=*yp;
    *yp=temp;
}

void BubbleSort(int S[], int n)
{
    int up=n;
    int i,j;

    while(up>1)
    {
        j=0;
        for(i=1; i<up-1; i++)
        {
            if(S[i]>S[i+1])
            {
                swap(&S[i], &S[i+1]);
                j++;
            }
        }
    }
    for(i=0; i<n; i++)
    {
        printf("%d\n", S[i]);
    }

}


int main()
{
    int n,i;
    printf("Parakalw dwste mia timh sto n: \n");
    scanf("%d", &n);

    int S[sizeof(n)];


    printf("O mi taxinomimenos pinakas einai o exis \n");
    for(i=0; i<n-1; i++)
    {
        S[i]=calculateRand();
        printf("%d\n", S[i]);
    }

    printf("O pinakas meta thn taxinomisi einai \n");
    BubbleSort(S[sizeof(n)], n);


    return 0;
}

2 个答案:

答案 0 :(得分:2)

因此,如果我们从头开始,则calculateRand()函数中会有问题,因为您没有声明UPPERLOWER变量,也没有将它们作为参数传递给函数。 交换功能还可以。 在BubbleSort()函数中,您需要在for循环后减小up变量值。

while(up>1)
{
    for(i=1; i<up-1; i++)
    {
        if(S[i]>S[i+1])
        {
            swap(&S[i], &S[i+1]);
            j++;
        }
    }
    up--;
}

这时您还应该从0开始而不是从1开始迭代,因为数组从索引0开始。所以for(i=0; i<up-1; i++)是正确的方法。

最后一次在main()函数中,当您声明数组变量S时,您不应该传递sizeof(n),因为n是一个整数,并且是整数是4。相反,您想使用n的{​​{1}}

如果要填充数组的所有元素,则

用于填充数组的For循环应该上升到int S[n];而不是n。但是,如果您更改此设置,则需要在n-1函数中进行类似的更改。

最后,在BubbleSort()函数调用中,您要传递数组的最后一个元素,该元素是整数,而函数希望您传递一个数组。它应该看起来像这样BubbleSort()

答案 1 :(得分:1)

  1. sizeof(n)与变量n的值无关。它是变量n的大小,即对于现代体系结构而言,通常为4个字节。
  2. C的现代变体允许使用可变大小的数组

    let summaryFuture = client.post(summaryURL) { post in post.http.headers.add(name: "authtoken", value: token) }.flatMap(to: SummaryModel.self) { (response) in return try response.content.decode(SummaryModel.self) } let sponsorEnrollerFuture = client.post(sponsporEnroller) { post in post.http.headers.add(name: "authtoken", value: token) }.flatMap(to: SponsorEnrollerModel.self) { (response) in return try response.content.decode(SponsorEnrollerModel.self) } 本来是合法的。否则

    int S[n];

    会有所帮助。

  3. 调用BubbleSort时,参数应为S而不是S [sizeof(n)];