零开始的C语言学习之路——谭浩强教材课后题实践记录与问题解析(第八章指针③)

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;
}

总结:此题没什么难度,但是看习题的答案给的代码很复杂,我也没有再仔细研究了。。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值