黑马程序员技术交流社区

标题: 出去掉1个最高分和去掉1个最低分后的平均分,然后将成绩... [打印本页]

作者: 余尚勇    时间: 2013-6-22 02:36
标题: 出去掉1个最高分和去掉1个最低分后的平均分,然后将成绩...
本帖最后由 余尚勇 于 2013-6-23 01:28 编辑

求帮助:怎么添加代码用来出去掉1个最高分和去掉1个最低分后的平均分,然后将成绩由高到低的顺序打印出来,本人菜鸟一个,求帮助题目是:
.请编写1个程序,该程序从控制台接收用户的输入班级的人数,然后分别从
控制台接收每1个人的成绩.只要有1个的成绩不合法(不在0-100的范围或者输入的不是整数),
就提示用户重新输入该名学生的成绩.当所有的学生的成绩输入完毕之后,请打印出全班平均分,然后再求
出去掉1个最高分和去掉1个最低分后的平均分,然后将成绩由高到低的顺序打印出来.

             */

            Console.WriteLine("请输人班级的人数:");
            int num = Convert.ToInt32(Console.ReadLine());
            int[] scores = new int[num];
            int sum = 0;
            for (int i = 0; i < scores.Length; i++)
            {

                Console.WriteLine("请输人第{0}个人的成绩", i + 1);
                int score = Convert.ToInt32(Console.ReadLine());
                if (scores >= 0 && scores <= 100)
                {
                    scores = score;
                    sum += scores;
                    
                  
                }

                else if (score > 100 || score < 0)
                {
                    Console.WriteLine("你输入的成绩不在1-100之间,请重新输入:");
                    continue;
                }
               
            }
            Console.WriteLine("平均分是:{0}",sum/scores.Length);
            Console.ReadKey();
        }

    }
}

作者: 许庭洲    时间: 2013-6-22 08:08
本帖最后由 许庭洲 于 2013-6-22 08:09 编辑

for (int i = 0; i < scores.Length; i++)
{

         Console.WriteLine("请输人第{0}个人的成绩", i + 1);
         int score = Convert.ToInt32(Console.ReadLine());
         if (scores >= 0 && scores <= 100)
  
       {
                 scores = score;
                 sum += scores;
         }
         else if (score > 100 || score < 0)
         {
                  Console.WriteLine("你输入的成绩不在1-100之间,请重新输入:");
                  continue;
         }
   }
   //max
   for (int i = 0; i < scores.Length-1; i++)
   {
         if scores > scores[i+1])
         {
                int temp1     =    scores;
                scores       =    scores[i + 1];
                scores[i + 1] =    temp1;
         }
    }
   int max =  scores[scores.Length-1];

   //min
   for (int j = 0; j < scores.Length-1; j++)
   {
         if (scores[j] < scores[j + 1])
        {
                int temp2 = scores[j];
                scores[j] = scores[j + 1];
                scores[j + 1] = temp2;
         }
    }
    int min =  scores[scores.Length-1];

    Console.WriteLine("平均分是:{0}", (sum-max-min)/(scores.Length-2));
    Console.ReadKey();
作者: 高腾    时间: 2013-6-22 08:38
  1.             Console.Write("请输入班级人数:");
  2.             int count = Convert.ToInt32(Console.ReadLine());
  3.             int[] scores = new int[count];
  4.             int maxNum = 0, minNum = 0, sumScore = 0;
  5.             double aveScore = 0.0,aveScore2=0.0;

  6.             for (int i = 0; i < count; i++)
  7.             {
  8.                 int scoreNum = 0;
  9.                 while (true)
  10.                 {
  11.                     Console.Write("请输入第{0}个学生的成绩:", i + 1);
  12.                     string scoreStr = Console.ReadLine();
  13.                     if ((!int.TryParse(scoreStr, out scoreNum)) || scoreNum < 0 || scoreNum > 100)
  14.                     {
  15.                         Console.Write("您输入的数字不合法!");
  16.                     }
  17.                     else
  18.                     {
  19.                         scores[i] = scoreNum;
  20.                         break;
  21.                     }
  22.                 }
  23.                 sumScore += scores[i];
  24.             }

  25.             aveScore2 = 1.0 * sumScore / count;

  26.             for (int i = 0; i < count; i++)
  27.             {
  28.                 for (int j = i + 1; j < count; j++)
  29.                 {
  30.                     if (scores[i] < scores[j])
  31.                     {
  32.                         int temp = scores[i];
  33.                         scores[i] = scores[j];
  34.                         scores[j] = temp;
  35.                     }
  36.                 }
  37.             }

  38.             maxNum = scores[0];
  39.             minNum = scores[count - 1];

  40.             sumScore = sumScore - maxNum - minNum;

  41.             if (count <= 2)
  42.             {
  43.                 aveScore = 1.0*sumScore / count;
  44.             }
  45.             else
  46.             {
  47.                 aveScore = 1.0 * sumScore / (count - 2);
  48.             }

  49.             Console.WriteLine("平均分是:{0},去掉最高分和最低分的平均分为:{1}", aveScore2, aveScore);

  50.             for (int i = 0; i < count; i++)
  51.             {
  52.                 Console.Write("{0}\t", scores[i]);
  53.             }

  54.             Console.ReadKey();
