【题目分享】求最大最小值

本文讲述了作者在学习C语言过程中解决一个输入三个整数找最大值和最小值的问题,初始代码存在逻辑复杂和错误,通过优化后提高代码可读性,强调简洁高效编程的重要性。
摘要由CSDN通过智能技术生成

键盘输入三个整数,得出最大值和最小值并输出

今天在学习c语言的过程中遇到一道十分简单的题,要求从键盘输入三个整数,然后的出其中的最大值和最小值并输出结果。本来这是一道很简单的题,但是我在做的过程中发现了一些问题,于是记录下来希望大家吸取经验

以下是我最开始写的题解,可以看到其中运用了大量的if嵌套,阅读起来十分困难并且还存在逻辑错误。

void test06()
{
    int data1 = 0;
    int data2 = 0;
    int data3 = 0;
    //先定义三个变量
    int max = 0;
    int min = 0;
    //max,min分别记录最大值和最小值
    printf("输入3个int数值\n");
    //提示输入
    scanf("%d %d %d", &data1, &data2, &data3);
    //从键盘录入三个值
    max = data1;
    //max预设为data1
    if (data1 < data2)
    {

        if (data2 < data3)
        {
            max = data3;
            //当data3大于data2且大于data1时,max更新为data3
        }
        else
        {
            max = data2;
            //否则max更新为data2
        }
    }

    min = data1;
    //min预设为data1
    if (data1 > data2)
    {

        if (data2 > data3)
        {
            min = data3;
            //当data3小于data2且小于data1时min更新为data3
        }
        else
        {
            min = data2;
            //否则更新为data2
        }
    }

    printf("最大值=%d,最小值=%d\n", max, min);
    //分别输出最大值max和最小值min
    return;
}

因为求最大值的程序并没有错误所以这这里主要讨论求最小值的过程。下图是我求最小值的流程图,大家可以发现如下的测试用例的输出结果min的值将会是2,但是实际最小值应该是1。(红线是程序执行路径)

在这里插入图片描述

经过改进后的程序如下

void test06()
{
    int data1 = 0;
    int data2 = 0;
    int data3 = 0;
    int max = 0;
    int min = 0;
    printf("输入3个int数值\n");
    scanf("%d %d %d", &data1, &data2, &data3);
    max = data1;
    if (data2 > max)
    {

        max = data2;
    }
    if (data3 > max)
    {
        max = data3;
    }

    min = data1;
    if (data2 < min)
    {
        min = data2;
    }
    if (data3 < min)
    {
        min = data3;
    }

    printf("最大值=%d,最小值=%d\n", max, min);
    return;
}

改进后的代码逻辑上的错误已经改正了,并且还进行了一定的优化,现在的可读性也提升了一些。

在这里插入图片描述

当然当前的代码还可以继续优化,以达到更高的可读性和简洁度。复杂的代码不仅可读性不佳而且更容易出错,并且在出错之后很难找出错误所在,所以我们在编写的过程中应该对自己有更高的要求。总之,简洁、清晰和高效的代码是编写高质量程序的关键。通过合理地组织逻辑和选择适当的算法,我们可以编写出既易于理解又性能良好的代码。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值