- •Экзамен 374 Предварительные рассуждения Вступительное слово
- •Исторические факты
- •Начнем!
- •Проба пера
- •Открытие сохраненного проекта
- •Вывод данных
- •Типы данных
- •Хороший стиль программирования
- •Переменные и константы
- •Практический пример
- •Ввод данных
- •Например:
- •Пример:
- •Арифметические операции с числами
- •Литералы
- •Некоторые примеры
- •Домашнее задание
- •Напишите программу, которая вводит число из трех цифр, разделяет число на отдельные цифры и печатает их отдельно друг от друга с тремя пробелами между ними. Преобразование типов
- •Перечисляемые типы
- •Типичная ошибка
- •Хороший стиль программирования
- •Типичная ошибка
- •Выражения
- •Оператор if
- •Структура программы
- •Логические операции
- •Структура множественного выбора switch
- •Практический пример
- •Цикл for
- •Практический пример
- •Цикл do-while
- •Домашнее задание
- •Вызов функции
- •Прототипы функций
- •Разбор программы
- •Область видимости
- •Аргументы по умолчанию
- •Встраивание
- •Перегрузка функций
- •Учебный пример перегруженных функций. Иллюстрация перегрузки
- •Результат работы программы
- •Практические примеры
- •Домашнее задание
- •Примеры домашней работы урока 1 Пример №1
- •Как работает программа
- •Пример №2
- •Как работает программа
- •Примеры домашних работ на создание функций Пример №1
- •Как работает программа
- •Пример №2
- •Как работает программа
- •Массивы
- •Объявление массивов
- •Примеры использования массивов
- •Программа 1
- •Программа 2
- •Обратите внимание!
- •Типичная ошибка программирования
- •Типичная ошибка программирования
- •Программа 3
- •Типичная ошибка программирования
- •Замечание по технике программирования
- •Программа 4
- •Программа 5
- •Программа нахождения минимального и максимального элементов массива
- •Сортировка массивов
- •Домашнее задание
- •Что такое указатели?
- •За кулисами...
- •Как работать с указателями?..
- •Зачем нужны указатели?
- •Указатели и Массивы.
- •Примеры задач
- •Пример 1
- •Пример 2
- •Пример 3
- •Указатели - аргументы функций.
- •Ссылочные параметры
- •Примеры решения задач
- •Домашнее задание
- •Операторы свободной памяти new и delete
- •Функции работы со строками из библиотеки обработки строк
- •Пример 1.
- •Пример2
- •Пример 3
- •Пример задачи на новый материал
- •Домашнее задание
- •Двухмерные массивы, как частный случай многомерных массивов
- •Программа.
- •Результаты работы программы.
- •Многомерные динамические массивы
- •Пример на многомерные динамические массивы
- •Домашнее задание
- •Рекурсия
- •Рекурсии или итерации
- •Указатели на функции
- •Пример №1
- •Результат выполнения программы:
- •Пример №2
- •Результат выполнения программы
- •Пример №3
- •Результаты выполнения программы
- •Определения структур
- •Пример #1 на использование структур
- •Пример #2 на использование структур
- •Оператор указателя на структуру
- •Домашнее задание
- •Тест по c Группа ___________________ф. И. О. ______________________
- •Объектно-ориентированное программирование.
- •Наследование (Inheritance).
- •Инкапсуляция (Encapsulation).
- •Определение класса
- •Конструкторы и деструкторы Инициализация объектов класса: конструкторы
- •Основное назначение конструкторов - инициализация объектов.
- •Использование конструкторов с аргументами по умолчанию
- •Если параметры не передаются конструктору, в определении объекта не нужно включать пустые круглые скобки.
- •Использование деструкторов
- •Когда вызываются конструкторы и деструкторы.
- •Домашнее задание
- •Конструктор копирования
- •Синтаксис конструктора копирования
- •Памятка
- •Пример использования конструктора копирования.
- •Перегруженные конструкторы
- •Экскурс в историю
- •Послесловие к примеру
- •Маленькое замечание
- •Домашнее задание
- •Создание класса ''строка''
- •Перегрузка операций.
- •Общие принципы перегрузки операторов.
- •Преобразования, определяемые классом
- •Пример строкового класса с перегруженными операторами
- •Домашнее задание
- •Дружественные функции (Friend Functions)
- •Пример строкового класса с перегруженными операторами и дружественными функциями
- •Перегрузка операторов new и delete
- •Перегрузка оператора индексирования
- •Класс вектор. Часть1.
- •Класс вектор. Часть 2.
- •Класс вектор. Часть 3.
- •Домашнее задание
- •Наследование (Inheritance). Часть 1.
- •Наследование (Inheritance). Часть 2.
- •Множественное наследование (multiple inheritance)
- •Пример множественного наследования
- •Домашнее задание
- •Статические члены данных
- •Раннее и позднее связывание
- •Виртуальные функции
- •Пример.
- •Абстрактные классы
- •Виртуальный базовый класс
- •Практический пример
- •Домашнее задание
- •Потоки ввода-вывода.
- •Iostream.H: stream - поток, "I" - сокр. Input - ввод, "o" - сокр. Output - вывод.
- •Предопределенные потоки.
- •Операции помещения в поток и извлечения из потока.
- •Файловый ввод-вывод с применением потоков.
- •Конструкторы файловых потоков.
- •Функции для открытия и закрытия файлов.
- •Функции для обмена с потоками.
- •Часто применяемые функции потока.
- •Ввод/вывод массива в/из файл(-а).
- •Практический пример: перекодировка файла.
- •Домашнее задание
- •Немного о файлах...
- •И снова файлы...
- •Пример "Телефонная книга"
- •Файл abonent.H
- •Форматирование данных при обменах с потоками.
- •Состояние потока.
- •Использование аргументов командной строки.
- •Ввод/вывод в с.
- •Домашнее задание
- •Определение шаблонов функций
- •Переопределение шаблонов функций
- •Шаблоны классов
- •Шаблонный класс вектор
- •Шаблонный класс вектор
- •Шаблонный класс вектор
- •Введение
- •Обработка исключительных ситуаций
- •Практический пример
- •Программа
- •Домашнее задание
- •Экзамен
Пример #1 на использование структур
Создайте структуру которая содержала бы следующую информацию о студентах: Фамилия, Имя, Возраст, Адрес, Телефон (если телефон отсутствует, то значение ноль). Организуйте ввод данных о 7 студентах и вывод фамилии и имени всех студентов у которых телефон начинается с 5.
Проведем анализ условия задачи. Необходимо организовать ввод информации о нескольких человеках (следовательно будем использовать массив для хранения данных о нескольких человеках), произвести поиск в массиве по заданому критерию (Телефон начинается с 5). Чтобы не усложнять самим себе задачу, для Телефона будем использовать символьный массив.
Таким образом, нам необходимо реализовать в программе следующие этапы: ввод данных в массив, поиск по критерию, вывод результата.
Ниже приведена реализация сказанного выше на С++ с дополнительными комментариями по ходу программы.
#include <iostream.h>
void main()
{
const int col=3; //количество студентов можно изменять здесь
struct {
char lastname[20], firstname[15], phone[7];
int age;
} students[col];
/*создали структуру и тут же объявили массив, каждый
элемент которого представляет собою описанную выше структуру*/
cout << "\nEnter data\n"; /*сообщаем пользователю, что
он должен ввести данные */
for (int i=0; i < col; i++)
{ //производим ввод данных
cout << "Surname is ";
cin >> students[i].lastname;
cout << "Name is ";
cin>>students[i].firstname;
cout << "Age is ";
cin >> students[i].age;
cout << "Phone is ";
cin >> students[i].phone;
cout << endl;
}
cout << "PC had found next records...\n";
//были найдены следующие записи
for (i=0; i < col; i++)
{
if (students[i].phone[0]=='5') /* действительно ли
телефон начинается с 5? */
{
cout << "\nSurname: "
<< students[i].lastname; //таки да, такая запись есть
cout << "\nName: " << students[i].firstname
<< "\n"; //значит выведем ее
};
}
}
Протокол выполнения программы |
Enter data
Surname is Petrov Name is Ivan Age is 15 Phone is 515252
Surname is Ivanov Name is Petr Age is 16 Phone is 242424
Surname is Pronin Name is Roman Age is 21 Phone is 515151
PC had found next records...
Surname: Petrov Name: Ivan
Surname: Pronin Name is Roman |
Замечание к задаче: Как Вы думаете, что и почему произойдет, если заменить
cout << "\nSurname: " << students[i].lastname;
на
cout << "\nSurname: " << students[i];
Пример #2 на использование структур
Расмотрим еще один пример на использование структур.
Написать программу, которая проводила бы классификацию студентов по среднему баллу, полученному в период сессии. Программа должна выводить на экран фамилии двоечников, троечников и т.п. Каждому студенту соответствует запись, в которой содержатся фамилия и оценки по экзаменам. Массив из таких записей (массив структур) описывает оценки по экзаменам всех студентов учебной группы.
Массивом структур легко представить таблицу некоторых данных, каждая строка которой описывает какой-либо объект по нескольким параметрам. Каждому элементу массива структур в этом случае будет соответствовать строка таблицы. Для данного примера таблица выглядит следующим образом:
|
Размеры таблицы выбираются максимальными для данной задачи. Внутри таблицы есть однородные данные - оценки, которые выгодно представить в виде массива. Таким образом, этот пример демонстрирует использование массива внутри структуры и массива структур.
Если поле структуры является массивом, то к нему обращаются как к обычному массиву - через квадратные скобки. Например, str.ms[5] = 10; присвоение значение пятому элементу массива ms, который является полем структуры str. К массиву структур обращаются тоже через квадратные скобки: st[i].val = 3; - присвоение значения полю val i-ой структуре в массиве структур. В примере ниже встречается комбинация этих конструкций: exam[i].ball[j] - обращение к j-му элементу поля ball i-ой структуры массива структур exam.
Программа |
#include<iostream.h>
float sr(int q, int ball[]) { int i; float s; /*Переменная - накопитель*/
for(i=0, s=0; i<q; i++) s+=ball[i]; return s/q; /*Вернуть среднюю оценку*/ }
void main() { const int NAMEL = 30; struct EXAM { char name[30]; /* Имя студента*/ int ball[7]; /* Оценки по экзаменам */ };
int i,j; /* Переменные циклов */ int qs, /* Количество студентов */ qe; /* Количество экзаменов*/
struct EXAM exam[50]; /* Объявление массива структур*/
cout << "Количество студентов в группе (<50):"; cin >> qs; cout << "Количество экзаменов (<7):"; cin >> qe;
for (i=0; i < qs; i++) /*Ввод оценок студентов*/ { cout << "Введите фамилию студента: "; cin >> exam[i].name; for( j=0; j<qe; j++) { cout << "Введите оценку по " << j+1 << "экзамену"; cin >> exam[i].ball[j]; } }
/*Вывести на экран список студентов по категориям*/ float sr1; cout << "\nОтличники (ср. балл > 4.5):"; for (i=0; i<qs; i++) if(sr(qe, exam[i].ball) > 4.5) cout << endl << exam[i].name;
cout << "\nХорошисты (ср. балл > 3.5 и <= 4.5): "; for (i=0; i<qs; i++) { sr1 = sr(qe, exam[i].ball); if(sr1 <= 4.5 && sr1 > 3.5) cout << endl << exam[i].name; }
cout << "\nТроечники (ср. балл <= 3.5 и > 2.5):"; for (i=0; i<qs; i++) { sr1 = sr(qe, exam[i].ball); if(sr1 <= 3.5 && sr1 > 2.5) cout << endl << exam[i].name; }
cout << "\nДвоечники (ср. балл <= 2.5):"; for (i=0; i<qs; i++) if(sr(qe, exam[i].ball) <= 2.5) cout << endl << exam[i].name;
cout << endl; } |
Протокол выполнения программы |
Количество студентов в группе (<50):2 Количество экзаменов (<7): 2
Введите фамилию студента: Иванов Введите оценку по 1-му экзамену: 4 Введите оценку по 2-му экзамену: 5
Введите фамилию студента: Петров Введите оценку по 1-му экзамену: 2 Введите оценку по 2-му экзамену: 2
Отличники (ср. балл > 4.5): Хорошисты (ср. балл > 3.5 и <= 4.5): Иванов Троечники (ср. балл <= 3.5 и > 2.5):
Двоечники (ср. балл <= 2.5): Петров |