Перейти к основному содержимому

Обучающий проект - Разработка структур foreach и if-elseif-else для обработки данных массива в C#

Введение

Создание ветвления кода и итерация по блоку кода - важные возможности для разработчика. В C# оператор if можно использовать для оценки выражения и ветвления пути выполнения. Блок кода оператора foreach можно использовать для итерации по каждому элементу массива. Мощные и расширяемые приложения можно создавать, сочетая возможность итерации по массиву с возможностью ветвления пути выполнения.

Предположим, вы - помощник учителя в школе. Вы работаете с учителем над созданием приложения, которое автоматизирует процесс выставления оценок. Ваши навыки программирования на C# выросли с тех пор, как вы завершили первоначальную версию приложения. Учитель попросил вас обновить приложение. Обновления касаются использования массивов, операторов foreach и if. Преподаватель также хочет, чтобы вы учитывали дополнительные задания при подсчете итоговых оценок.

В этом модуле вы пройдете через процесс обновления приложения Student Grading. Вы будете использовать массивы для хранения имен студентов и оценок за выполненные задания, а также использовать операторы foreach для итерации значений массива. Итоговая оценка каждого студента будет вычисляться внутри блока кода foreach. Вы будете использовать оператор if для присвоения итоговой буквенной оценки. Ваше готовое приложение будет выводить оценки учеников, используя спецификацию отчета об оценках учителя.

К концу этого модуля вы получите опыт разработки приложений, использующих массивы, операторы foreach и if. Вы также сможете создавать приложения, эффективно обрабатывающие данные с помощью вложенных операторов итерации и выбора.

примечание

Это обучающий модуль проекта, в котором вы завершите комплексный проект, следуя пошаговым инструкциям.

Цели обучения

В этом модуле вы научитесь:

  • Используйте Visual Studio для разработки консольного приложения C#, которое использует циклы foreach для доступа к данным массива.
  • Используйте операторы if для оценки выражений и создания ветвей кода. Предварительные условия

Обзор проекта

Вы разрабатываете приложение Student Grading, которое автоматизирует подсчет оценок для каждого ученика в классе. Параметры вашего приложения следующие:

  • Создайте консольное приложение на C#.
  • Начните с четырех студентов. У каждого студента есть пять экзаменационных оценок.
  • Каждый экзаменационный балл - это целое число, 0-100, где 100 означает 100 % правильности.
  • Общий экзаменационный балл студента - это среднее значение его пяти экзаменационных баллов.
  • Критерии для дополнительных зачетных заданий:
    • Включите оценки за дополнительные задания в массив оценок студента.
    • Дополнительные задания оцениваются в 10 % от экзаменационного балла (при подсчете итоговой числовой оценки).
    • Добавьте баллы за дополнительные задания к общему экзаменационному баллу студента перед вычислением итоговой числовой оценки.
  • Ваше приложение должно автоматически присваивать буквенные оценки на основе рассчитанного итогового балла для каждого студента.
  • Приложение должно выводить/отображать имя каждого студента и его оценку в форматированном виде.
  • Приложение должно поддерживать добавление других студентов и оценок с минимальным влиянием на код.

Проект начального кода для этого модуля Guided project:

using System;

// initialize variables - graded assignments
int currentAssignments = 5;

int sophia1 = 90;
int sophia2 = 86;
int sophia3 = 87;
int sophia4 = 98;
int sophia5 = 100;

int andrew1 = 92;
int andrew2 = 89;
int andrew3 = 81;
int andrew4 = 96;
int andrew5 = 90;

int emma1 = 90;
int emma2 = 85;
int emma3 = 87;
int emma4 = 98;
int emma5 = 68;

int logan1 = 90;
int logan2 = 95;
int logan3 = 87;
int logan4 = 88;
int logan5 = 96;

int sophiaSum = 0;
int andrewSum = 0;
int emmaSum = 0;
int loganSum = 0;

decimal sophiaScore;
decimal andrewScore;
decimal emmaScore;
decimal loganScore;

sophiaSum = sophia1 + sophia2 + sophia3 + sophia4 + sophia5;
andrewSum = andrew1 + andrew2 + andrew3 + andrew4 + andrew5;
emmaSum = emma1 + emma2 + emma3 + emma4 + emma5;
loganSum = logan1 + logan2 + logan3 + logan4 + logan5;

sophiaScore = (decimal)sophiaSum / currentAssignments;
andrewScore = (decimal)andrewSum / currentAssignments;
emmaScore = (decimal)emmaSum / currentAssignments;
loganScore = (decimal)loganSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
Console.WriteLine("Andrew:\t\t" + andrewScore + "\tB+");
Console.WriteLine("Emma:\t\t" + emmaScore + "\tB");
Console.WriteLine("Logan:\t\t" + loganScore + "\tA-");

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();
  • В коде объявлены переменные, используемые для определения имен студентов и индивидуальных оценок за экзамен для каждого студента.
  • Код включает переменные и алгоритмы, используемые для суммирования баллов за экзамен и вычисления среднего балла за экзамен для каждого студента.
  • Код включает в себя жестко закодированную буквенную оценку, которую разработчик должен применять вручную.
  • Код включает операторы Console.WriteLine() для отображения отчета оценок студентов.

Ваша задача - обновить существующий код и включить в него следующие возможности:

  • Используйте массивы для хранения имен студентов и оценок за задания.
  • Используйте оператор foreach для перебора имен студентов в качестве внешнего цикла программы.
  • Используйте оператор if во внешнем цикле, чтобы определить имя текущего студента и получить доступ к его оценкам за задания.
  • С помощью оператора foreach во внешнем цикле выполните итерацию по массиву баллов за задания и просуммируйте их значения.
  • Используйте обновленный алгоритм во внешнем цикле для вычисления среднего балла за экзамен для каждого студента.
  • Используйте конструкцию if-elseif-else во внешнем цикле для оценки среднего экзаменационного балла и автоматического присвоения буквенной оценки.
  • Интегрируйте баллы за дополнительные задания при вычислении итогового балла и буквенной оценки студента следующим образом:
    • Ваш код должен определять дополнительные зачеты, основываясь на количестве элементов в массиве баллов студента.
    • Перед добавлением баллов за дополнительные зачеты к сумме баллов за экзамен необходимо применить весовой коэффициент 10% к заданиям за дополнительные зачеты.

