0

我有一个整数数组,我试图找出哪一个是最高的,并将一个新的整数设置为最高的值。我对C很陌生,我真的刚开始学习它。

我正在做的事情可能存在某种逻辑问题,但我还没有发现它。所以...

int my_array[4];
int highest_int = 0;
int i;

for (i = 0; i < 4; i++) {
    if (my_array[i] > my_array[i++]) {
        if (my_array[i] > highest_int) {
            highest_int = my_array[i];
        }
    }
    else {
        if (my_array[i++] > highest_int) {
            highest_int = my_array[i++]
        }
    }
}

所以我循环遍历我的数组 4 次(4 个元素),然后查看迭代值和下一个迭代值,如果迭代值最高,我检查它是否也高于当前“最高整数”的当前值,如果是我将当前最高整数设置为新的最高值。如果迭代值之后的值更高,我会做同样的事情,但用那个值代替。

这就是我写这篇文章时的想法,但是当我输入 4 个值时,它总是会出现数组中的第 3 个值。无论我将这些值设置为什么。

谁能告诉我为什么?

非常感谢。

4

3 回答 3

6

为什么你i在循环内递增?为什么需要 else 部分?

这是一个简单的方法:

int my_array[4];
int highest_int = my_array[0];
int i;

for (i = 1; i < 4; i++) {
        if (my_array[i] > highest_int) {
            highest_int = my_array[i];
        }
    }
于 2012-10-31T20:14:19.710 回答
3

你让这种方式变得比实际更复杂:) 此外,你写i++的地方太多了;每次i++执行时,您都会跳过一个数组条目,这可能不是您想要的。

此外,无需与之前的值进行比较。只需与您迄今为止看到的最高值进行比较即可。

这是一个固定版本,只是删除代码,没有任何改变或添加:

int my_array[4];
int highest_int = 0;
int i;

for (i = 0; i < 4; i++) {
    if (my_array[i] > highest_int) {
        highest_int = my_array[i];
    }
}

请注意,如果数组中的所有数字都是负数,这会错误地报告 0。如果highest_int = INT_MIN您需要正确处理这些问题,或者使用unsigned int.

于 2012-10-31T20:15:15.627 回答
2

如果您试图找到最大的数字,这里是代码:

int my_array[4];
int highest_int = my_array[0]; 
//Before entering the loop, assuming the first number to  highest
int i;

for (i = 1; i < 4; i++) {
    if (my_array[i] > highest_int) {  //Compare every number with highest number
        highest_int = my_array[i];
    }  
}

//Now we have the highest number
printf("Highest Number: %d",highest_int);
于 2012-10-31T20:16:21.940 回答