0
我必須編寫一個程序,其中向量按從小到大排序。我使用帶交換的泡泡函數交換兩個向量。交換和氣泡代碼給出了,但問題是它不交換向量。賦值語句表示使用這個交換函數,並用向量的地址「調用它」。在C中交換兩個向量
void swap (double **p, double **q)
{
double *temp;
temp=*p;
*p=*q;
*q=temp;
}
int main (void)
{
int dim, num;
int i, j;
double **w, a[100];
double size;
scanf ("%d %d", &dim, &num); /* read N and M */
w = calloc (num, sizeof (double *)); /* allocate array of M pointers */
for (i = 0; i < num; i++)
{
/* allocate space for N dimensional vector */
w[i] = calloc (dim, sizeof (double));
/* read the vector */
for (j = 0; j < dim; j++)
{
scanf ("%le", &w[i][j]);
}
}
/*Length*/
for(i=0; i<num; ++i)
{
size=0.0;
for(j=0; j<dim; ++j)
{
size+=pow(w[i][j],2);
}
a[i]=sqrt(size);
}
i=0;
for (j = num - 1; j > i; --j)
{
if (a[j-1] > a[j])
{
swap(&w[j-1], &w[j]);
}
i++;
}
return 0;
}
你忘了問一個問題輸入一個值。 – 2015-04-03 15:50:40
我認爲問題在於,當您交換兩個向量時,您不會交換'a'中的值,並且之後'a'與'w'中的值不正確對應。 – IronMensan 2015-04-03 15:50:57
謝謝! – 2015-04-03 17:18:08