0

在我的编程课介绍中,我们有一个额外的学分作业。我们需要让用户输入一个名字,他们参加了多少次测验,每个测验的成绩,然后计算平均值,然后计算他们的字母成绩。我现在拥有的是

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {

            int counter = 1;
            Console.WriteLine("Name:  ");
            string sname = Console.ReadLine();
            int numberOfQuizzes = 0;
            while (sname != "Exit")
            {
                Console.WriteLine("Number of Quizzes:  ");
                string snumberOfQuizzes = Console.ReadLine();
                numberOfQuizzes = int.Parse(snumberOfQuizzes);

                while (counter - 1 < numberOfQuizzes)
                {
                    Console.WriteLine("Quiz Score {0}", counter);
                    string sscore = Console.ReadLine();
                    counter++;
                }

                Console.WriteLine("Enter another name or type Exit to quit.");
                sname = Console.ReadLine();

                if (sname != "Exit")
                {
                    Console.WriteLine("Number of Quizzes:  ");
                    snumberOfQuizzes = Console.ReadLine();
                    while (counter - 1 < numberOfQuizzes) ;     
               }
            }
        }
    }
}

第二次循环是不让用户输入他们参加了多少次测验。我也知道要给出分数,我需要一个 if/else,但是我会把它放在我的循环中的哪个位置?

4

4 回答 4

0

你做错了什么是你没有重新启动计数器,所以假设第一次用户有 5 次测验你的计数器是 6 并且可能大于 numberOfQuizzes 所以它永远不会进入第二个 while 循环(或者如果它进入它'如果这次数字更大,会错过一些测验)

而你最后的如果是不必要的。所以改变这个:

if (sname != "Exit")
{
    Console.WriteLine("Number of Quizzes:  ");
    snumberOfQuizzes = Console.ReadLine();
    while (counter - 1 < numberOfQuizzes) ;     
}

if (sname != "Exit")
{
    counter = 1;
}
于 2013-07-16T00:29:46.317 回答
0

除了while武士for...... 它自然会提醒您初始化值counter = 0;并增加值counter++

从...

while (counter - 1 < numberOfQuizzes)
{
     Console.WriteLine("Quiz Score {0}", counter);
     string sscore = Console.ReadLine();
     counter++;
}

到...

for (counter = 0; counter < numberOfQuizzes; counter++)
{
    Console.WriteLine("Quiz Score {0}", counter);
    string sscore = Console.ReadLine();
}

您还可以删除...

if (sname != "Exit")
{
    Console.WriteLine("Number of Quizzes:  ");
    snumberOfQuizzes = Console.ReadLine();
    while (counter - 1 < numberOfQuizzes) ;     
}

...因为while (sname != "Exit")循环将处理新输入并继续循环,直到“退出”是输入。重新初始化您再次使用的值是个好主意,这样您就不会意外地在下一个人身上使用它们的标记。在每次循环迭代开始时执行此操作。

最后,至于成绩,应该在输入一个人的所有分数之后但在你要求一个新名字之前计算。在确定成绩之前,您还需要计算平均值……但如果我们为您做了这一切,我们应该得到额外的成绩。;)

于 2013-07-16T00:53:10.473 回答
0

我的代码版本,几乎没有返工并且可以正常工作。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            int counter;
            double score;

            while (true)
            {
                counter = 1;
                score = 0.0;
                Console.WriteLine("Name(type 'Exit' to quit): ");
                string sname = Console.ReadLine();
                if (sname == "Exit")
                {
                    Environment.Exit(0);
                }
                else
                {
                    int numberOfQuizzes = 0;
                    Console.WriteLine("Number of Quizzes:  ");
                    numberOfQuizzes = int.Parse(Console.ReadLine());

                    while (counter <= numberOfQuizzes)
                    {
                    Console.WriteLine("Quiz Score {0}", counter);
                    score += double.Parse(Console.ReadLine());
                    counter++;
                    }
                    score = (score/(counter-1));
                    if (score < 60)
                    {
                        Console.WriteLine("Letter Grade: F");
                    }
                    else if (60 <= score && score < 70)
                    {
                        Console.WriteLine("Letter Grade: D");
                    }
                    else if (70 <= score && score < 80)
                    {
                        Console.WriteLine("Letter Grade: C");
                    }
                    else if (80 <= score && score < 90)
                    {
                        Console.WriteLine("Letter Grade: B");
                    }
                    else if (90 <= score)
                    {
                        Console.WriteLine("Letter Grade: A");
                    }

                    Console.WriteLine("Grade: {0}",(score/100).ToString("P"));
                }
            }
        }
    }
}
于 2013-07-16T00:58:05.280 回答
0
static void Main()
{
    Console.WriteLine("Name: ");
        string sname=Consolre.ReadLine();
        while(sname != "Exit")
    {
        Console.WriteLine("Enter the no:of Quizes: ");
            int numOfQuiz=Convert.ToInt32(Console.ReadLine());
        int score=0,totalQuiz=numOfQuiz;
        while(numOfQuiz>0)
        {
            Console.WriteLine("Enter the score for Quiz {0}",totalQuiz-numOfQuiz+1);
            score+=Convert.ToInt32(Console.ReadLine());
            numOfQuiz--;
        }
        score = score/numOfQuiz;
        if(score>90)
            Console.WriteLine("A");
        else if(score >70)
            Console.WriteLine("B");
        else
            Console.WriteLine("C");
        Console.WriteLine("Enter another name or exit? ");
        sname=Console.ReadLine();
    }
}
于 2013-07-16T13:30:57.190 回答