Типичная ошибка программирования 5 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Типичная ошибка программирования 5



Завершение директивы процессора # include точкой с запятой. Помните, что директивы препроцессора не являются операторами С.

Программа на рис.8 суммирует значения, которые содержатся в массиве а из 12 целых чисел. Оператор в теле цикле for осуществляет суммирование. Важно помнить, что значения, используемые в качестве начальных для массива а, должны были бы вводиться в программу пользователем с клавиатуры Например, следующая структура for

for (int j = 0; j < arraySize; j++)

cin >> a [j];

считывает значения одно за одним с клавиатуры и запоминает их в элементах а.

Рис.8 – Вычисление суммы элементов массива

 

Следующий пример использует массивы для суммирования результатов данных, полученных при опросе. Рассмотрим следующую постановку задачи: К сорока студентам обратились с просьбой оценить качество пищи в студенческом кафетерии по десятибалльной шкале (1 означает отвратительное качество, а 10 означает отличное). Поместите сорок ответов в массив целых чисел и просуммируйте результаты опроса. Это типичное применение массива (см. рис.9.). Мы хотим просуммировать количество ответов каждого типа (т.е. от 1 до 10). Массив responses — это массив с 40 элементами, предназначенный для ответов студентов. Мы используем массив с 11 элементами frequency для подсчета числа каждого из ответов. Мы игнорируем первый элемент frequency[0], потому что более логично накапливать ответ 1 в элементе frequency[l], чем в frequency[0]. Это позволяет нам использовать каждый ответ непосредственно как индекс массива frequency.

Рис.9 – Программа простого анализа опроса студентов

 

Первый цикл for берет ответы один за одним из массива response и дает приращение одному из десяти счетчиков (от frequency! 1] до frequency! 10]) в массиве frequency. Ключевым оператором цикла служит

++frequency[responses[answer]];

Этот оператор увеличивает соответствующий счетчик frequency в зависимости от значения responses!answer]. Например, если счетчик answer равен 0, то элемент responses!answer] равен 1, так что ++frequency!responses!answer]]; на самом деле интерпретируется как оператор

 ++frequency[1]; который увеличивает элемент массива один. Если answer равен 1, responses[answer] равен 2, так что ++frequency!responses[answer]]; интерпретируется как оператор

++frequency[2];

который увеличивает элемент массива два. Если answer равен 2, responses[answer] равен 6, так что ++frequency[responses[answer]]; интерпретируется как оператор

++frequency[6];

который увеличивает элемент массива шесть и т.д. Заметим, что независимо от числа ответов, полученных в опросе, для суммирования результатов достаточно лишь массива с одиннадцатью элементами (при игнорировании элемента нуль). Если данные содержат неверные значения, такие как 13, программа будет пытаться прибавить 1 к frequency[13]. Это выходило бы за границы массива. С не проверяет границ массивов, чтобы предупредить компьютер о ссылках на несуществующие элементы. Таким образом, выполняемая программа может выйти за пределы любого конца массива без предупреждения. Программист должен иметь гарантию, что все ссылки на массив находятся внутри границ массива.



Поделиться:


Последнее изменение этой страницы: 2021-04-14; просмотров: 58; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.127.141 (0.005 с.)