В следующем списке указаны буквенные оценки, соответствующие числовым баллам:

97 - 100   A+
93 - 96 A
90 - 92 A-
87 - 89 B+
83 - 86 B
80 - 82 B-
77 - 79 C+
73 - 76 C
70 - 72 C-
67 - 69 D+
63 - 66 D
60 - 62 D-
0 - 59 F

Обновленному приложению необходимо создать форматированный отчет об оценках студентов, который выглядит следующим образом:

Student         Grade

Sophia: 92.2 A-
Andrew: 89.6 B+
Emma: 85.6 B
Logan: 91.2 A-

Упражнение. Создание массивов и циклов foreach

В этом упражнении вы просмотрите код проекта Starter, а затем приступите к обновлению приложения. Первым заданием будет создание массивов, в которых будут храниться оценки за экзамены студентов. После того как данные приложения будут доступны в массивах, вы начнете работать над циклом foreach, который можно использовать для суммирования оценок студентов.

В ходе этого упражнения вы выполните следующие подробные задания:

  1. Просмотр кода: изучите содержимое файла Program.cs.

  2. Массивы: Создайте массивы, в которых будут храниться оценки за задания каждого студента.

  3. Итерация: Создайте цикл foreach, который можно использовать для суммирования оценок заданий Софии.

  4. Вычислите и выведите на экран среднюю оценку заданий Софии.

  5. Проверочный тест: выполните проверочный тест для кода, который вы разработали в этом упражнении.

Просмотрите содержимое файла Program.cs.

  1. Уделите несколько минут просмотру кода в файле Program.cs.
  2. Обратите внимание, что верхняя часть вашего кода начинается с оператора using и списка объявлений переменных.

Оператор using позволяет вам писать код, реализующий члены пространства имен System, без необходимости указывать System. Например, ваш код может использовать метод Console.WriteLine() без необходимости указывать System.Console.WriteLine(). Кроме всего прочего, оператор using облегчает чтение вашего кода.

Далее следует строка комментария и список переменных, которые используются для хранения оценок за задания для каждого студента. Первая переменная, currentAssignments, используется для хранения количества экзаменов, которые были оценены.

Переменные оценки заданий представляют собой отличную возможность для создания и использования массивов! 3. Прокрутите вниз и просмотрите две группы строк кода объявления переменных.

int sophiaSum = 0;
int andrewSum = 0;
int emmaSum = 0;
int loganSum = 0;

decimal sophiaScore;
decimal andrewScore;
decimal emmaScore;
decimal loganScore;

Первая группа переменных - это целые числа, которые используются для хранения суммы баллов за экзамен.

Вторая группа переменных - десятичные числа, которые используются для вычисления среднего балла. В коде используются десятичные числа, потому что при вычислении целых чисел дробная часть вычисляемого значения округляется.

Обратите внимание, что вы использовали уникальную переменную для каждого студента. Это может дать еще одну возможность сократить количество строк кода в вашем обновленном приложении.

  1. Прокрутите страницу еще немного вниз и уделите минуту просмотру следующего кода:
sophiaSum = sophia1 + sophia2 + sophia3 + sophia4 + sophia5;
andrewSum = andrew1 + andrew2 + andrew3 + andrew4 + andrew5;
emmaSum = emma1 + emma2 + emma3 + emma4 + emma5;
loganSum = logan1 + logan2 + logan3 + logan4 + logan5;

sophiaScore = (decimal)sophiaSum / currentAssignments;
andrewScore = (decimal)andrewSum / currentAssignments;
emmaScore = (decimal)emmaSum / currentAssignments;
loganScore = (decimal)loganSum / currentAssignments;

Первая группа уравнений используется для вычисления суммы баллов за задания для каждого студента.

Вторая группа уравнений вычисляет средний балл. Обратите внимание, что числитель приведен к decimal, чтобы при делении сохранилась дробная составляющая. 5. Уделите минутку просмотру финального раздела кода:

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
Console.WriteLine("Andrew:\t\t" + andrewScore + "\tB+");
Console.WriteLine("Emma:\t\t" + emmaScore + "\tB");
Console.WriteLine("Logan:\t\t" + loganScore + "\tA-");

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();

В этом разделе печатается отформатированный вывод в соответствии с указаниями учителя. Первая строка - это строка заголовка с названиями столбцов, за которой следуют имена и оценки для каждого ученика.

Оператор Console.ReadLine() приостанавливает работу приложения, чтобы пользователь приложения мог просмотреть выведенные данные.

  1. Запустите приложение. Убедитесь что выводимые данные соотвествуют
Student         Grade

Sophia: 92.2 A-
Andrew: 89.6 B+
Emma: 85.6 B
Logan: 91.2 A-
Press the Enter key to continue

На этом проверка кода завершена. Это приложение выглядит как прекрасная возможность применять массивы, итерации и операторы выбора.

Пришло время приступить к обновлениям!

Создайте массивы баллов за задание

В этой задаче вы замените переменные, содержащие отдельные баллы, массивами, содержащими оцененные баллы за задания для каждого учащегося.

  1. В редакторе кода Visual Studio прокрутите до верхней части файла Program.cs.
  2. Создайте пустую строку кода ниже строки, используемой для объявления переменной currentAssignments.
  3. В новой строке кода, чтобы создать целочисленный массив, который будет использоваться для оценок за задания Софии, введите следующий код:
int[] sophiaScores = new int[5];

Обратите внимание, что в этом коде используется оператор new, чтобы указать, что вы создаете новый экземпляр массива. Набор квадратных скобок в int[] сообщает компилятору, что sophiaScores будет целочисленным массивом, а набор квадратных скобок в int[5] используется для указания количества элементов в массиве.

Возможно, вы помните, что у вас есть возможность присваивать значения массиву как часть объявления.

примечание

В ситуациях, когда вы заранее знаете значения элементов массива и когда эти значения вряд ли изменятся, имеет смысл присваивать им значения при объявлении массива. Хорошим примером может служить массив, который используется для хранения дней недели. Очевидно, что если значения массива неизвестны, вы не можете указать их при объявлении массива, и для объявления массива вы будете использовать синтаксис, который вы ввели выше.

  1. Чтобы указать баллы Софии в объявлении, обновите объявление для sophiaScores следующим образом:
