找到最小值时数组的最后一个元素发生变化

Posted

技术标签:

【中文标题】找到最小值时数组的最后一个元素发生变化【英文标题】:Last element of array changes when finding minimum 【发布时间】:2018-08-25 02:08:31 【问题描述】:

我写了一个程序,输入3个整数,求均值、最大值和最小值:

#include <stdio.h>

int main(void) 
    int array[2];   /* declares array */
    int min = 99;
    int max = -99;
    float mean;
    int i;

    printf( "Please enter three numbers seperated by spaces: " );
    scanf( "%d %d %d", &array[0], &array[1], &array[2] );

    mean = ( array[0] + array[1] + array[2] ) / 3; /* calculates mean */

    for( i = 0; i < 3; i++ ) 
        /* displays array elements at the start of each loop */
        printf ( " i = %d begin \t %d %d %d \n", i, array[0], array[1], array[2]); 

        /* finding the maximim */
        if ( array[i] > max ) 
            max = array[i];
        

        /* displays array elements in the middle of each loop */
        printf ( " i = %d mid \t %d %d %d \n", i, array[0], array[1], array[2]);

        /* finding the minimum */
        if ( array[i] < min ) 
            min = array[i];
        

        /* displays array elements at the end of each loop */
        printf ( " i = %d end \t %d %d %d \n", i, array[0], array[1], array[2]);
    

    printf( " final =  %d %d %d \n", array[0], array[1], array[2] );
    printf(" min =  %d \t max = %d \t mean = %.1f \n",  min, max, mean );

    return 0;

我已经编写了它,以便在循环的每次迭代的开始和结束时显示数组元素。

这是我得到的输出:

Please enter three numbers seperated by spaces: 5 6 7
 i = 0 begin     5 6 7
 i = 0 mid       5 6 7
 i = 0 end       5 6 5
 i = 1 begin     5 6 5
 i = 1 mid       5 6 5
 i = 1 end       5 6 5
 i = 2 begin     5 6 5
 i = 2 mid       5 6 5
 i = 2 end       5 6 5
 final =  5 6 5
 min =  5        max = 6         mean = 6.0

注意数组的最后一个元素在什么时候改变

/* finding the minimum */
if ( array[i] < min ) 
    min = array[i];

被执行。因此,这会影响最小值和最大值输出。知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

你声明你的数组只包含 2 个元素:

int array[2];   /* declares array */

数组需要能够容纳 3 个元素

int array[3];   /* declares array */

试图写到数组的末尾会导致未定义的行为。

数组索引一开始可能会有点混乱。

int array[2];

表示两个元素,由于索引从 [0] 开始,您可以访问的有效索引是 [0][1]

【讨论】:

以上是关于找到最小值时数组的最后一个元素发生变化的主要内容,如果未能解决你的问题,请参考以下文章

请从键盘输入10个数据 ,每轮循环找到数组中最小的那个删除,数组最后只剩一个?

159. 寻找旋转排序数组中的最小值

java数组算法例题(冒泡排序,选择排序,找最大值最小值,添加删除元素等)

java数组算法例题(冒泡排序,选择排序,找最大值最小值,添加删除元素等)

Mathematica 中 Minimize函数无法找到全局最小值时的解决方法

在不同条件之间查找最小值时遇到麻烦