C语言的程序学习5

这篇博客介绍了C语言经典例题中的三数排序问题,强调了基础排序的重要性。博主分享了两种解法,包括直观的if语句排序和书中的嵌套if逻辑,并指出冒泡法和二分法在此题中的不适用。博客结尾承诺将在后续文章中深入讲解其他解法。
摘要由CSDN通过智能技术生成

努力学习C语言的牧狗(C语言经典100例)———第五题

好吧,虽然今天满课,但我还是咬咬牙再做一题,马上就赶上老大哥(@我才是真正的17号)了。没有骗,没有偷袭,只有闪电一日两更。
第五题:
题目:输入三个整数x, y, z,请把这三个数由小到大输出。
思路:这一题是非常基础的一题,无非是将三个数进行有序排列,想要做出来是非常容易的但我们不能掉以轻心,以防阴沟里翻船。同时,我们可以进行多方的思索,我们是否可以用其他方式来解这一题。就算不是最优解,但我们可以通过发散思维来复习巩固所学的其他的内容。
解:这是最容易想到的,也应该是最优解,通过三个if语句来进行选择两个数字之间最小的,通过转换,可以得到所求的式子。
解法一:

include<stdio>
main()
{
    int x, y, z, t;
    scanf("%d%d%d", &x, &y, &z);
    if(x>y)
    {
        t = x; x = y; y = t;
    } /* 交换x, y的值 */
    if(x > z)
    {
        t = z; z = x; x = t;
    } /* 交换x, z的值 */
    if(y > z)
    {
        t = y; y = z; z = t;
    } /* 交换z, y的值 */
    printf("small to big: %d %d %d/n", x, y, z);
}

这是很容易想的一种方法,三个if可以实现所要达成目标。但我们需要进行思考,是不是有另外的解法
解法二:这是书上P45页上的一种解法

#include<stdio.h>
main()
{
	int a, b, c;
	scanf_s("%d%d%d", &a, &b, &c);
	if (a <= b && a <= c)
		if (b <= c)
			printf("%d%d%d", a, b, c);
		else printf("%d%d%d", a, c, b);
	if (b <= a && b <= c)
		if (a <= c)
			printf("%d%d%d", b, a, c);
		else printf("%d%d%d", b, c, a);
	if (c <= a && c <= b)
		if (a <= b)
			printf("%d%d%d", c, a, b);
		else printf("%d%d%d", c, b, a);
}

同样,编书的大佬同样使用了if条件语句进行实现该题的答案。但if语句中又嵌套了一个if语句,并在选择中使用&&逻辑和的相关语句,大大提升了相应的难度,也增加了代码的繁琐度,所以说极力不推荐(这充其量就是书的编者想要出题所创的,无参考价值)
之后就是冒泡法和二分法,这两个方法主要是用来解决较难的数组问题,如果只是用在这一题,是有一点杀鸡用牛刀了,这里就不再运用这两种方式赘述此题,我会发一下相关笔记和一个习题,用于理解这些方法
在这里插入图片描述
在这里插入图片描述
使用原理都是数组的相关内容,通过数组中的数字变化,来调整数组中数的大小关系。所以说如果只是用在本题中,好像并不适用。虽说条条大路通罗马,但对与不同的题目有不同的最优解决方法,这就需要编程前的临时判断。
反思:对于第一种解法,需要注意if三条语句的顺序,如果顺序发生错误,答案也许并不是我所想要的。所以说,“磨刀不误砍柴工”,有了正确且明智的思想是会让你的成事事半功倍的。
后记:对于本文后面提到的两种解法我会在以后的博客里加以讲解与描述,虽然了解不够深刻,但还是希望多多支持,在12月12日之后我便会履行诺言,我很讲武德,谢谢大家,谢谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值