int[] sophiaScores = new int[] { 90, 86, 87, 98, 100 };
  1. Убедитесь, что баллы, указанные внутри {}, соответствуют отдельным баллам за задания Софии. Пять переменных, которые используются для хранения индивидуальных оценок, следующие:
int sophia1 = 90;
int sophia2 = 86;
int sophia3 = 87;
int sophia4 = 98;
int sophia5 = 100;
  1. Удалите строки кода, в которых объявляются переменные, содержащие индивидуальные оценки Софии. Поскольку в дальнейшем вы будете использовать массив sophiaScores для доступа к оценкам Софии, эти переменные больше не нужны.
  2. Чтобы создать целочисленный массив, который будет использоваться для оценок за задания Эндрю, введите следующий код:
int[] andrewScores = new int[] {92, 89, 81, 96, 90};
  1. Создайте объявления массива для других учащихся. Обязательно назовите массивы, используя имя учащегося, а затем скопируйте значения его индивидуальных баллов в {} в строке объявления массива.
  2. Убедитесь, что вы точно скопировали индивидуальные оценки в объявления массивов, а затем удалите переменные, в которых хранились индивидуальные оценки для Эндрю, Эммы и Логана.

Теперь код в верхней части вашего файла Program.cs должен быть похож на следующий:

// initialize variables - graded assignments 
int currentAssignments = 5;

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

int sophiaSum = 0;

Создайте итерацию foreach для расчета оценки Софии.

В этом задании вы замените существующий код, используемый для выполнения вычислений, на оператор foreach, который итерирует оценки заданий Софии. Вы будете использовать блок кода цикла foreach для вычисления суммы баллов Софии, а затем вычислите и отобразите оценку Софии.

  1. Найдите строки кода, которые используются для объявления переменных и выполнения вычислений для значений суммы и среднего балла. Код должен выглядеть примерно так:
int sophiaSum = 0;
int andrewSum = 0;
int emmaSum = 0;
int loganSum = 0;

decimal sophiaScore;
decimal andrewScore;
decimal emmaScore;
decimal loganScore;

sophiaSum = sophia1 + sophia2 + sophia3 + sophia4 + sophia5;
andrewSum = andrew1 + andrew2 + andrew3 + andrew4 + andrew5;
emmaSum = emma1 + emma2 + emma3 + emma4 + emma5;
loganSum = logan1 + logan2 + logan3 + logan4 + logan5;

sophiaScore = (decimal)sophiaSum / currentAssignments;
andrewScore = (decimal)andrewSum / currentAssignments;
emmaScore = (decimal)emmaSum / currentAssignments;
loganScore = (decimal)loganSum / currentAssignments;
  1. Удалите строки кода, которые используются для вычисления суммы.

Вы будете писать код для вычисления суммы внутри цикла foreach, когда закончите корректировку.

  1. Удалите строки кода, в которых объявлены переменные int и decimal для Эндрю, Эммы и Логана.
примечание

Оставьте строки кода, объявляющие переменные для Софии.

  1. Удалите строки кода, которые используются для расчета среднего балла для Эндрю, Эммы и Логана.
примечание

Оставьте строку кода, содержащую расчет среднего балла для Софии.

  1. Прокрутите код вниз, а затем удалите строки кода, используемые для сообщения оценок для Эндрю, Эммы и Логана.
  2. Убедитесь, что обновленный файл Program.cs содержит следующий код:
// initialize variables - graded assignments 
int currentAssignments = 5;

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

int sophiaSum = 0;

decimal sophiaScore;

sophiaScore = (decimal)sophiaSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();
  1. Создайте пустую строку кода после строки, используемой для объявления sophiaScore.
  2. Чтобы создать оператор foreach, который вы будете использовать для перебора оценок Софии, введите следующий код:
foreach (int score in sophiaScores)
{
}

Обратите внимание, что этот код инстанцирует целочисленную переменную с именем score как часть оператора foreach. Вы будете использовать score внутри блока кода foreach для доступа к значениям массива sophiaScores. 9. Чтобы создать уравнение, которое суммирует счет Софии, обновите блок кода foreach следующим образом:

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;
}

Обратите внимание, что в этом коде используется оператор += для добавления значения score к sophiaSum внутри цикла foreach. Разработчики часто используют += как сокращение при вычислении суммы. Это уравнение эквивалентно следующему:

sophiaSum = sophiaSum + score;

После того как в цикле foreach будут пройдены все значения в массиве sophiaScores, sophiaSum будет содержать сумму ее оценок. 10. Уделите минуту просмотру своего кода.

Теперь ваш код должен выглядеть так, как показано ниже:

// initialize variables - graded assignments 
int currentAssignments = 5;

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

int sophiaSum = 0;

decimal sophiaScore;

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;
}

sophiaScore = (decimal)sophiaSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();

На данный момент вы создали массивы баллов для всех студентов и вычисляете сумму баллов Софии в цикле foreach, который перебирает все ее баллы. Вам еще предстоит пройти долгий путь, чтобы выполнить все запланированные обновления, но это хороший момент, чтобы проверить свой прогресс.

  1. Запустите код. Убедитесь что вывод соотвествует следующему:
Student         Grade

Sophia: 92.2 A-
Press the Enter key to continue

Поздравляем, вы создали приложение, которое использует цикл foreach для перебора элементов массива и выполнения вычислений на основе содержимого массива. Вы добиваетесь значительных успехов в обновлении необходимых приложений!

Упражнение - Построение структуры вложенного цикла для вычисления оценок учащихся

В этом упражнении вы добавите строковый массив для хранения имен студентов, а затем реализуете вложенную структуру foreach, которая будет перебирать имена студентов во внешнем цикле и баллы студентов во внутреннем цикле. Вы начнете с создания массива studentNames и цикла foreach, который будет выполнять итерацию по элементам массива. Затем вы перенесете код, который используется для вычисления оценок Софии, в блок кода цикла «имена». Наконец, вы реализуете логику кода, которая использует имя ученика для доступа к его массиву оценок, вычисления среднего балла и записи оценки в консоль.

