挑战项目 - 开发 foreach 和 if-elseif-else 结构以在 C 语言中处理数组数据#

Challenge project - Develop foreach and if-elseif-else structures to process array data in C#

提问人:westella 提问时间:11/16/2023 最后编辑:Bill Hilemanwestella 更新时间:11/16/2023 访问量:79

问:

因此,我是 C# 的新手,我决定开始 Microsoft 学习培训。在这个特定模块中,我必须创建一个学生评分应用程序,以根据学生的评分考试和额外学分作业来计算和报告学生的成绩。输出应包含学生姓名、考试成绩、总成绩和额外学分。

我很确定我做对了大部分这些事情(我可以看到所需的输出),但我不喜欢额外的学分部分,我基本上只是硬编码了它。我想,标记或标记会派上用场,但我不知道如何使用它。任何帮助都值得赞赏,谢谢。

这是我的最终代码:


int examAssignments = 5;

string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };

int[] sophiaScores = new int[] { 90, 86, 87, 98, 100, 94, 90 };
int[] andrewScores = new int[] { 92, 89, 81, 96, 90, 89 };
int[] emmaScores = new int[] { 90, 85, 87, 98, 68, 89, 89, 89 };
int[] loganScores = new int[] { 90, 95, 87, 88, 96, 96 };

int[] studentScores = new int[10];

string currentStudentLetterGrade = "";


// display the header row for scores/grades
Console.Clear();
Console.WriteLine("Student\t\tExam Score\tOverall\t\tGrade\t\tExtra Credit\n");

/*
The outer foreach loop is used to:
- iterate through student names 
- assign a student's grades to the studentScores array
- sum assignment scores (inner foreach loop)
- calculate numeric and letter grade
- write the score report information
*/
foreach (string name in studentNames)
{
    string currentStudent = name;

    if (currentStudent == "Sophia")
        studentScores = sophiaScores;

    else if (currentStudent == "Andrew")
        studentScores = andrewScores;

    else if (currentStudent == "Emma")
        studentScores = emmaScores;

    else if (currentStudent == "Logan")
        studentScores = loganScores;


    int sumAssignmentScores = 0;

    decimal currentStudentGrade = 0;

    int gradedAssignments = 0;

    /* 
    the inner foreach loop sums assignment scores
    extra credit assignments are worth 10% of an exam score
    */
    foreach (int score in studentScores)
    {
        gradedAssignments++;

        if (gradedAssignments <= examAssignments)
            sumAssignmentScores += score;

        else
            sumAssignmentScores += score / 10;
    }
    currentStudentGrade = (decimal)(sumAssignmentScores) / examAssignments;


    int sumExamScore = 0;
    
    decimal examScore = 0;

    int neededAssignments = 0;

    foreach (int together in studentScores)
    {
        neededAssignments += 1;
        if (neededAssignments <= examAssignments)

            sumExamScore += together;

        else 
            break;
    }
    examScore = (decimal)(sumExamScore) / examAssignments;


    if (currentStudentGrade >= 97)
        currentStudentLetterGrade = "A+";

    else if (currentStudentGrade >= 93)
        currentStudentLetterGrade = "A";

    else if (currentStudentGrade >= 90)
        currentStudentLetterGrade = "A-";

    else if (currentStudentGrade >= 87)
        currentStudentLetterGrade = "B+";

    else if (currentStudentGrade >= 83)
        currentStudentLetterGrade = "B";

    else if (currentStudentGrade >= 80)
        currentStudentLetterGrade = "B-";

    else if (currentStudentGrade >= 77)
        currentStudentLetterGrade = "C+";

    else if (currentStudentGrade >= 73)
        currentStudentLetterGrade = "C";

    else if (currentStudentGrade >= 70)
        currentStudentLetterGrade = "C-";

    else if (currentStudentGrade >= 67)
        currentStudentLetterGrade = "D+";

    else if (currentStudentGrade >= 63)
        currentStudentLetterGrade = "D";

    else if (currentStudentGrade >= 60)
        currentStudentLetterGrade = "D-";

    else
        currentStudentLetterGrade = "F";


    // Student         Grade
    // Sophia:         92.2    A-

    decimal extraCredit = 0;
    int extraGrade = 0;
    int sumExtraCredit = 0;
    decimal extraPoints = 0;
    decimal earnedPoints = 0;

    foreach (int extra in studentScores)
    {
        extraGrade++;
        if (extraGrade > 5)
            sumExtraCredit += extra;
        else 
            continue;
    }

    //extra credit
    if (currentStudent == "Sophia")
        extraCredit = (decimal)(sumExtraCredit) / 2;


    else if (currentStudent == "Andrew")
        extraCredit = (decimal)(sumExtraCredit);


    else if (currentStudent == "Emma")
        extraCredit = (decimal)(sumExtraCredit) / 3;


    else if (currentStudent == "Logan")
        extraCredit = (decimal)(sumExtraCredit);


    //extra credit points 
    if (currentStudent == "Sophia")
        earnedPoints = (decimal)(sumExtraCredit) / 10 / 5;


    else if (currentStudent == "Andrew")
        earnedPoints = (decimal)(sumExtraCredit) / 10 / 5;


    else if (currentStudent == "Emma")
        earnedPoints = (decimal)(sumExtraCredit) / 10 / 5;


    else if (currentStudent == "Logan")
        earnedPoints = (decimal)(sumExtraCredit) / 10 / 5;

    
    Console.WriteLine($"{currentStudent}\t\t{examScore}\t\t{currentStudentGrade}\t\t{currentStudentLetterGrade}\t\t{extraCredit}\t({earnedPoints} pts)");
}
// required for running in VS Code (keeps the Output windows open to view results)
Console.WriteLine("\n\rPress the Enter key to continue");
Console.ReadLine();
C# 哎呀

评论

4赞 quaabaam 11/16/2023
你的问题不清楚,你正在强迫响应者审查你的所有代码和训练代码,以破译你的问题和与之相关的代码区域。此外,如果你正在寻找任何类型的代码审查,你应该把它发布到代码审查。问候。
0赞 Flydog57 11/16/2023
你了解过语句(传统的和更现代的模式匹配类型)吗?您可能想阅读它们switch

答: 暂无答案