- •Программирование на языке высокого уровня
- •Составитель: л.А. Прокушев
- •Подписано к печати Формат 60х84 1/16. Бумага тип. №3
- •Редакционно-издательский отдел
- •190000, Санкт-Петербург, ул. Б. Морская, 67
- •Алгоритмизация вычислительных процессов
- •Средства программирования вычислительных процессов
- •Данные и их типы
- •Константы
- •Переменные
- •Ввод-вывод данных
- •Ввод-вывод данных в стиле с
- •Форматированный ввод
- •Форматированный вывод
- •Консольный ввод-вывод
- •Функция ввода символа (без отображения):
- •Функция очистки экрана результатов:
- •Выражения и операции
- •Логические выражения и операции.
- •Работа с ветвящимися процессами Операторы
- •Оператор присваивания
- •Условный оператор (if)
- •Операторы передачи управления
- •Оператор break (прервать) используется для прерывания работы текущего сложного оператора, в теле которого находится оператор break, и передачи управления на следующий по порядку оператор.
- •Оператор выбора (switch)
- •Действие оператора выбора состоит в следующем:
- •Введите 2 числа х, y : 3 8
- •Работа с циклическими вычислительными процессами
- •Циклы с фиксированным числом повторений Оператор цикла с предусловием (while)
- •Прерывание цикла
- •Циклы с неизвестным числом повторений Вычисление рекуррентных последовательностей
- •Оператор цикла с постусловием (do)
- •Вложенные циклы и организация диалога в программе
- •Оператор цикла с параметром (for)
- •Программа:
- •Работа с массивами
- •Описание массива
- •Доступ к элементам массива
- •Указатель.
- •Занесение данных в массив
- •Многомерные массивы
- •Работа с функциями
- •Определение функции
- •Вызов функции
- •Передача параметров функции
- •Передача данных по значению
- •Передача данных по адресу
- •Прототип (шаблон) функции
- •Блочная структура программы
- •Внешние описания переменных
- •Многомодульные программы Проект программы
- •Внешние ссылки
- •Создание проекта программы
- •Работа с указателями Объявления объектов со сложными описателями
- •Массивы указателей
- •Указатель на указатель
- •Указатель на функцию
- •Использование указателя на функцию как аргумента
- •Массивы указателей на функции
Занесение данных в массив
Исходные данные в элементы массива можно занести тремя способами:
Инициализацией массива.
Функцией ввода.
Присваиванием значений.
Инициализация массива выполняется при описании массива путем задания начальных значений элементам в списке инициаторов, заключенном в фигурные скобки { }, а сами инициаторы разделяются запятыми.
Одномерный массив можно инициировать полностью:
int ar [5]={1,2,3,4,5} или частично: int ar[5]={4,5};
тогда ar[0]=4, ar[1]=5, остальные элементы равны 0, поэтому легко выполнить обнуление всего массива: int ar[5]={0}.
Двухмерный массив можно инициировать одним списком:
int ar [2][3]={1,2,3, 4,5,6}; либо отдельными списками построчно:
int ar [2][3]={{1,2,3},{4,5,6}}; либо неполными списками:
int ar [2][3]={{1,2},{4}}; что соответствует списку {{1,2,0},{4,0,0}}.
Ввод данных в массив функцией scanf ( ) выполняется поэлементно, для чего используется оператор цикла. Например, ввод одномерного массива:
for (i=0; i<5; i++) scanf (“%d”,&ar[i]); или scanf (“%d”, ar+i) c адресным выражением.
Присваивание значений элементам массива выполняется при вычислении выражений, определяющих элементы массива, например,
for (i=0; i<5; i++) a[i]=sin(i+1)+cos(2*i+1).
Обработка одномерных массивов
Пример 28.
Найти индекс и значение минимального элемента массива.
В задаче достаточно определить индекс искомого элемента массива, и с его помощью получить доступ к самому элементу.
Программа:
# define k 10 // количество элементов массива
void main ( )
{ float a[k]; int i; im; // описание массива и переменных
clrscr(); // очистка экрана
puts (“Ввести %d элементов массива”; k);
for (i=0;i<k;i++) // цикл по индексам элементов
scanf (“%f”, ar+i); // ввод элемента
im=0; // индекс начального элемента
for (i=1; i<k; i++) // цикл поиска индекса минимума
if (a[i] < a[im]) im=i; // проверка элемента на минимум
printf (“Минимум = %5.2f индекс=%d”, a[im], im);
}
Пример 29.
Упорядочить по возрастанию элементы массива методом "пузырька". Название происходит оттого, что легкие элементы должны перемещаться ("всплывать") к одному из концов массива. Используется два цикла. Первый цикл (прямой) организует шаги сортировки на единицу меньше числа элементов. Второй (обратный) цикл от конца массива до начала неупорядоченного фрагмента массива. В нем сравниваются соседние элементы a[j] и a[j-1] и переставляются местами с использованием рабочей ячейки r, если нарушено условие сортировки.
Программа:
#define k 10 // размер массива
void main ( )
{ float a[k], r; // описание массива и переменной
int i, j; // описание индексов
clrscr(); // очистка экрана
printf ( “Ввод массива :\n”);
for (i=0; i < k; i++) scanf (“%f”, a+i); // цикл ввода элементов массива
for (i=0; i < k-1; i++) // цикл шагов упорядочения
{ for(j=k-1; j > i; j--) // цикл перестановок элементов
if (a[j-1] > a[j] ) // если условие сортировки нарушено,
{ r=a[j]; // перестановка
a[j]=a[j-1]; // соседних
a[j-1]=r; // элементов
} // конец цикла перестановок
} // конец цикла упорядочения
puts (“Массив упорядочен по возрастанию:”);
for ( i=0; i<k; i++ ) printf (“%5.2f ”, a[i] ); // цикл вывода массива
}