В ходе этого упражнения вы выполните следующие подробные задания:

  1. Создайте массив имен: Создайте массив имен студентов.

  2. Создайте внешний цикл: Создайте цикл foreach, который перебирает имена студентов.

  3. Разработайте блок кода внешнего цикла: Переместите код, который вычисляет и сообщает оценку Софии, поместив его в блок кода цикла «имена».

  4. Обновите вычисления и отчеты: Обновите код, выполняющий вычисления баллов студентов, используя новый массив баллов.

Создайте массив имен студентов и внешний цикл foreach.

В этом задании вы создадите массив имен студентов и цикл foreach, который будет перебирать имена студентов.

  1. Убедитесь, что файл Program.cs открыт в редакторе кода Visual Studio.

  2. Прокрутите верхнюю часть файла кода и найдите строки кода, в которых объявлены массивы оценок.

  3. Создайте пустую строку кода под объявлением массивов баллов.

Ваша пустая строка кода должна располагаться между строками, используемыми для объявления массивов баллов, и строкой, используемой для объявления sophiaSum.

  1. Чтобы создать строковый массив с именем studentNames, в котором хранятся имена студентов, введите следующий код:
// Student names
string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };

Обратите внимание, что в объявлении вы указали имена студентов.

  1. Чтобы создать оператор foreach, который можно использовать для перебора имен студентов, введите следующий код:
foreach (string name in studentNames)
{
}
  1. Чтобы убедиться, что ваш цикл foreach выполняет итерацию по массиву StudentNames, как предполагалось, обновите блок кода оператора foreach следующим образом:
foreach (string name in studentNames)
{
Console.WriteLine($"{name}");

}
  1. Уделите минутку и просмотрите созданный вами код.
// Student names
string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };

foreach (string name in studentNames)
{
Console.WriteLine($"{name}");

}

Ваш код будет использовать этот цикл foreach в качестве внешнего цикла вашего приложения. В ходе этого упражнения вы реализуете в своем приложении следующую логику.

Для каждого из студентов в массиве studentNames ваше приложение будет:

  • определит текущего студента.
  • получит доступ к оценкам текущего студента.
  • вычислять оценку текущего студента (сумму и среднее значение).
  • записывать оценку текущего студента в консоль.

Однако пока что вы будете просто записывать имена студентов в консоль.

  1. Запустите приложение. Убедитесь что вывод соответствует следующему:
Sophia
Andrew
Emma
Logan
Student Grade

Sophia: 92.2 A-
Press the Enter key to continue

Вычислите оценку Софии внутри внешнего цикла имен

В этой задаче вы переместите код, который вычисляет и сообщает оценку Софии, поместив его в блок кода цикла «names».

  1. В редакторе кода Visual Studio найдите строки кода, которые используются для расчета и отчета об оценке Софии.
int sophiaSum = 0;

decimal sophiaScore;

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;

}

sophiaScore = (decimal)sophiaSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
примечание

Следующим вашим шагом будет перемещение этого кода из текущего местоположения в блок кода цикла foreach «names».

  1. С помощью операции вырезания и вставки перенесите код, который вычисляет и сообщает оценку Софии, в блок кода цикла foreach «names».
  2. Обновите свой код, чтобы отображать правильные отступы строк кода.
подсказка

Visual Studio предоставляет команду Format Document, с помощью которой можно обновлять форматирование кода. Меню Edit-Advanced-Format Document или сочетание горячих клавиш Ctrl+E,D (удерживая Ctrl нажимаем последовательно E,D)

  1. Убедитесь, что ваши обновления соответствуют следующему коду:
// Student names
string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan" };

foreach (string name in studentNames)
{
Console.WriteLine($"{name}");
int sophiaSum = 0;

decimal sophiaScore;

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;

}

sophiaScore = (decimal)sophiaSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
}

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();

Обратите внимание, что на этом этапе ваш код рассчитает и сообщит оценку Софии независимо от name текущего ученика. Вы займетесь этим в ближайшее время. 5. Удалите следующий код:

Console.WriteLine($"{name}");
  1. В только что созданную пустую строку кода введите следующий код:
if (name == "Sophia")
{
  1. Создайте пустую строку кода после кода, который используется для записи оценки Софии на консоль.
  2. Чтобы закрыть блок кода оператора if, введите следующий код:
}
  1. Отформатируйте свой код, чтобы отображать правильные отступы строк кода.
  2. Уделите минутку, чтобы просмотреть свой код. Ваш код должен соответствовать следующему коду:
// initialize variables - graded assignments 
int currentAssignments = 5;

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

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

foreach (string name in studentNames)
{
if (name == "Sophia")
{
int sophiaSum = 0;
decimal sophiaScore;

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;
}

sophiaScore = (decimal)(sophiaSum) / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");
}
}

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();

Обратите внимание, что оператор if внутри внешнего блока кода foreach ограничивает оценку того, какая оценка учащегося рассчитывается и сообщается. Это не совсем то, что вам нужно, но это шаг в правильном направлении.

  1. Запустите приложение. Убедитесь что выводимые данные соотвествуют
Student         Grade

Sophia: 92.2 A-

Обновите вложенный цикл для расчета всех оценок учащихся.

В этом задании вы обновите код, выполняющий расчет баллов студентов, используя новый массив scores. Вы начнете с создания массива studentScores, который может быть использован для хранения оценок любого студента. Затем вы создадите конструкцию if ... elseif, которая использует имя текущего студента для присвоения его массива баллов массиву studentScores. Наконец, вы обновите код, который вычисляет и сообщает оценки студента. После завершения работы отчет должен содержать имя и числовые оценки всех студентов.

  1. Создайте пустую строку кода под объявлением массива studentNames.

Пустая строка должна находиться над внешним оператором foreach.

  1. Чтобы создать целочисленный массив, который можно использовать для хранения оценок текущего студента, введите следующий код:
int[] studentScores = new int[10];

Обратите внимание, что на этом этапе этот код не присваивает массиву никаких значений. Вы просто указываете, что массив может содержать 10 элементов. 3. Создайте пустую строку кода в верхней части внешнего блока кода foreach. Пустая строка должна находиться внутри блока кода foreach и над оператором if, который определяет, соответствует ли имя имени София. 4. Чтобы создать строковую переменную, которая будет использоваться для хранения имени текущего студента, введите следующий код

