我编写了一个程序来输入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];
}
已执行。因此,这会影响最小值和最大值输出。知道为什么会这样吗?
答案 0 :(得分:1)
您声明您的数组只包含2个元素:
int array[2]; /* declares array */
数组需要能够容纳3个元素
int array[3]; /* declares array */
尝试在数组末尾写入会导致未定义的行为。
数组索引起初可能有点令人困惑。
int array[2];
表示两个元素,由于索引从[0]
开始,因此您可以访问的有效索引为[0]
和[1]