改错题
1、题目:通过键盘输入10个整数为一个维数组各个元素赋值;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出调整后的数组元素。
#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{
int a[10];
input(a,10);
max_min(a,10);
output(a,10);
return 0;
}
void input(int *arr,int n)
{
int *p,i;
p=arr;
printf("please enter 10 integers:\n");
for(i=0;i<n;i++)
scanf("%d",&p++);
}
void max_min(int *arr,int n)
{
int *min,*max,*p;//分别为最小值、最大值、数组任一项的地址索引
int t;
min=max=arr;
for(p=arr+1;p<arr+n;p++)
if(*p>*max)
*max=*p;
else if(*p<*min) min=p;
t=*arr;*arr=*min;*min=t;
if(max=arr)
max=min;
t=*(arr+n-1);*(arr+n-1)=*max;*max=t;
}
void output(int *arr,int n)
{
int *p,i;
p=arr;
printf("The changed array is:\n");
for(i=0;i<n;i++)
printf("%3d",p++);
printf("\n");
}
去掉scanf中p++前面的&
min=max=*arr
供参考:
#include<stdio.h>
void input(int *arr,int n);
void max_min(int *arr,int n);
void output(int *arr,int n);
int main()
{
int a[10];
input(a,10);
max_min(a,10);
output(a,10);
return 0;
}
void input(int *arr,int n)
{
int *p,i;
p=arr;
printf("please enter 10 integers:\n");
for(i=0;i<n;i++)
scanf("%d",p++);
}
void max_min(int *arr,int n)
{
int *min,*max,*p;//分别为最小值、最大值、数组任一项的地址索引
int t;
min=max=arr;
for(p=arr+1;p<arr+n;p++)
if(*p>*max) max=p;
else if(*p<*min)min=p;
t=*arr;*arr=*min;*min=t;
if(max==arr) max=min;
t=*(arr+n-1);*(arr+n-1)=*max;*max=t;
}
void output(int *arr,int n)
{
int *p,i;
p=arr;
printf("The changed array is:\n");
for(i=0;i<n;i++)
printf("%3d",*p++);
printf("\n");
}