string currentStudent = name;
к сведению

Вы можете продолжать использовать name для отслеживания имени текущего учащегося при переборе массива имен, но использование currentName облегчит понимание логики вашего кода при создании приложения на следующих этапах.

  1. Чтобы заменить currentStudent на name в операторе if, который проверяет, равно ли имя Sophia, обновите код следующим образом:
if (currentStudent == "Sophia")
  1. Переместите код, который вычисляет и сообщает оценку Софии, в место под блоком кода.

Вы перемещаете весь код, находящийся в блоке кода, в место под блоком кода. Причина этого станет очевидной в ходе следующих шагов.

  1. Убедитесь, что код в вашем внешнем блоке кода foreach соответствует следующему коду:
{
string currentStudent = name;

if (currentStudent == "Sophia")
{
}

int sophiaSum = 0;
decimal sophiaScore;

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;

}

sophiaScore = (decimal)sophiaSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");

}
  1. Чтобы присвоить массив sophiaScores массиву studentScores, когда currentStudent == «Sophia», обновите код оператора if следующим образом:
if (currentStudent == "Sophia")
studentScores = sophiaScores;

Обратите внимание, что во время этого обновления кода вы удалили фигурные скобки из блока кода оператора if. 9. Чтобы добавить оператор else if, который присваивает массив andrewScores массиву studentScores, когда currentStudent == «Andrew», введите следующий код:

else if (currentStudent == "Andrew")
studentScores = andrewScores;
  1. Создайте еще один оператор else if, чтобы назначить массив emmaScores для StudentScores, когда currentStudent == "Emma"
  2. Создайте оператор else if, чтобы назначить массив loganScores для StudentScores, когда currentStudent == "Logan"
  3. Убедитесь, что ваш блок кода foreach соответствует следующему коду:
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 sophiaSum = 0;

decimal sophiaScore;

foreach (int score in sophiaScores)
{
// add the exam score to the sum
sophiaSum += score;

}

sophiaScore = (decimal)sophiaSum / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");

}

Далее вам необходимо обновить внутренний цикл foreach, чтобы он использовал StudentScores и «обезличил» переменные, которые вы используете в своих расчетах. 13. Чтобы заменить sophiaScores StudentScores в цикле foreach, который перебирает массив баллов, обновите свой код следующим образом:

foreach (int score in studentScores)
  1. Чтобы заменить объявления переменных, специфичные для Софии, более общими именами, обновите свой код следующим образом:
int sumAssignmentScores = 0;

decimal currentStudentGrade = 0;

Эти два объявления переменных предназначены для замены следующих объявлений переменных, специфичных для Софии:

int sophiaSum = 0;

decimal sophiaScore;
  1. Чтобы применить новое имя переменной к уравнению, используемому для суммирования оценок учащихся, обновите внутренний блок кода foreach следующим образом:
foreach (int score in studentScores)
{
// add the exam score to the sum
sumAssignmentScores += score;
}
  1. Чтобы применить новое имя переменной к уравнению, используемому для расчета среднего балла, обновите свой код следующим образом:
currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;
  1. Уделите минутку, чтобы просмотреть свой код.
int[] studentScores = new int[10];

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;

// initialize/reset the sum of scored assignments
int sumAssignmentScores = 0;

// initialize/reset the calculated average of exam + extra credit scores
decimal currentStudentGrade = 0;

foreach (int score in studentScores)
{
// add the exam score to the sum
sumAssignmentScores += score;
}

currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;

Console.WriteLine("Student\t\tGrade\n");
Console.WriteLine("Sophia:\t\t" + sophiaScore + "\tA-");

}

Ваши вложенные циклы foreach теперь будут перебирать имена учащихся и использовать оценки учащихся для расчета их оценок, но вам все равно необходимо обновить код, используемый для создания отчета о результатах.

  1. Чтобы вывести имя учащегося и рассчитанную оценку на консоль, обновите второй оператор Console.WriteLine следующим образом:
Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");

Обратите внимание, что в этом коде буквенная оценка заменена знаком «?». Над автоматизацией выставления буквенных оценок вы поработаете в следующем упражнении.

  1. Переместите оператор Console.WriteLine, который используется для записи заголовков столбцов отчета о результатах, в место, расположенное чуть выше внешнего цикла foreach.

Вы не хотите повторять заголовки столбцов для каждой оценки студента, поэтому переместите этот код в точку над внешним циклом foreach.

  1. Уделите минутку и просмотрите код приложения. Ваше полное приложение теперь должно соответствовать следующему коду:
// initialize variables - graded assignments 
int currentAssignments = 5;

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

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

int[] studentScores = new int[10];

// Write the Report Header to the console
Console.WriteLine("Student\t\tGrade\n");

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;

// initialize/reset the sum of scored assignments
int sumAssignmentScores = 0;

// initialize/reset the calculated average of exam + extra credit scores
decimal currentStudentGrade = 0;

foreach (int score in studentScores)
{
// add the exam score to the sum
sumAssignmentScores += score;
}

currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;

Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");
}

Обновлен код, генерирующий отчет об оценках учащегося; Похоже, вы готовы проверить свою работу. 21. Запустите код и проверьте что его выполнение соотвествует следующему:

Student         Grade

Sophia 92.2 ?
Andrew 89.6 ?
Emma 85.6 ?
Logan 91.2 ?
Press the Enter key to continue

Поздравляем, ваше приложение прошло долгий путь от того, с чего вы начинали. Вы эффективно используете массивы и итерации foreach, а также интегрировали оператор if, который позволяет вашему коду выбирать правильный массив оценок.

Упражнение - Реализация ветвлений кода с помощью операторов выбора

