#include <stdio.h> int main() { int min = 0; int max = 0; int arr[20]; int i = 0; scanf("%d", &arr[i]); min = max = arr[0]; do { if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; scanf("%d", &arr[++i]); } while (i < 19); if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; printf("max is %d, min is %d", max, min); return 0; }1、数组越界2、找最大最小应该是每个都与最终的最大最小值比较的 如果不考虑特殊的输入值,可以给min和max初始值,代码会简单很多:#include <stdio.h> int main() { int min = 100000000; int max = 0; int arr[20]; int i; for(i = 0; i < 20; ++i) { scanf("%d", &arr[i]); if(arr[i] > max) max = arr[i]; if(arr[i] < min) min = arr[i]; } printf("max is %d, min is %d\n", max, min); return 0; } 再问: 看不怎么懂,根据你得我给你看看我做得 但是 就是 要错。。 再答: 20个数,所以x[5]改成x[20] z=w=x[m]; 这里你的x[0]是未定的数据,不能直接给z,w赋值,因为如果编译器给w的是个很小的负数,那你最后的最小值肯定不对。建议你的z和w都分别初始化为一个极小值和极大值!