【发布时间】:2021-12-14 11:53:39
【问题描述】:
我正在编写一个程序,用户输入数字,程序将找到 MAX 和 MIN 以及这些数字的位置。我想给用户一个选择,让程序使用rand()为他填写数字。
它工作得几乎完美:程序会找到带有位置的 MAX 数字,但是在打印带有位置的 MIN 数字时会出现问题——它总是打印数字 8 和位置 1。
问题出在哪里?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct elementposition {
int min;
int max;
int positionMax;
int positionMin;
} elementposition;
int main() {
struct elementposition minmax;
srand(time(NULL));
int a[500], i;
int c = sizeof(a) / sizeof(a[0]);
char y;
printf("How many numbers you want to enter: ");
scanf("%d", &c);
minmax.positionMax = minmax.positionMin = 0;
printf("Want to fill with random numbers? (Y/N)");
scanf(" %c", &y);
if (y == 'Y' || y == 'y') {
for (i = 0; i < c; i++) {
a[i] = rand() % 10000 + 1;
if (minmax.max < a[i]) {
minmax.max = a[i];
minmax.positionMax = i;
}
if (minmax.min > a[i]) {
minmax.min = a[i];
minmax.positionMin = i;
}
}
for (i = 0; i < c; i++) {
printf("Number #%d: %d\n", i + 1, a[i]);
}
} else {
printf("------------------------------------ \n");
printf("Enter (%d) numbers: \n", c);
scanf("%d", &a[0]);
minmax.max = minmax.min = a[0];
for (i = 1; i < c; i++) {
scanf("%d", &a[i]);
if (minmax.max < a[i]) {
minmax.max = a[i];
minmax.positionMax = i;
}
if (minmax.min > a[i]) {
minmax.min = a[i];
minmax.positionMin = i;
}
}
}
printf("\nMax number is %d, number position %d. \n", minmax.max, minmax.positionMax + 1);
printf("Min number is %d, number position %d. \n", minmax.min, minmax.positionMin + 1);
printf("------------------------------------ \n");
getch();
return 0;
}
【问题讨论】:
-
你初始化
minmax.positionMax和minmax.positionMin。但是你在哪里初始化minmax.max和minmax.min?我建议你在定义minmax时这样做,如struct elementposition minmax = { 0, 0, 0, 0 }; -
如果只需要最小值和最大值,则不需要全部存储。