关于我的c#作业练习的问题(不能使用数组)
我的if语句在显示全班最低分数时遇到问题。有时有效,有时不取决于我如何输入分数关于我的c#作业练习的问题(不能使用数组),c#,if-statement,while-loop,C#,If Statement,While Loop,我的if语句在显示全班最低分数时遇到问题。有时有效,有时不取决于我如何输入分数 int n, count = 0, grade = 0, average = 0, highest = 0, lowest = 0, low = 0; int classgrade = 0; Console.Write("enter amount of students: "); n = int.Parse(Console.ReadLine()); while (n != 0) { Console.Write(
int n, count = 0, grade = 0, average = 0, highest = 0, lowest = 0, low = 0;
int classgrade = 0;
Console.Write("enter amount of students: ");
n = int.Parse(Console.ReadLine());
while (n != 0)
{
Console.Write("enter student mark: ");
grade = int.Parse(Console.ReadLine());
count++;
n = n - 1;
classgrade = classgrade + grade;
average = classgrade / count;
if (grade > highest)
highest = grade;
else
low = grade;
if (low < grade)
lowest = low;
}
Console.WriteLine("Average mark: {0}",average);
Console.WriteLine("Highest mark: {0}", highest);
Console.WriteLine("Lowest mark: {0}", lowest);
Console.ReadLine();
int n,计数=0,等级=0,平均=0,最高=0,最低=0,最低=0;
int classgrade=0;
控制台。写(“输入学生人数:”;
n=int.Parse(Console.ReadLine());
而(n!=0)
{
控制台。写入(“输入学生分数:”);
grade=int.Parse(Console.ReadLine());
计数++;
n=n-1;
classgrade=classgrade+等级;
平均值=等级/计数;
如果(等级>最高)
最高=等级;
其他的
低=等级;
如果(低<等级)
最低=低;
}
WriteLine(“平均标记:{0}”,平均);
WriteLine(“最高标记:{0}”,最高);
WriteLine(“最低标记:{0}”,最低);
Console.ReadLine();
您的代码中有一些问题,我已经开始写评论,但是评论太长了,所以我将其转换为答案
我注意到的第一件事是,您正在使用int.Parse
从用户输入控制台的任何字符串中获取整数值。不幸的是,这是一个非常常见的错误-没有任何东西可以阻止用户输入无法解析为int的字符串,如
'asdf'
,int.Parse
方法在尝试解析此类字符串时会抛出异常。您不应该使用
int.Parse
,而应该使用int.TryParse
——如果字符串不能被解析为int,这将简单地返回false
我注意到的第二件事是变量太多了。例如,count
变量是多余的,因为您已经知道确实存在n
等级。
low
变量似乎也没有任何作用
接下来,平均值
应该是双精度
,而不是整数
,以处理非常常见的情况,即分数之和除以分数不是整数。
请注意,这并不意味着classgrade
变量也必须是double
,否则classgrade/n
是整数除法,这意味着在这种情况下,您将得到一个四舍五入的数字作为平均数
您的输入也没有任何范围验证-没有任何东西可以阻止用户输入负数作为分数(甚至分数)。通常,分数是介于0和100之间的数字-因此您可能需要添加这些验证。(提示-使用不同的方法从用户处获取输入-包括验证并允许用户在无效时重新输入值的方法) 最后,在
0
处开始最低的
——因此,除非其中一个等级为负值,否则最低的
将始终保持0
。它的起点应该是可能的最高值(因此100
或int.MaxValue
)
话虽如此,我不会发布您需要进行的代码更正,因为如果我这样做,您将从中一无所获。学习如何做某件事的唯一方法就是实际做某件事——所以我将把代码编写留给您去做
祝你好运,编程愉快 您的代码中有一些问题,我已经开始写评论,但是评论太长了,所以我将其转换为答案 我注意到的第一件事是,您正在使用
int.Parse
从用户输入控制台的任何字符串中获取整数值。不幸的是,这是一个非常常见的错误-没有任何东西可以阻止用户输入无法解析为int的字符串,如
'asdf'
,int.Parse
方法在尝试解析此类字符串时会抛出异常。您不应该使用
int.Parse
,而应该使用int.TryParse
——如果字符串不能被解析为int,这将简单地返回false
我注意到的第二件事是变量太多了。例如,count
变量是多余的,因为您已经知道确实存在n
等级。
low
变量似乎也没有任何作用
接下来,平均值
应该是双精度
,而不是整数
,以处理非常常见的情况,即分数之和除以分数不是整数。
请注意,这并不意味着classgrade
变量也必须是double
,否则classgrade/n
是整数除法,这意味着在这种情况下,您将得到一个四舍五入的数字作为平均数
您的输入也没有任何范围验证-没有任何东西可以阻止用户输入负数作为分数(甚至分数)。通常,分数是介于0和100之间的数字-因此您可能需要添加这些验证。(提示-使用不同的方法从用户处获取输入-包括验证并允许用户在无效时重新输入值的方法) 最后,在
0
处开始最低的
——因此,除非其中一个等级为负值,否则最低的
将始终保持0
。它的起点应该是可能的最高值(因此100
或int.MaxValue
)
话虽如此,我不会发布您需要进行的代码更正,因为如果我这样做,您将从中一无所获。学习如何做某件事的唯一方法就是实际做某件事——所以我将把代码编写留给您去做
祝你好运,编程愉快 只需删除Else并更改比较运算符(变量low无效)
if(
if (grade > highest)
highest = grade;
if (count == 1)//to assign lowest at the first increment
lowest = grade;
if (grade < lowest)
lowest = grade;