2012-03-06 166 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