В этом упражнении вы разработаете код, который автоматически присваивает студенту буквенную оценку на основе его итоговой числовой оценки, а также обновите приложение, чтобы баллы за дополнительные кредитные проекты учитывались в итоговой оценке студента. Вы начнете с написания конструкции if-elseif-else, которая может быть использована для оценки числового балла студента и присвоения буквенной оценки. Далее вы изучите требования приложения, связанные с дополнительными зачетными работами, а затем пройдете путь через необходимые обновления кода. В ходе этого упражнения вам предстоит выполнить следующие подробные задания:

  • Разработайте конструкцию if-elseif-else, которая оценивает оценку студента для присвоения буквенной оценки. Выражение, которое оценивается, сравнивает числовую оценку ученика с диапазоном оценок, взятых из таблицы оценок, предоставленной учителем.

  • Интегрируйте баллы за дополнительные зачеты в массив баллов каждого студента, а затем обновите код, который используется для вычисления числового балла студента. Код foreach, используемый для суммирования оценок студентов, будет обновлен, чтобы включить оператор if, который разветвляет код. В одной ветви к сумме будут применяться экзаменационные баллы, а в другой - баллы за дополнительные задания.

Назначайте буквенные оценки с помощью конструкции if-elseif-else.

В этом задании вы разработаете структуру if-elseif-else, которая может быть использована для присвоения буквенных оценок на основе вычисленного числового балла.

  1. Убедитесь, что файл Program.cs открыт в редакторе кода Visual Studio.

  2. Создайте пустую строку кода под строкой, используемой для объявления массива studentScores.

  3. Чтобы создать строковую переменную, в которой будет храниться буквенная оценка студента, введите следующий код:

string currentStudentLetterGrade = "";
  1. Прокрутите вниз до нижней части файла Program.cs.

  2. Добавьте пустую строку кода под строкой, которая присваивает вычисляемое значение currentStudentGrade.

  3. Потратьте минуту, чтобы рассмотреть диаграмму оценок, которая показывает буквенные оценки, соответствующие числовым баллам.

97 - 100   A+
93 - 96 A
90 - 92 A-
87 - 89 B+
83 - 86 B
80 - 82 B-
77 - 79 C+
73 - 76 C
70 - 72 C-
67 - 69 D+
63 - 66 D
60 - 62 D-
0 - 59 F

Обратите внимание, что верхний ряд баллов, значения которых больше или равны 97, имеют буквенную оценку «A+». Другими словами, если итоговый балл студента >= 97, ему будет присвоена буквенная оценка «A+».

  1. Чтобы создать оператор if, который присваивает A+ значению currentStudentLetterGrade, когда оценка студента больше или равна 97, введите следующий код:
if (currentStudentGrade >= 97)
currentStudentLetterGrade = "A+";
  1. Чтобы создать оператор else if, который присваивает A значению currentStudentLetterGrade, когда балл учащегося больше или равен 93, введите следующий код:
else if (currentStudentGrade >= 93)
currentStudentLetterGrade = "A";

Выражение else if не присвоит A текущей буквенной оценке CurrentStudentLetterGrade, если оценка ученика больше или равна 97, потому что это выражение вернуло true в предыдущем if.

Вы можете расширить этот шаблон else if по мере продвижения вниз по строкам диаграммы буквенных оценок. Когда вы достигнете конца диаграммы, вы можете использовать последнее else, чтобы поймать любое значение currentStudentGrade, которое меньше 60.

  1. Создайте операторы else if, которые присваивают буквенные оценки currentStudentLetterGrade для диапазонов баллов от 60 до 92.

После выполнения этого шага у вас должна получиться структура оператора if, соответствующая следующему коду:

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, учитывающий оставшиеся баллы.

  1. Чтобы создать else, которое применяется к баллам ниже 60, введите следующий код:
else
currentStudentLetterGrade = "F";
  1. Уделите минутку и просмотрите код приложения. Ваш код Program.cs должен соответствовать следующему коду:
// initialize variables - graded assignments
int currentAssignments = 5;

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

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

int[] studentScores = new int[10];

string currentStudentLetterGrade = "";

// Display the Report Header
Console.WriteLine("Student\t\tGrade\n");

foreach (string name in studentNames)
{
string currentStudent = name;

if (currentStudent == "Sophia")
// assign Sophia's scores to the studentScores array
studentScores = sophiaScores;

else if (currentStudent == "Andrew")
// assign Andrew's scores to the studentScores array
studentScores = andrewScores;

else if (currentStudent == "Emma")
// assign Emma's scores to the studentScores array
studentScores = emmaScores;

else if (currentStudent == "Logan")
// assign Logan's scores to the studentScores array
studentScores = loganScores;

// initialize/reset the sum of scored assignments
int sumAssignmentScores = 0;

// initialize/reset the calculated average of exam + extra credit scores
decimal currentStudentGrade = 0;

foreach (int score in studentScores)
{
// add the exam score to the sum
sumAssignmentScores += score;
}

currentStudentGrade = (decimal)(sumAssignmentScores) / currentAssignments;

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";

Console.WriteLine($"{name}\t\t{currentStudentGrade}\t?");
}

Console.WriteLine("Press the Enter key to continue");
Console.ReadLine();

Обратите внимание, что ваше приложение организовано очень логично, сверху вниз:

  • Вы инициализируете переменные и создаете массивы, которые служат источником данных для приложения. У вас есть массивы, в которых хранятся баллы студентов, а также массив, в котором хранятся имена студентов. У вас также есть массив studentScores, не зависящий от студента, который вы можете использовать для хранения оценок любого студента, когда придет время подсчитывать оценки.

  • У вас есть оператор Console.WriteLine(), который выводит на консоль метки столбцов для отчета об оценках.

  • У вас есть внешний цикл foreach, который итерирует массив studentNames, предоставляя вам блок кода, который повторяется для каждого студента.

  • Вы продолжаете организовывать свой код, используя подход «сверху вниз», внутри блока кода внешнего цикла foreach:

    • У вас есть оператор if для оценки имени текущего студента, например if (currentStudent == «Sophia»). Когда выражение принимает значение true, вы присваиваете массив оценок студента вашему диагностическому массиву, например: studentScores = sophiaScores;

    • Вы объявляете две переменные, которые необходимы для расчета оценок студентов. Первая переменная, sumAssignmentScores, используется для вычисления суммы баллов за задания. Вторая переменная, currentStudentGrade, используется для вычисления итоговой числовой оценки. Вы инициализируете переменные значением 0.

    • В цикле foreach выполняется итерация по переменным studentScores для вычисления значения sumAssignmentScores.

    • Вы вычисляете текущую оценку студента (CurrentStudentGrade) путем деления суммы баллов за задание (SumAssignmentScores) на количество заданий в журнале оценок. Количество оцененных заданий хранится в переменной с именем currentAssignments.

    • У вас есть конструкция if-elseif-else, которая присваивает буквенные оценки на основе значения currentStudentGrade.

    • У вас есть оператор Console.WriteLine(), который записывает имена студентов и оценки на консоль, чтобы завершить отчет об оценках.

  1. Найдите оператор Console.WriteLine(), который записывает имена и оценки учащихся в консоль.
Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t?");

