- •Алгоритм.
- •Множественный выбор switch.
- •Оператор do … while ( с постусловием ).
- •Do оператор ;
- •Оператор цикла for.
- •Использование операторов break и continue в циклах.
- •Функции ввода-вывода.
- •Общий вид программы.
- •Вложенные циклы.
- •Адреса и указатели.
- •Массивы.
- •Int a[10] ; // целочисленный вектор из 10 элементов.
- •Векторы.
- •Сортировка вектора.
- •Матрицы.
- •Строки.
- •Подпрограммы.
- •Директива препроцессора #define .
- •Области видимости.
- •Классы памяти.
- •Рекурсия.
- •Подготовка к зачету.
- •Структуры.
- •Int ball [4] ; // описание третьего поля – оценки.
- •Очередь.
- •Линейные списки.
- •Деревья.
- •Int n, k ; // ее размерности
- •Void print ( void ) // печать матрицы
- •Определение методов вне класса.
- •Частные и общие данные.
- •Конструктор.
- •Перегрузка операторов.
- •Неявный указатель *this.
- •Дружественные функции.
- •Класс множество.
- •Наследование.
- •Объекто-ориентированное программирование.
- •Список вопросов к экзамену.
- •Литература.
Структуры.
Моделирование других объектов требует введения специального понятия – структура.
Структура – именованная структура данных, способная объединять объекты различных типов, каждый такой объект называется полем структуры.
Рассмотрим работу со структурой на примере. Нужно составить базу данных по результатам сессии.
№ |
фамилия |
баллы |
1 |
Иванов |
3 4 5 2 |
2 |
Петров |
4 4 3 3 |
|
… |
|
Сформируем шаблон структуры.
Назовем нашу структуру – stud.
struct stud { int n ; // описание первого поля структуры – номер по списку.
char name [10] ; // описание второго поля – фамилия.
Int ball [4] ; // описание третьего поля – оценки.
}
Описание переменных типа stud. В разных версиях языка возможны два варианта, с использованием ключевого слова struct и без него.
struc stud a, b, c ;
stud a, b, c ;
Инициализация структуры.
stud a={ 1, “ Абрамов “, 3, 4, 5, 5 } ;
Заполнять структуру можно явно или вводить с экрана.
a.n = 1 ;
a.ball[0]= 3 ; // явное заполнение оценок.
a.ball[1]= 4 ;
a.ball[2]= 5 ;
a.ball[3]= 5 ;
gets( a..name ) ; // ввод с экрана фамилии.
Можно задать массив структур, т.е. список группы.
stud spis [25] ;
Фрагмент программы, реализующий ввод списка группы с экрана.
for ( i=0 ; i<25 ; i++ )
{
spis[i].n = i+1 ;
printf (“ \n введите фамилию “ ) ;
gets ( spis[i].name ) ;
printf (“ \n введите оценки“ ) ;
for ( k=0 ; k<4 ; k++)
scanf( “ %d”, &spis[i].ball[k]) ;
}
Переставим местами фамилии 5-го и 10-го студента. Фрагмент программы будет выглядеть так.
char x ;
for ( i=0 ; i<10 ; i++)
{
x = spis[5].name[i] ;
spis[5].name[i]= spis[10].name[i] ;
spis[10].name[i] = x ;
}
Главные задачи с использованием структур – это задачи сортировки и поиска. Структуры являются основным «кирпичиком» формирования баз данных.
Иногда с использованием структур можно элегантно решать и простые задачи.
Сосчитать число дней от начала года до текущего. Обычно такая задача решается с использованием оператора case.
struc mouth { int n ; int k } // n – номер месяца, k – число дней в нем.
int sum, ch, mm ;
struc mouth m[12] = {1, 31, 2, 28, 3, 31 … 12, 31} ;
scanf( “%d”, &ch) ; // ввод текущей даты, ch – число, mm – месяц.
scanf( “%d”, &mm) ;
for ( i=0 , sum=0 ; i<mm-2 ; i++0
sum+= m[i].k ; // количество дней во всех месяцах до текущего
sum+= ch ;
printf ( “ %d”, sum) ;
СЛОЖНЫЕ ДИНАМИЧЕСКИЕ СТРУКТУРЫ.
Самое главное преимущество сложных динамических структур данных – это то, что они не требуют определения объема памяти. К таким структурам относятся – стеки, очереди, линейные списки и деревья.
СТЕК.
Стек используется при создании компилятора. При работе с рекурсией, значения всех параметров в момент вызова функции кладутся в стек. С использованием стека вычисляется любое арифметическое выражение. Стек формируется и работает по принципу - последний пришел – первый ушел.
Адрес информация
Следующего
Верхушка стека
Пустая ссылка
Операции, определенные над стеком:
1. Если стек пуст, то создать его.
2. Добавить в стек, только наверх.
3. Извлечь из стека, если не пуст, только верхушку.
4. Ходить по стеку, иcкать, проверять внутри его – нельзя!
Рассмотрим задачу – создать стек и удалить из него все символы до «а».
struct st { char n ; // описание элемента стека как записи с 2 полями, информационным - n
st *next ; // и адресным – next.
}
main ()
{
st *ps, *pp=NULL ; // описание переменных указывающих на элемент стека.
char c ; // NULL – пустая ссылка, адрес.
do
{ ps= new st ; // создание новой записи ( элемента стека)
printf ( “ \n, введите информационный элемент стека “) ;
scanf ( “%c”, &c) ;
// заполнение полей записи
(*ps).n=c ; // можно эту операцию записать иначе ps->n=c ;
(*ps).next=pp ;
pp=ps ; // делаем эту запись предыдущей.
printf ( “\n, будите продолжать ? ( да=1) “) ;
}
while( getch()==’1’) ;
printf (“\n, верхушка стека %c”, (*pp).n) ;
// удаление всех символов до ‘a’.
w hile(((*ps).n!=’a’)&&((*ps).next!=NULL))
{ pp=(*ps).next ;
delete ps ;
ps=pp ;
}
printf(‘\n верхушка стека после удаления %c”, (*pp).n) ;
}