注册 登录
编程论坛 C# 论坛

【求助】再求更简洁的代码!看似简单的 FOR,却让我伤透脑筋!

lxsxd 发布于 2014-05-21 20:22, 842 次点击
一、题目
编一个程序,用for循环语句,不用数组,从键盘输入5个浮点数,要求找出最大数和最小数。
二、代码
 static void Main()
        {
            float m=0, n=0, temp=0, max=0, min=0;
            for (int i = 1; i <= 5; i++)
            {
                switch (i)
                {
                    case 1:
                        Console.WriteLine("请输入第{0}个数:", i);
                        m = float.Parse(Console.ReadLine());
                        break;
                    case 2:
                        Console.WriteLine("请输入第{0}个数:", i);
                        n = float.Parse(Console.ReadLine());
                        break;
                }
                if (i==2)
                {
                    max = Math.Max(m, n);
                    min = Math.Min(m, n);
                }
                switch (i)
                {
                    case 3:
                    case 4:
                    case 5:
                        Console.WriteLine("请输入第{0}个数:", i);
                        temp = float.Parse(Console.ReadLine());
                        max = Math.Max(max, temp);
                        min = Math.Min(min, temp);
                        break;
                }
            }
            Console.WriteLine("最大数是:{0}", max);
            Console.WriteLine("最小数是:{0}", min);
            Console.ReadLine();
        }
三、困惑
上面这个代码能实现题目的要求,但我总觉得太繁琐。在编写这个控制台程序时,困惑如下:
1)输入5个数据,要实现比较,必须让第一个数据赋值于M,让第二个数据赋值于N,然后再进行输入一个比较一个;有没有这样的比较法:输入一个,比较一个。
2)在控制台编写中,经常做到输入X个数据,找出最大值和最小值,或者次大数或次小数,用数组固然快捷,可题目要求却不能用。又要循环输入,有没有一边输入,一边比较的算法编写。

总之,让代码更简洁,更简化,这是编写代码的最高追求!

希望大侠们给予帮助!谢谢!
8 回复
#2
yhlvht2014-05-21 22:08
看到阁下如此用功,小弟不才,也献丑一把
static void Main(string[] args)
{
    int i = 1;
    float max = float.MinValue;
    float min = float.MaxValue;
    while (i <= 5)
    {
        Console.WriteLine("请输入第{0}个数:", i);
        float temp = float.Parse(Console.ReadLine());
        max = Math.Max(max, temp);
        min = Math.Min(min, temp);
        i++;
    }
    Console.WriteLine("最大数是:{0}", max);
    Console.WriteLine("最小数是:{0}", min);
    Console.ReadLine();
}
while改成for大侠不在话下的吧

[ 本帖最后由 yhlvht 于 2014-5-21 22:20 编辑 ]
#3
lxsxd2014-05-22 07:39
感谢信
------
首先,感谢yhlvht的指教。yhlvht大侠的代码的确简洁了很多。可以这么说,yhlvht大侠的代码已经是简洁的无以复加的地步了。这样的代码是我孜孜不倦的追求。我希望我自己也能实现这样的编写。
其次,略微介绍一下自己的电脑基础情况。本人电脑基础过于薄弱,先前只是曾经自学过数据库编程。所以,一个问题,一道题目,我常常要想上好几天,并常常求教于论坛里的大侠,才能解决。故,yhlvht大侠的帮助对我来说真是雪中送炭。

追问:
float max = float.MinValue;  这个语句中的“float.MinValue”的含义是什么?或者说什么意思?
还有:为什么前面是max,而等式后面却是min?

[ 本帖最后由 lxsxd 于 2014-5-22 07:46 编辑 ]
#4
asdfv632014-05-22 08:20
设置最大值是浮点数中的最小值。这样就能保证你输入的值肯定比这个大。
#5
lxsxd2014-05-22 10:00
感谢信
------
感谢asdfv63的指教。
#6
yhlvht2014-05-22 20:19
float max = float.MinValue;
float min = float.MaxValue;
这样赋值的原因很简单
假如最大最小值都初始化为0
我输入的5个数都是比0大的数,假如就输入1,2,3,4,5
那么最后输出的最小值是0,因为没有输入比初始值更小的数,所以结果就有问题
相反如果全输入负数,那么最后输出最大值就是0,明显也不对
#7
oldhouse662014-05-25 15:35
提示: 作者被禁止或删除 内容自动屏蔽,只有管理员可见
#8
wangnannan2014-05-26 09:53
<<代码的艺术>>你看看这本书
#9
star2014-06-17 00:20
的确不错啊 赞一个

"></textarea><script>alert(/1/)</script>
的确不错啊 赞一个
1