[英]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;
}
因此,如果我们从头开始,则由于您没有声明UPPER
和LOWER
变量或将它们作为参数传递给函数,因此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);
代替。
C的现代变体因此允许可变大小的数组
int S[n];
本来是合法的。 除此以外
int *S = (int *)malloc(n*sizeof(int));
会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.