2010-11-09 57 views
0

我需要设置数组的大小。之后,我开始输入数字来莳制这个数组。在那个过程中,我计算总和以便稍后计算平均值。查找与C中平均值差异最小的元素C

现在我有一个数组和平均值,我需要找到与平均差异最小的元素。

像:
array size = 3
input = 1
input = 2
input = 3

average = 2

计数

abs(1 - 2) = 1
abs(2 - 2) = 0
abs(3 - 2) = 1

所以最低的差异是元素值为2。在程序结束时,我需要从数组及其索引中提取该元素。

到目前为止,我想出了:

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char **argv) 
{ 

    int n = 0, i = 0; 

    double average = 0; 
    int sum = 0; 
    double tmp = 0; 

    double min = 0; 
    int index = 0; 

    int *a; 
    double *b; 

    printf("Amount of elements = "); 
    scanf("%d", &n); 

    if(0 == n) 
    { 
     return 0; 
    } 

    if(n < 1 || n > 10) 
    { 
     return 0; 
    } 

    a = (int*)malloc(sizeof(*a) * n); 
    b = (double*)malloc(sizeof(*b) * n); 

    while(i < n) 
    { 
     printf("Input number: "); 
     scanf("%d", &a[i]); 
     sum += a[i]; 
     i++; 
    } 

    average = (double)(sum/n); 

    printf("Average = %.3lf\n", average); 

    for(i = 0; i < n; i++) 
    { 
     tmp = abs((double)(a[ i ]) - average); 
     b[ i ] = tmp; 
    } 

    /* for(i = 0; i < n; i++) 
    { 

    } */ 

    free(a); 
    free(b); 

    return 0; 

} 

更新:我的道歉。问题是如何实现最后一部分,而不需要将这个简单的程序更复杂化。

谢谢大家的帮助。

+2

所以最低差的最低差和指数的2个变量,你有什么问题吗? – 2010-11-09 16:04:54

回答

2

您需要使用定义为持有类似

min = b[0]; /* initialize min with b[0] */ 
    index = 0; /* and index with 0 */ 
    for(i = 1; i < n; i++) /* loop from 1 onwards ... index 0 was used for initialization */ 
    { 

     /* maybe change min to b[i] */ 
     /* and index to i */ 

    } 

    free(a); 
    free(b); 
+0

但我需要找到最小的差异,而不是最小的价值。例如:for(i = 0; i Eugene 2010-11-09 16:23:26

+0

@Eugene:当你进入这个循环时''b'数组已经存在差异。只需循环遍历数组,检查值(这是不同的!)是否是迄今最低的值并更新变量。 – pmg 2010-11-09 16:32:25

相关问题