正如标题所述。我现在完成了程序的大部分代码,这是最后一部分。说实话,在这一点上,我只是不明白如何实现这一目标。我知道我应该使用类似于如何实现等级字母的工具,但是我如何以这样的方式实现它:对于等级范围内的每个等级,分布图将在相关等级范围中添加星号。
基本上,分布图应如下所示:
整体成绩分布:
0-9:
10-19:
20-29:
30-39:
40-49:
50-59:
60-69:***
70-79:******
80-89:***********
90-99:*******
100:***
认为通过链接提供所有代码可能更好,所以在这里:
This is my code on dotnetfiddle
我试图解决这个问题。我被告知10到10循环从0到100,然后嵌套循环从0循环到星数。 N等于学生数量,5与每个学生的成绩数量相关:
for (int i = 0; i <= 100; i += 10)
{
Console.WriteLine(i + " - " + (i + 10));
for (int j = 0; j < (n*5); j++)
{
// add stars here
}
}
答案 0 :(得分:0)
首先在.net中查看你的代码,你需要实现某种方式从学生那里取回成绩,在我的例子中,我使用了GetGrades方法。其次,我确信有比这更好或更清晰的方式(linq),但至少它起作用了:)
@Echo Off
For %%A In (ComputerName,UserName,UserProfile) Do (
For /F "Tokens=1* Delims==" %%B In ('Set %%A') Do Echo %%C)
Pause
编辑(另一种方式,打印部分保持不变):您还可以将学生数组与学生阵列一起声明并填写在您为学生分配成绩的同一地方如果你这样做,你将不需要再次循环所有的学生和成绩:
// Array where each value represents number of grades within range
// distribution[0]: 0 - 9
// distribution[1]: 10 - 19
// distribution[2]: 20 - 29
// distribution[3]: 30 - 39
// distribution[4]: 40 - 49
// distribution[5]: 50 - 59
// distribution[6]: 60 - 69
// distribution[7]: 70 - 79
// distribution[8]: 80 - 89
// distribution[9]: 90 - 99
// distribution[10]: 100
var distribution = new int[11];
// Fill the array with distribtions for all students
// *Don't forget to implement GetGradse method for student
foreach (var s in students)
foreach (var g in s.GetGrades())
{
// skip the grade thats less than 0 or greater than 100 (invalid grade)
// in every other case increment distribution at g / 10 index
if (g < 0 || g > 100) continue;
else distribution[(int)g / 10]++;
}
// Now we can print out the grades distribution
for (var i = 0; i < distribution.Length - 1; i++)
Console.WriteLine($"{i * 10}-{i * 10 + 9}: {new String('*', distribution[i])}");
Console.WriteLine($"100: {new String('*', distribution[10])}");