|
Программирование >> Структурное программирование
Многие типовые операции с массивами используют структуру повторения for. Например, следующая структура for обнуляет все элементы третьей строки массива а на рис. 4.21: for (column = 0; column < 4; column ++) a[2][column] = 0; Мы указали третью строку, потому что знаем, что ее первый индекс всегда равен 2 (О - это первая строка, а 1 - это вторая строка). Цикл for варьирует только второй индекс (т.е. индекс столбца). Предыдущая структура for эквивалентна операторам присваивания: а[2][0] = О а[2][1] = О а[2][2] = О а[2][3] = О Следующий вложенный цикл for определяет сумму всех элементов массива а: total = 0; for (row = 0; row < 3; row++) for (column = 0; column < 3; column++) total += a[row][column]; Внутренняя структура for суммирует элементы одной строки массива. Внешняя структура for начинает работу с установки row (т.е. индекса строки) в нуль, так что во внутренней структуре for могут быть просуммированы элементы первой строки. Затем внешняя структура for увеличивает row на 1, так что могут быть просуммированы элементы второй строки. Далее внешняя структура for увеличивает row до значения 2, так что могут быть просуммированы элементы третьей строки. После завершения работы вложенной структуры for печатается результат. Программа на рис. 4.23 выполняет несколько других типовых операций над массивом studentGrades размером 3 на 4 . Каждая строка массива представляет студента, а каждый столбец представляет оценку, полученную студентом на одном из четырех экзаменов в течение семестра. Манипуляции с массивом выполняются с помощью четырех функций. Функция minimum определяет наихудшую оценку всех студентов в течение семестра. Функция maximum определяет наилучшую оценку всех студентов в течение семестра. Функция average определяет среднесеместровую оценку отдельного студента. Функция printArray выводит двумерный массив в табличном виде. Каждая из функций minimum, maximum и printArray получает три аргумента - массив studentGrades (называемый grades в каждой функции), количество студентов (число строк массива) и количество экзаменов (число столбцов массива). Каждая функция циклически обрабатывает массив grades, используя вложенные структуры for. Приведем пример вложенной структуры for из описания функции minimum: for (i = 0; i < pupils; i++) for (j = 0; j < tests; j++) if (grades[i][j] < lowGrade) lowGrade = grades[i][j]; Пример использования двумерного массива iinclude <iostream.h> iinclude <iomanip.h> const int students = 3; const int exams = 4; количество студентов количество экзаменов int minimum(int [][exams], int, int); maximum(int [][exams], int, int); float average(int [], int); void printArray(int [][exams], int, int
cout << Массив: << endl; printArray(StudentGrades, students, exams); cout << endl << endl << Наихудшая оценка: << minimum(studentGrades, students, exams) << endl << Наилучшая оценка: << maximum(StudentGrades, students, exams) << endl; for (int person = 0; person < students; person++) cout << Средняя оценка студента << person << равна << setiosflags(ios::fixed ios::showpoint) << setprecision(2) << average(studentGrades[person], exams) << endl; return 0; Поиск минимальной оценки int minimum(int grades[][exams], int pupils, int tests) { int lowGrade = 100; for (int i 0; i < pupils; i++) for (int j =0; j < tests; j++) if (grades[i][j] < lowGrade) lowGrade = grades [ i1 [ j]; return lowGrade; Поиск максимальной оценки int maximum(int grades [][exams], int pupils, int tests) { int highGrade = 0; for (int i = 0; i < pupils; i++) for (int j =0; j < tests; j++) if (grades [i][j] > highGrade) highGrade = grades [i][j]; return highGrade; } Рис. 4.23. Пример использования двумерного массива (часть 1 из 2) Определение средней оценки для отдельного студента float average(int setOfGrades [], int tests) int total = 0; for (int i = 0; i < tests; total += setOfGrades[i]; return (float) total / tests; Печать массива void printArray(int grades [][examsl, int pupils, int tests) { cout<< [0] [1] [?] [3] ; for (int i = 0; i < pupils; i++) ( cout << endl << Оценки студента << i << ] for (int j = 0; j < tests; j+н-) cout << setiosflags(ios::left) << setw (5) grades [i] [ j j; Массив:
Наихудшая оценка: 68 Наилучшая оценка: 96 Средняя оценка студента О равна 7 6.00 Средняя оценка студента 1 равна 87.50 Средняя оценка студента 2 равна 81.75 Рис. 4.23. Пример использования двумерного массива (часть 2 из 2) Внешняя структура for начинается с установки i (т.е. индекса строки) равным нулю, чтобы элементы первой строки можно было сравнивать с переменной lowGrade в теле внутренней структуры for. Внутренняя структура for циклически обрабатывает четыре оценки каждой строки и сравнивает каждую оценку с lowGrade. Если оценка меньше, чем lowGrade, lowGrade устанавливается равной этой оценке. Затем внешняя структура for увеличивает индекс строки до значения 1. Элементы второй строки сравниваются с переменной lowGrade. Затем внешняя структура for увеличивает индекс строки до значения 2. Элементы третьей строки сравниваются с переменной lowGrade. Когда выполнение вложенной структуры заканчивается, lowGrade содержит наименьшую оценку в двумерном массргве. Функция maximum работает аналогично функции minimum. Функция average принимает два аргумента - одномерный массив результатов экзаменов для одного студента и количество результатов экзаменов в массиве. При вызове average первый аргумент - это studentGrades[stu-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |