2016-11-12 44 views
-1
#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

void change(int *v[]) { 
int tmp; 
for (int i = 0; i < 10; i++) { 
    for (int j = i + 1; j< 10; j++) 
     if (*v[i] > *v[j]) { 
      tmp = *v[i]; 
      *v[i] = *v[j]; 
      *v[j] = tmp; 
     } 
} 

} 


void main() { 
int v[10]; 
for (int i = 0; i < 10; i++) { 
    printf("Enter the value for v[%d]: \n", i); 
    scanf("%d", &v[i]); 
} 
printf("The vector is: \n"); 
for (int i = 0; i < 10; i++) 
    printf("Value on the position %d is %d \n", i, v[i]); 

change(&v[]);       // I think here is the problem 



printf("\n\n After function call, the vector is: \n"); 
for (int i = 0; i < 10; i++) 
    printf("Value on the position %d is %d \n", i, v[i]); 

getch(); 
} 

我需要排版一個向量,但我不知道如何將向量的值傳遞給一個函數。有人可以幫助我解決這個問題,並解釋我並讓我明白,這很重要。感謝你們 !在c中訂購一個向量

+2

推薦閱讀任何C書或文本。有關函數,數組和指針以及如何傳遞它們的信息,請參閱部分。這比任何在這裏回答的人都更容易理解。這不應該花費太多時間。 – phoxis

+0

您是否嘗試更改該行(您認爲該概率爲: 更改(v); 或更改(&v) –

+0

C沒有「向量」,您的意思是_arrays_! – Olaf

回答

0
#include <stdio.h> 
#include <conio.h> 
#include <string.h> 

void change(int *v[]) { 
int *tmp; 
for (int i = 0; i < 10; i++) { 
    for (int j = i + 1; j< 10; j++) 
     if (v[i] > v[j]) { 
      tmp = v[i]; 
      v[i] = v[j]; 
      v[j] = tmp; 
     } 
} 

} 


void main() { 
int *v[10]; 
for (int i = 0; i < 10; i++) { 
    printf("Enter the value for v[%d]: \n", i); 
    scanf("%d", &v[i]); 
} 
printf("The vector is: \n"); 
for (int i = 0; i < 10; i++) 
    printf("Value on the position %d is %d \n", i, v[i]); 

     change(v);        



    printf("\n\n After function call, the vector is: \n"); 
    for (int i = 0; i < 10; i++) 
    printf("Value on the position %d is %d \n", i, v[i]); 

_getch(); 
} 

我解決!謝謝你。這是代碼,如果有人對 感興趣

0

函數必須聲明如下

void change(int v[]) { 
      ^^^^^^ 

,並呼籲像

changes(v); 

至於導致你必須改變這些語句

if (*v[i] > *v[j]) { 
     tmp = *v[i]; 
     *v[i] = *v[j]; 
     *v[j] = tmp; 

if (v[i] > v[j]) { 
     tmp = v[i]; 
     v[i] = v[j]; 
     v[j] = tmp; 

功能可以像

void change(int v[]) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
     for (int j = i + 1; j< 10; j++) 
     { 
      if (v[i] > v[j]) 
      { 
       int tmp = v[i]; 
       v[i] = v[j]; 
       v[j] = tmp; 
      } 
     }   
    } 
} 

要考慮到它會更好,如果該函數可以處理不同大小的陣列。在這種情況下,它必須有第二個參數來指定數組中元素的數量。例如

void change(int v[], size_t n) 
{ 
    for (size_t i = 0; i < n; i++) 
    { 
     for (size_t j = i + 1; j < n; j++) 
     { 
      if (v[i] > v[j]) 
      { 
       int tmp = v[i]; 
       v[i] = v[j]; 
       v[j] = tmp; 
      } 
     }   
    } 
} 

和函數可以被稱爲像

change(v, 10); 
+0

無法正常工作。需要指針 –

+0

我需要更改向量的值,而不僅僅是打印值ordonate –

+0

@FilipLaurentiu查看我的更新回答。您的氣泡排序實施不正確。 –