设计完整的程序实现以下功能:从键盘上输入3个整数,通过指针运算,找出3个数中的最大值与最小值和它们的地址,并实现最大值与最小值的交换(要求用指针作为函数参数处理)。代码如下:
#include <stdio.h>void Max(int a[], int *max, int *min, int *p1, int *p2);int huan(int a[], int *p1, int *p2);int main () { int a[3] = {0}; scanf("%d%d%d", &a[0], &a[1], &a[2]); int max, min; int p1, p2; Max(a, &max, &min, &p1, &p2); printf("输入的三个数是%d,%d,%d\n", a[0], a[1], a[2]); printf("最大数是%d,最小数是%d\n", max, min); huan(a, &p1, &p2); printf("交换后的三个数是%d,%d,%d", a[0], a[1], a[2]); return 0;}void Max(int a[], int *max, int *min, int *p1, int *p2) { *min = *max = a[0]; int i, b, c; i = 0; while (i < 3) { if (*max < a[i]) { *max = a[i]; b = i; *p1 = b; } if (*min > a[i]) { *min = a[i]; c = i; *p2 = c; } i++; }}int huan(int a[], int *p1, int *p2) { int temp; temp = a[*p1]; a[*p1] = a[*p2]; a[*p2] = temp;}
程序修改如下所示,有问题私聊哈~
#include <stdio.h>
void Max(int *a, int *max, int *min, int *p1, int *p2);
int huan(int *a, int p1, int p2);
int main ()
{
int a[3] = {0};
scanf("%d%d%d", &a[0], &a[1], &a[2]);
int max, min;
int p1=0, p2=0;
Max(a, &max, &min, &p1, &p2);
printf("输入的三个数是%d,%d,%d\n", a[0], a[1], a[2]);
printf("最大数是%d,最小数是%d\n", max, min);
printf("最大数下标%d,最小数的下标是%d\n", p1, p2);
huan(a, p1, p2);
printf("交换后的三个数是%d,%d,%d", a[0], a[1], a[2]);
return 0;
}
void Max(int *a, int *max, int *min, int *p1, int *p2)
{
*min = a[0];
*max = a[0];
int i, b=0, c=0;
i = 0;
while (i < 3)
{
if (*max < a[i])
{
*max = a[i];
b = i;
*p1 = b;
}
if (*min > a[i])
{
*min = a[i];
c = i;
*p2 = c;
}
i++;
}
}
int huan(int *a, int p1, int p2)
{
int temp;
temp = a[p1];
a[p1] = a[p2];
a[p2] = temp;
}