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

8.1 题目:输入三个整数,按由小到大的顺序输出

思路

           ①先定义指针变量和数组,用于存放输入的数字。

           ②对于数字大小的排列,利用三个if语句列出所有的可能,即第一个数最小时,第二个数最小时,第三个数最小时,分别进行位置的置换。

#include<stdio.h>
int main()
{
	int *p, a[3];
	int i, temp;
	p = a;
	printf("请输入三个整数:\n");
	for (i = 0; i < 3; i++,p++)
		scanf_s("%d", p);
	p = a;
	if (*p < *(p + 1) && *p < *(p + 2))//第一个数为最小的情况
		if (*(p + 1) > *(p + 2))//若第二个数>第三个数,进行位置调换
		{
			temp = *(p + 2);
			*(p + 2) = *(p + 1);
			*(p + 1) = temp;
		}
	if (*(p + 1) < *p && *(p + 1) < *(p + 2))//第二个数为最小的情况
	{
		temp = *(p + 1);
		*(p + 1) = *p;
		*p = temp;
		if (*(p + 1) > *(p + 2))//若第二个数>第三个数,进行位置调换
		{
			temp = *(p + 1);
			*(p + 1) = *(p+2);
			*(p+2) = temp;
		}
	}
	if (*(p + 2) < *p && *(p + 2) < *(p + 1))//第三个数为最小的情况
	{
		temp = *(p + 2);
		*(p + 2) = *p;
		*p = temp;
		if (*(p + 1) > *(p + 2))//若第二个数>第三个数,进行位置调换
		{
			temp = *(p + 1);
			*(p + 1) = *(p + 2);
			*(p + 2) = temp;
		}
	}
	printf("由小到大排列为:");
	for (i = 0; i < 3; i++,p++)
		printf("%4d", *p);
	return 0;

不足之处:if语句虽然简单但太麻烦,可以用选择法排序,但我没有掌握好。。或者定义一个求两数之间较小的那个数的函数,然后利用函数的递归,但是我不知道该怎么返回排序好后的数。。


改进:利用调用函数,程序更简洁了一些。

#include<stdio.h>
void swap(int* n1, int *n2)
{
	int temp;
	temp = *n1;
	*n1 = *n2;
	*n2 = temp;
}
int main()
{
	int *p1, *p2, *p3;
	int n1, n2, n3;
	printf("请输入三个整数:\n");
	scanf_s("%d%d%d",&n1,&n2,&n3);
	p1 = &n1;
	p2 = &n2;
	p3 = &n3;
	if (*p1 > *p2)swap(p1, p2);
	if (*p1 > *p3)swap(p1, p3);
	if (*p2 > *p3)swap(p2, p3);
	printf("由小到大排列为:");
	printf("%4d%4d%4d", *p1, *p2, *p3);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值