8.3 题目:输入10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换。
写3个函数:①输入10个数;②进行处理;③输出10个数。
思路:
①先定义指针变量和数组,用于存放输入的十个整数。
②找最小数时,先假设第一个数是最小的,然后将剩余的数与最小数进行比较,若当前比较的数比最小数还小,那么更新当前数为最小数,同时记录此数是第几个数,再继续与剩余的数比较,直到循环结束,再将最小数与第一个数进行位置的互换(找最大数原理相同)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a[10], * p;
int i, j, temp, max, max_point=0, min, min_point=0;
printf("请输入十个整数:\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
p = a;
min = *p;//假设第一个数是最小的
for (j = 1; j < 10; j++)//将剩余九个数与最小数进行比较,若当前数<最小数,那么令这个数为最小数,再继续比较
{
if (*(p + j) < min)
{
min = *(p + j);
min_point = j;//记录最小数是第几个
}
}
temp = *p;//将最小的数与第一个数互换位置
*p = min;
*(p + min_point) = temp;
max = *(p + 9);//假设第十个数是最大的,原理同上
for (j = 8; j > 0; j--)
{
if (*(p + j) > max)
{
max = *(p + j);
max_point = j;
}
}
temp = *(p + 9);
*(p + 9) = max;
*(p + max_point) = temp;
printf("最小的数与第一个数互换位置,最大的数与最后一个数互换位置后结果为:\n");
for (i = 0; i < 10; i++,p++)
printf("%2d", *p);
return 0;
}
总结:此题没什么难度,但是看习题的答案给的代码很复杂,我也没有再仔细研究了。。