繁体   English   中英

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

[英]Problem in C : How to properly call function inside main

因此,本学期我必须处理数据结构中的这个项目,并且它要求我必须使用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;
}

因此,如果我们从头开始,则由于您没有声明UPPERLOWER变量或将它们作为参数传递给函数,因此calculateRand()函数存在问题。 交换功能还可以。 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 ,因为int S[n];

如果要填充数组,请填充for循环,如果要填充数组的所有元素,则该位数应为n而不是n-1 但是,如果更改此设置,则需要在BubbleSort()函数中进行类似的更改。

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

  1. sizeof(n)与变量n的值无关。 它是变量n的大小,即现代体系结构中大多数为4个字节。
  2. C的现代变体因此允许可变大小的数组

    int S[n]; 本来是合法的。 除此以外

    int *S = (int *)malloc(n*sizeof(int));

    会有所帮助。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM