题目:
用指针实现,输入6个整数,把最小数与第1个数交换,最大数与最后1个数交换,其它数据不动。输入保证最大值和最小值唯一。请编写3个函数:(1)输入6个数;(2)进行处理函数;(2)输出6个数,每个数占3个宽度,左对齐。
函数接口定义:
void inputdata(int *p); void swapdata(int *p); void printdata(int *p);
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; }
输入样例1:
2 1 6 5 4 3
输出样例1:
1 2 3 5 4 6
答案:
void inputdata(int* p)//输入
{
int i = 0;
for (i = 0; i < 6; i++, p++)
{
scanf("%d", &*p);
}
}
void swapdata(int* p)//执行
{
int* max = (p + 5);
int* min = p;
int* pp = p;
int* pm = (p + 5);
int i = 0;
int b = 0, c = 0;
for (i = 0; i < 6; i++, p++)
{
if (*min > *p)min = p;//找出最小数的地址;
}
b = *pp;//
*pp=*min;//
*min = b;//加最小数的值与第一个数互换
p--;//防止出现野指针
for (i=5;i>=0;i--,p--)
{
if (*max < *p)max= p;
}
c= *pm;
*pm = *max;
*max = c;//与最小数类似
}
void printdata(int* p)//输出
{
int i = 0;
for (i = 0; i < 6; i++, p++)
{
printf("%-3d", *p);
}
}