2012-03-06 320 views
0
for (x=1; x<=4; x++){ 
    slope = ((x+1)-(x))/(a[x+1] - a[x]); 
    printf("Slope: %d \n", slope); 
} 

所以,是的。這是一個家庭作業問題。我試圖將數組a = {1, 2, 3, 4}的每個元素與每個其他元素進行比較並找出斜率。 x的值是y的值。這是做的嗎?不應該有16個斜坡?比較陣列的元素彼此

+0

請更正您的問題。你提到'Ys',但在代碼中沒有'Y'。你計算'slope',但打印'v'。不要讓我們猜你是什麼意思。 – 2012-03-06 22:00:07

+0

@SteveFallows - 我試圖找出每個元素對每個其他元素的斜率。我的X值是我的數組值,而我的Y值是我的數組索引 – user1079940 2012-03-06 22:12:19

+0

但是在您的代碼中,您使用x作爲數組索引。並且'(x + 1) - (x)'將始終等於1.所以我仍然很難將您的代碼與您所說的嘗試進行關聯。 – 2012-03-06 22:41:57

回答

3

提示:

C中的數組是從零開始的。您正在從[1]循環到[4],並且應該從[0]循環到[3]。您的代碼將導致數組越界錯誤。

查看嵌套循環。

+4

注意'a [x + 1]'so'x <4'仍然會導致出界。 – hmjd 2012-03-06 21:52:39

+0

不,實際上,它會產生4個斜坡。我認爲我需要16,因爲我比較每個元素與其他元素。 – user1079940 2012-03-06 21:53:57

+0

那麼你說你的數組有4個元素,如果是這樣,那麼循環的第四次迭代將導致訪問[4],並且在4元素數組中沒有[4]。 – 2012-03-06 21:56:12

2

要比較數組中的每個元素與其他元素,需要2個嵌套循環。假設陣列A具有長度n,每個元素比較所有其他元素,如下:

int A[] = {0, 1, 2, 3}; 
unsigned int n=sizeof(A)/sizeof(int); 
int i,j; 
for(i = 0; i < n; i++) 
{ 
    for(j = 0; j < n; j++) 
    { 
    if(i != j) 
     printf("Slope is %d\n",(i-j)/(A[i]-A[j]); 
    } 
} 

輸出:

Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 
Slope is 1 

的原因if(i != j)是因爲你不能計算2之間的斜率相同的點,這發生在i==j

此外,如上所述,陣列是0-indexed,這意味着您應該訪問從A[0]A[n-1]的元素,如上面我的循環所示。

+0

哈哈我試圖給他提示,而不是發佈代碼,因爲這是一個自我承認的家庭作業。 :) – 2012-03-06 21:57:42

+1

@CFL_Jeff - 還有很多工作要做! ;) – prelic 2012-03-06 21:58:42

+0

@prelic那麼,這裏,A [i]其實是我的索引和A [j]我的值? – user1079940 2012-03-06 22:01:46