论坛里某朋友提出一首题,如下:
引用
輸入同學人數(最多15人): 10
輸入第1位同學小考成績: 80, 70, 60
輸入第2位同學小考成績: 60, 70, 60
輸入第3位同學小考成績: 80, 70, 90
...
輸入第10位同學小考成績: 80, 75, 90
====================================
第1位同學平均: 73
第2位同學平均: 63
第3位同學平均: 80
...
第10位同學平均: 82
====================================
第1高分為第10位同學
第2高分為第3位同學
第3高分為第1位同學
这应该是一个控制台的应用程序了,自己初看起来觉得蛮简单的,但是做起来才知道郁闷,本以为十分钟搞掂的,结果弄了一晚上,下面是我自己写的程序,基本功能是应该实现了
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TestApplication
{
class Program
{
static List<Student> stus = new List<Student>(); // 存储学生的索引及其平均分
/// <summary>
/// 程序入口
/// </summary>
static void Main(string[] args)
{
Console.Write("输入同学人数(最多15人):");
string num = Console.ReadLine();
int count;
if (int.TryParse(num, out count))
{
if (count < 1 || count > 15)
{
Console.WriteLine("请输入1~15之间的数字,程序退出!");
Console.ReadLine();
return;
}
string[] scours = new string[count]; // 存储每位同学的成绩字符串,如:80, 70, 60
// 循环输入成绩
for (int i = 0; i < count; i++)
{
Console.Write("输入第" + (i + 1) + "位同学小考成绩:");
scours[i] = Console.ReadLine();
}
Console.WriteLine("===============================================");
// 循环输出平均成绩
for (int i = 0; i < count; i++)
{
Console.WriteLine("第" + (i + 1) + "位同学平均:" + CalcAvg(scours[i], i + 1));
}
Console.WriteLine("===============================================");
// 输出分数排名
StudentComparer sc = new StudentComparer();
stus.Sort(sc);
for (int i = 0; i < stus.Count; i++)
{
Console.WriteLine("第" + (i + 1) + "高分为第" + stus[i].Index + "位同学:" + stus[i].Avg);
}
}
else
{
Console.WriteLine("格式输入错误,请输入数字,程序退出!");
}
Console.Read();
}
/// <summary>计算成绩字符串的平均值
///
/// </summary>
/// <param name="p">成绩字符串,如:80,70,50</param>
/// <param name="index">该同学的索引</param>
/// <returns></returns>
private static string CalcAvg(string p, int index)
{
string[] ss = p.Split(new char[] { ',' });
if (ss.Length == 0)
{
return "成绩输入错误,请按“80,70,50”的格式输入!";
}
else
{
int i = 0;
float total = 0f;
foreach (string str in ss)
{
float f;
if (float.TryParse(str, out f))
{
i++;
total += f;
}
else
{
return "成绩输入错误,请按“80,70,50”的格式输入!";
}
}
float avg = total / i; // 平均分
stus.Add(new Student(index, avg)); // 把当前同学的平均分及其索引加到List中
return avg.ToString();
}
}
}
/// <summary>
/// 学生实体类
/// </summary>
public class Student
{
private int _index;
/// <summary>
/// 索引
/// </summary>
public int Index
{
get { return _index; }
set { _index = value; }
}
private float _avg;
/// <summary>
/// 平均分
/// </summary>
public float Avg
{
get { return _avg; }
set { _avg = value; }
}
public Student(int index, float avg)
{
this._index = index;
this._avg = avg;
}
}
/// <summary>
/// 学生实体类的比较,按学生的平均分从高到低排列
/// </summary>
public class StudentComparer : IComparer<Student>
{
public int Compare(Student x, Student y)
{
if (x == null)
{
if (y == null)
{
// 如果二者都为空,那么他们则是相等的.
return 0;
}
else
{
// 如果X为空而Y不为空,则Y大
return -1;
}
}
else
{
if (y == null)
// 如果X不为空而Y为空,则X大
{
return 1;
}
else
{
// 二者都不为空,则比较其中的avg属性
float x_avg = x.Avg;
float y_avg = y.Avg;
return y_avg.CompareTo(x_avg); //此为从大到小,若是 x_avg.CompareTo(y_avg)则是从小到大
}
}
}
}
}
分享到:
相关推荐
"一道题涉及到50个SQL语句" 这道题目主要考察了 SQL 语句的使用,涉及到多表连接、子查询、聚合函数等知识点。下面将对每个问题进行详细的解释和分析: 1. 查询“001”课程比“002”课程成绩高的所有学生的学号: ...
《从一道题看奥赛所涉及的解题方法和技巧》这篇文章主要探讨了一道与物理和数学相关的竞赛题目,通过多种解题策略来解析问题,包括微元法、类比法、图解法、矢量图解法以及等效法。以下是这些方法的详细解释: 1. *...
JAVA界面的一道题
本文探讨了如何运用“小题大做”的教学策略来构建深度学习的问题生成式课堂,以“一道题一节课”的模式,促进高中数学的深度学习和核心素养培养。这种教学方法强调从一道具体题目出发,引导学生进行深层次的思考、...
笔试遇到的一道题,其实挺简单,希望初学编程的同学可以练一练!
小学数学数学故事26个孩子和一道题
关于acm青蛙过河的一道题代码acm,请大家参考之,希望有用处
标题 "C#一道题" 暗示我们讨论的是一个关于C#编程语言的问题,而描述中的“希望大家能帮我做一下”表明这是一个编程题目,可能涉及到特定的算法、语法或编程概念。标签“一道C#题”进一步确认了这一点。由于压缩包...
【六年级下册数学教学后记】--利用一道题复习总结.pdf
这里是2016-2020年北大软微计算机考研的真题题型分类,涉及每一道题目,文件是xmind文件,包括计算机网路、数据结构、操作系统,每单个题型分类后面如果标有数值,该数值表示出现的次数;没有次数,则默认为1次。
一道关于C语言程序的题 程序题main(){ float a,b; char c; printf("input expression: a+(-,*,/)b \n"); switch() { case '+': printf("%f\n",a+b);break; case '-': printf("%f\n",a-b);break; case '*': ...
public class r { public static void main(String[]args) { int i, j; for(i=1;i;i++) { for(j=1;j;j++) { System.out.print(j+"*"+i+ "="+(j*i)); } System.out.println(" ");...}
一个合法的表达式由()包围,()可以嵌套和连接,如(())()也是合法表达式;现在有6对(),它们可以组成的合法表达式的个数为多少?
每一道题都对应着数据治理的一个具体概念或实践,通过对真题的深入研究,考生可以更准确地把握考试的重点和难点。 数套模拟题则是强化训练和自我评估的利器。模拟题通常会模拟真实考试环境,帮助考生适应考试节奏,...
uibot RPA中级认证实践题--订单录入
这里有一道题,可以很好的结合使用上面的参数,达到很好记忆的效果。 题目: 数据文件data中含以下数据: 4 1 3 5 1001 2 4 5 请用一条命令反向排序,去重并将这些数据同样保存在data文件中。最终输出结果: 1001 ...
精品教育教学资料
《系统分析师历年真题详解与备考指南》 系统分析师,作为信息技术领域中...考生应深入研究每一道真题,理解其背后的考点和解题思路,同时结合最新的考纲,不断调整和优化自己的学习计划,以期在考试中取得理想的成绩。
一般情况下,这样的压缩包可能会有PDF或Word文档形式的题目集,每一道题可能都有详细的解答步骤和解析。还可能包含PDF或者图片格式的答案,方便考生核对。此外,也可能有相关的知识点总结、解题技巧讲解等辅助学习...
代码有一道题用了浏览器,大部分叫输入一个值都提前输入了,解这些题最重要的是算法。有些题做得太复杂了,可能有更精简的方法,但起码提供了一个思路。说是50道题也就45道,这些题有一半没什么意义,真要学技术建议...