题目
下面程序的功能是从键盘任意输入n个数,然后找出其中的最大数与最小数,并将其位置对换。
该程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
注意:将修改后的完整的源程序写在答题区内。
对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
当且仅当错误全部改正,且程序运行结果调试正确,才给加5分,
如果只改正了部分错误,则不加分。不能修改函数原型。
改错时不能改变程序原有的意图,不能改变函数原型。
1.改正前
#include#define n = 10; void MaxMinExchang(int *a, int n) { int maxValue = *a, minValue = *a, maxPos, minPos; int i, temp; for (i=0; i maxValue) { maxValue = *a+i; maxPos = i; } if (*a+i < minValue) { minValue = *a+i; minPos = i; } } temp = *a + maxPos; *a + maxPos = *a + minPos; *a + minPos = temp; } main() { int a[n], i, n; printf("Input n(n<=10):\n"); scanf("%d", n) ; printf("Input %d Numbers:\n", n); for (i=0; i
2.改正后
#include #define N 10 void MaxMinExchang(int* a, int n); main() { int a[N], i, n; printf("Input n(n<=10):\n"); scanf("%d", &n); printf("Input %d Numbers:\n", n); for (i = 0; i < n; i++) { scanf("%d", &a[i]); } MaxMinExchang(a, n); printf("After MaxMinExchange:\n"); for (i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n"); } void MaxMinExchang(int* a, int n) { int maxValue = *a, minValue = *a, maxPos = 0, minPos = 0; int i, temp; // printf("hhhh%d\n", *(a + 2)); for (i = 0; i < n ; i++) { if (*(a + i) > maxValue) { maxValue = *(a + i); maxPos = i; // printf("mmmm%d", maxPos); } if (*(a + i) < minValue) { minValue = *(a + i); minPos = i; // printf("nnnn%d", minPos); } } temp = a[maxPos]; a[maxPos] = a[minPos]; a[minPos] = temp; }