用指针实现,输入6个整数,把最小数与第1个数交换,最大数与最后1个数交换,其它数据不动。输入保证最大值和最小值唯一。请编写3个函数:(1)输入6个数;(2)进行处理函数;(2)输出6个数,每个数占3个宽度,左对齐。
运行无结果
求程序纠错
#include <stdio.h>
void inputdata(int *p);
void swapdata(int *p);
void printdata(int *p);
int main(){
int a[6];
inputdata(a);
swapdata(a);
printdata(a);
return 0;
}
void inputdata(int *p)
{ int i=0;
for(i=0;i<6;i++)
scanf("%d ",*p++);
}
void swapdata(int *p)
{ int i,x,d,min=*p,max=*(p+5),k;
for(i=0;i<6;i++)
{
if(min>*(p+i))
{min=*(p+i);x=i;}
if(max<*(p+i))
{ max=*(p+i);d=i;}
}
k=*p;*p=min;*(p+x)=k;
k=*(p+5);*(p+5)=max;*(p+d)=k;
}
void printdata(int *p)
{ int i;
for(i=0;i<6;i++)
printf("%3d",*p++);
}
改动处见注释,供参考:
#include <stdio.h>
void inputdata(int *p);
void swapdata(int *p);
void printdata(int *p);
int main(){
int a[6];
inputdata(a);
swapdata(a);
printdata(a);
return 0;
}
void inputdata(int *p)
{
int i=0;
for(i=0;i<6;i++)
scanf("%d", p++);
//scanf("%d ",*p++);
}
void swapdata(int *p)
{
int i,x=0,d=0,min=*p,max=*p,k;//修改
//int i,x,d,min=*p,max=*(p+5),k;
for(i=0;i<6;i++)
{
if(min>*(p+i))
{min=*(p+i);x=i;}
if(max<*(p+i))
{max=*(p+i);d=i;}
}
k=*p;*p=min;*(p+x)=k;
if(d == 0) d = x; //修改
k=*(p+5);*(p+5)=max;*(p+d)=k;
}
void printdata(int *p)
{
int i;
for(i=0;i<6;i++)
printf("%3d",*p++);
}
scanf里面的参数是指针,不需要加*号符