我真的是编程新手。我试图制作一个程序,将使用两个函数对数组进行排序,但我无法使其正常工作,我不知道自己做错了什么。
#include <stdio.h>
#include <stdlib.h>
int sort();
int sp();
int x;
int main()
{
int v[20],k;
scanf("%d",&x);
for (k=1;k<=x;k++)
scanf("%d",&v[k]);
sort(&v[20]);
for (k=1;k<=x;k++)
printf("%d",v[k]);
return 0;
}
int sort (int *a[20])
{
int i,j;
for (i=1;i<=x;i++)
for (j=1;j<=x;j++)
{if(*a[j]>*a[j+1])
sp(&a[j],&a[j+1]);
}
}
int sp(int *l, int *m)
{
int n=*l;
*l=*m;
*m=n;
}
我测试了交换部分,该部分可以工作(sp函数),但是我不知道如何在函数中使用数组。
当我测试程序时,没有输出,程序只是停止。
答案 0 :(得分:1)
已发布代码中的问题:
[0]
至[19]
索引20个元素的数组。 int foo();
声明一个名为foo
的函数,该函数返回int
并接受任意列表。因此,foo()
,foo(1)
,foo(1,2,3)
,foo("grandma's house", 3.14)
都是兼容的。您的函数声明应精确成为您所期望的原型。在这种情况下,void sort(int a[], int len);
int *a[]
,它等效于int **a
)。这些问题以及更多其他问题,将在下面解决:
#include <stdio.h>
#include <stdlib.h>
void sort(int a[], int len);
void sp(int *l, int *m);
int main()
{
int x, v[20];
if (scanf("%d", &x) == 1 && x > 0 && x <= 20)
{
for (int i = 0; i < x;)
{
// prompt for input
printf("a[%d] :", i);
fflush(stdout);
// try to read next element
if (scanf("%d", v + i) != 1)
{
// failed to read. clear stdin through newline
int c;
do {
c = fgetc(stdin);
} while (c != EOF && c != '\n');
// if we actually hit EOF, stop reading and
// reset x to however many items we read well.
if (c == EOF)
{
x = i;
break;
}
continue;
}
// read successful, move to next element
++i;
}
for (int i = 0; i < x; ++i)
printf("%d ", v[i]);
fputc('\n', stdout);
sort(v, x);
for (int i = 0; i < x; ++i)
printf("%d ", v[i]);
fputc('\n', stdout);
}
return 0;
}
void sort(int a[], int len)
{
if (len <= 1)
return;
int swapped = 1;
while (swapped && len-- > 0)
{
swapped = 0;
for (int i = 0; i < len; ++i)
{
if (a[i + 1] < a[i])
{
sp(a + i, a + i + 1);
swapped = 1;
}
}
}
}
void sp(int *l, int *m)
{
int n = *l;
*l = *m;
*m = n;
}