复制代码

作者: 王靖远    时间: 2013-6-22 10:10
用ArrayList排序后去头尾就可以实现去最高分和最低分了啊
作者: 关关雎鸠    时间: 2013-6-22 12:02
思路:对这些分数排序,那么前后就是最高分和最低分(具体哪个在后看排序用的比较符号),然后去掉前后的分数,再计算平均分。最后输出平均分和已经排序好的分数。
作者: 余尚勇    时间: 2013-6-23 02:02
高腾 发表于 2013-6-22 08:38

谢谢,我基础部咋样,多谢
作者: 余尚勇    时间: 2013-6-23 02:02
许庭洲 发表于 2013-6-22 08:08
for (int i = 0; i < scores.Length; i++)
{

谢谢,非常感谢
作者: 余尚勇    时间: 2013-6-23 02:03
关关雎鸠 发表于 2013-6-22 12:02
思路:对这些分数排序,那么前后就是最高分和最低分(具体哪个在后看排序用的比较符号),然后去掉前后的分 ...

谢谢了,
作者: 余尚勇    时间: 2013-6-23 02:03
王靖远 发表于 2013-6-22 10:10
用ArrayList排序后去头尾就可以实现去最高分和最低分了啊

谢谢帮助
作者: 万大述    时间: 2013-6-24 11:52
1、 因重复使用,先写一个得到一个整数的方法;2、因要记录所有学生成绩,声明一个用来装成绩的整型数组;3、用一个for循环得到每个同学的成绩并放到之前定义的数组中;4、用冒泡排序法将数组进行排序;5、因已排序,所以第一个是最大值,最后一个是最小值,去掉后求平均值;6、按要求打印。参考代码如下:
static void Main(string[] args)
        {
            int number = 0, sum = 0,avg=0;
            Console.WriteLine("请输人班级的人数:");
            number = ReadInt();//调用方法得到一个整数
            int[] scores = new int[number];
            for (int i = 0; i < number; i++) //得到每位同学的成绩
            {
                Console.WriteLine("请输人第{0}个人的成绩", i + 1);
                do//得到一个1~100的整数
                {
                    scores[i] = ReadInt();
                    if (scores[i] >= 0 && scores[i] <= 100)
                    {
                        break;
                    }
                    Console.WriteLine("你输入的成绩不在1~100之间,请重新输入:");
                } while (true);
            }
            for (int i = 0; i < number; i++)
            {
                for (int j = i; j < number; j++)
                {
                    if (scores[j] > scores[i]) //冒泡排序交换,此处不考虑多个最大值和多个最小值的情况
                    {
                        int temp;
                        temp = scores[j];
                        scores[j] = scores[i];
                        scores[i] = temp;
                    }
                }
                sum += scores[i]; //得到全班同学成绩的总和
            }
            avg = (sum - scores[0] - scores[number-1]) / (number - 2); //求去掉一个最大值和一个最小值的平均值
            Console.WriteLine("{0}位同学去掉一个最高分和一个最低分后的平均成绩是:{1}",number, avg);
            Console.Write("{0}位同学的成绩由高到低排列为:",number);
            for (int i = 0; i < number-1; i++) //最后一位同学的成绩不打印
            {
                Console.Write(scores[i]+"、");
            }
            Console.Write(scores[number-1]+"。"); //打印最好一位同学的成绩加”。“
            Console.ReadKey();

        }
        static int ReadInt() //该方法要求用户输入一个整数并返回。
        {
            int number = 0;
            do
            {
                try
                {
                    number = Convert.ToInt32(Console.ReadLine());
                    break;
                }
                catch
                {
                    Console.WriteLine("请输入整数!");
                    continue;
                }
            } while (true);
            return number;
        }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2