Обратите внимание, что вам все равно необходимо включить рассчитанную буквенную оценку в отчет об оценивании.

  1. Чтобы включить значение currentStudentLetterGrade в отчет об оценивании, обновите свой код следующим образом:
Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t{currentStudentLetterGrade}");
  1. Запустите приложение. Убедитесь что вывод соотвествует следующему:
Student         Grade

Sophia 92.2 A-
Andrew 89.6 B+
Emma 85.6 B
Logan 91.2 A-
Press the Enter key to continue

Ваше приложение действительно работает. Теперь вам нужно интегрировать дополнительные кредитные задания.

Интегрируйте дополнительные кредитные рейтинги в ветку кода

В этом задании вы обновите приложение, чтобы оно учитывало дополнительные зачетные работы, сданные учениками. Ученики выполняют дополнительные зачетные проекты, чтобы получить бонусные баллы, которые могут помочь повысить их оценку. Учитель предоставил вам баллы за дополнительные задания для каждого ученика на основе того, что ученики сдали:

  • София: 94, 90
  • Эндрю: 89
  • Эмма: 89, 89, 89
  • Логан: 96

Для выполнения этого задания вы будете использовать эти дополнительные зачетные баллы и требования к приложению, предоставленные преподавателем.

  1. Потратьте минуту на то, чтобы рассмотреть требования к проекту, связанные с дополнительными кредитными заданиями.

В разделе «Подготовка» для этого модуля «Управляемый проект» есть раздел «Обзор проекта», который включает следующие требования:

В вашем приложении должны быть предусмотрены дополнительные зачетные задания.

  • Оценки за дополнительные задания должны быть включены в массив оценок студента.
  • Дополнительные задания будут составлять 10 % от экзаменационного балла, когда они будут применяться к итоговой числовой оценке.
  • Баллы за дополнительные задания должны быть добавлены к общему экзаменационному баллу студента перед подсчетом итоговой числовой оценки.

Интегрируйте баллы за дополнительные зачеты при вычислении итоговой числовой и буквенной оценки студента следующим образом:

  • Ваш код должен определять дополнительные зачетные задания на основе количества элементов в массиве баллов студента.
  • Перед добавлением баллов за дополнительные зачеты к сумме экзаменационных оценок необходимо применить весовой коэффициент 10 % к заданиям за дополнительные зачеты.
  1. Прокрутите до начала файла Program.cs
  2. Чтобы добавить дополнительные баллы Софии в массив sophiaScores, обновите свой код следующим образом:
int[] sophiaScores = new int[] { 90, 86, 87, 98, 100, 94, 90 };

Обратите внимание, что вы добавили дополнительные кредитные баллы 94 и 90 в список баллов, включенных в массив. Просто.

  1. Добавьте дополнительные баллы других студентов в их массивы баллов.
  2. Убедитесь, что массивы оценок учащихся соответствуют следующему коду:
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 };
  1. Прокрутите вниз, чтобы найти внутренний цикл foreach, который используется для суммирования оценок за задания.
foreach (int score in studentScores)
{
// add the exam score to the sum
sumAssignmentScores += score;
}
  1. Потратьте минуту на то, чтобы обдумать обновления, которые вам необходимо внедрить.

Во-первых, подумайте о том, что вы уже знаете:

  • Вы знаете, что цикл foreach будет последовательно просматривать все элементы массива, независимо от того, сколько элементов содержит массив.
  • Вы знаете, что у студентов есть пять баллов за экзамен, и что у вас есть связанная с ними переменная: int currentAssignments = 5;.
  • Вы знаете, что баллы за дополнительные задания находятся в конце массива.
  • Известно, что дополнительные зачеты составляют 10 % от экзаменационной оценки.
  • Вы знаете, что баллы за дополнительные задания должны быть добавлены к сумме баллов за экзамен перед вычислением итоговой числовой оценки студента.

Теперь подумайте, что вам нужно:

  • Вам нужно определить, какие баллы в массиве баллов являются баллами за дополнительные заслуги.
  • Нужно скорректировать значение всех дополнительных баллов так, чтобы они составляли 10 % от экзаменационной оценки.
  • Нужно обновить расчет, который используется для суммирования оценок студентов, чтобы сумма включала дополнительные оценки.
  1. Определите обновления в коде, необходимые для различения оценок за экзамены и дополнительные зачеты.

Вы знаете, что оценки за дополнительные зачеты перечисляются после пяти экзаменационных оценок. Другими словами, первая оценка за дополнительный зачет будет шестой в массиве оценок. Эта связь между типом оценки и номером элемента массива говорит вам о том, что внутри цикла foreach нужен счетчик. Как только значение счетчика превысит количество экзаменационных баллов, вы узнаете, что текущий балл - это дополнительный балл.

Вот что нужно реализовать, чтобы отличить оценки за экзамен от оценок за дополнительные кредиты:

  • Вам нужно объявить целое число над внутренним циклом foreach, которое будет использоваться для подсчета оцененных заданий. Вы можете назвать эту переменную gradedAssignments. Внутри цикла foreach нужно увеличивать gradedAssignments на 1. Если вы инициализируете gradedAssignments значением 0, то сможете увеличить счетчик в верхней части блока кода foreach.
  • Вам нужен оператор if, который оценивает, больше ли ваш счетчик gradedAssignments, чем количество оценок за экзамен. Переменная, в которой хранится количество экзаменационных заданий, называется currentAssignments. Это имя может привести к путанице, поскольку помимо экзаменационных заданий у вас есть задания на дополнительные кредиты.
  1. Измените имя переменной с currentAssignments на exampleAssignments.
