3,输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1)输入10个数;2)进行处理;3)输出10个数。
用指针方法处理
楼主的代码
#include<stdio.h>
int *p,s[10],*p1;
void input(int *p)
{int i=0;
printf("please input 10 numbers:\n");
for(i=0;i<10;i++)
{scanf("%d",&s[i]);
}
}
void process(int *p)
{int i,min,max,temp,m,n;
min=s[0];
for(i=1;i<10;i++)
{if(min>s[i])
{min=s[i];
m=i;
}
}
max=s[0];
for(i=1;i<10;i++)
{if(max<s[i])
{max=s[i];
n=i;
}
}
temp=s[0];
s[0]=s[m];
s[m]=temp;
temp=s[9];
s[9]=s[n];
s[n]=temp;;
}
void output(int *p)
{int i;
for(i=0;i<10;i++)
{printf(" %d",s[i]);
}
}
int main()
{
p1=s;
p=p1;
input(p);
p=p1;
process(p);
p=p1;
output(p);
return 0;
}
运行结果
答案的方法
#include<stdio.h>
int main()
{void input (int *);
void max_min_value(int *);
void output(int *);
int number[10];
input(number); //调用输入10个数的函数
max_min_value(number); //调用交换函数
output(number); //调用输出函数
return 0;
}
void input (int*number) //输入10个数的函数
{int i;
printf("input 10 numbers:");
for(i=0;i<10;i++)
{scanf("%d",&number[i]);
}
}
void max_min_value(int *number) //交换函数
{int *max,*min,*p,temp;
max=min=number; //开始时是max和min都指向第1个数
for(p=number+1;p<number+10;p++)
{if(*p>*max) //若p指向的数大于max指向的数,就使max指向p指向的大数
{max=p;}
else if(*p<*min) //若p指向的数小于min指向的数,就使min指向p指向的小数
{min=p;}
temp=number[0];number[0]=*min;*min=temp; //将最小数与第一个数number[0]交换
if(max==number)
{max=min;} //如果max和 number相等,表示第一个数是最大数,则使max指向当前的最大数
temp=number[9];number[9]=*max;*max=temp; //将最大数与最后一个数交换
}
}
void output(int *number) //输出函数
{int *p;
printf("Now,they are: ");
for(p=number;p<number+10;p++)
{printf("%d ",*p);
}
printf("\n");
}
运行结果
同楼主的
严格来说,楼主的方法不是利用指针。。。
答案是直接让max和min指向最大值或最小值的地址,交换的时候直接交换就可以了,而楼主的方法还要记录最大值或最小值是第几个,,,
这篇就到这里了