warning

При изменении имени переменной вам необходимо убедиться, что вы обновили все экземпляры переменной в вашем приложении. В этом случае есть два случая.

  1. Создайте пустую строку кода над циклом foreach, которая будет использоваться для суммирования оценок заданий.
  2. В пустой строке кода, чтобы объявить целочисленную переменную с именем gradedAssignments и инициализировать ее в 0, введите следующий код:
// initialize/reset a counter for the number of assignments
int gradedAssignments = 0;
  1. Создайте пустую строку кода в верхней части блока кода для цикла foreach, который используется для суммирования оценок заданий.
  2. В пустой строке кода, чтобы увеличить gradedAssignments на 1 при каждой итерации цикла foreach, введите следующий код:
// increment the assignment counter
gradedAssignments += 1;
  1. Чтобы создать оператор if, который оценивает выражение (gradedAssignments <= examAssignments), введите следующий код:
if (gradedAssignments <= examAssignments)
  1. Определите обновления кода, необходимые для вычисления, которое используется для суммирования оценок студентов. Когда выражение if оценивает (gradedAssignments <= examAssignments) как истинное, оценка является оценкой за экзамен, и вы можете добавить это значение в сумму. Если же выражение не имеет значения true, то оценка является оценкой за дополнительные задания, и вам нужно разделить ее на 10, прежде чем добавлять значение к сумме. Идеально подойдет конструкция if-else.
  2. Обратите внимание, что существующее уравнение, sumAssignmentScores += score;, является правильным расчетом для использования, когда оператор if оценивает (gradedAssignments <= examAssignments) как true.
  3. Создайте пустую строку кода ниже sumAssignmentScores += score;.
  4. В пустой строке кода, чтобы создать часть else конструкции if-else, введите else, а затем нажмите Enter.
  5. Чтобы создать уравнение, добавляющее к сумме дополнительный балл, введите следующий код:
// add the extra credit points to the sum - bonus points equal to 10% of an exam score
sumAssignmentScores += score / 10;
  1. Уделите минуту просмотру кода вашего приложения. Убедитесь, что ваше обновленное приложение соответствует следующему коду:
// initialize variables - graded assignments
int examAssignments = 5;

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 };

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

int[] studentScores = new int[10];

string currentStudentLetterGrade = "";

// Write the Report Header to the console
Console.WriteLine("Student\t\tGrade\n");

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;

// initialize/reset the sum of scored assignments
int sumAssignmentScores = 0;

// initialize/reset the calculated average of exam + extra credit scores
decimal currentStudentGrade = 0;

// initialize/reset a counter for the number of assignment
int gradedAssignments = 0;

// loop through the scores array and complete calculations for currentStudent
foreach (int score in studentScores)
{
// increment the assignment counter
gradedAssignments += 1;

if (gradedAssignments <= examAssignments)
// add the exam score to the sum
sumAssignmentScores += score;

else
// add the extra credit points to the sum - bonus points equal to 10% of an exam score
sumAssignmentScores += score / 10;
}

currentStudentGrade = (decimal)(sumAssignmentScores) / 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";

//Console.WriteLine("Student\t\tGrade\tLetter Grade\n");
Console.WriteLine($"{currentStudent}\t\t{currentStudentGrade}\t{currentStudentLetterGrade}");
}

// 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();
  1. Проверьте свою работу
Student         Grade

Sophia 95.8 A
Andrew 91.2 A-
Emma 90.4 A-
Logan 93 A
Press the Enter key to continue

Уделите минутку рассмотрению следующего требования к проекту: ваше приложение должно поддерживать добавление дополнительных студентов и оценок с минимальным влиянием на код. не были ли упущены какие-либо критические требования к вашему приложению? проверьте, позволяет ли ваша комбинация массивов и циклов foreach включить дополнительных студентов без полной переделки кода.

Прокрутите верхнюю часть приложения Program.cs, а затем обновите массивы следующим образом:

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[] beckyScores = new int[] { 92, 91, 90, 91, 92, 92, 92 };
int[] chrisScores = new int[] { 84, 86, 88, 90, 92, 94, 96, 98 };
int[] ericScores = new int[] { 80, 90, 100, 80, 90, 100, 80, 90 };
int[] gregorScores = new int[] { 91, 91, 91, 91, 91, 91, 91 };

// Student names
string[] studentNames = new string[] { "Sophia", "Andrew", "Emma", "Logan", "Becky", "Chris", "Eric", "Gregor" };

Прокрутите страницу вниз до названия цикла foreach, а затем найдите следующие строки кода:

if (currentStudent == "Sophia")
studentScores = sophiaScores;
else if (currentStudent == "Andrew")
studentScores = andrewScores;
else if (currentStudent == "Emma")
studentScores = emmaScores;
else if (currentStudent == "Logan")
studentScores = loganScores;

Чтобы включить новых студентов, добавьте следующий код в конец структуры выбора:

else if (currentStudent == "Becky")
studentScores = beckyScores;
else if (currentStudent == "Chris")
studentScores = chrisScores;
else if (currentStudent == "Eric")
studentScores = ericScores;
else if (currentStudent == "Gregor")
studentScores = gregorScores;
else
continue;

Убедитесь, что ваш код выдал следующий результат:

Student         Grade

Sophia 95.8 A
Andrew 91.2 A-
Emma 90.4 A-
Logan 93 A
Becky 94.8 A
Chris 93.4 A
Eric 93.4 A
Gregor 94.6 A
Press the Enter key to continue

Заключение

Вы задались целью создать приложение, использующее комбинацию операторов итерации и выбора для обработки содержимого массивов и достижения целей дизайна вашего приложения. Создав вложенную комбинацию операторов foreach и if, вы построили приложение, которое обрабатывает содержимое массивов имен студентов и баллов за задания, чтобы вычислить и сообщить оценки студентов. Логика приложения поддерживает добавление дополнительных студентов и оценок за задания с минимальными изменениями кода. Возможность реализовать вложенные операторы итерации, обрабатывающие данные массива, и операторы выбора, разветвляющие путь выполнения кода, позволяет создавать более эффективный и расширяемый код.