- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
3.1. Определение статического массива структур
Объявление статического массива std из 20 структур типа stud:
stud std[20];
Массив представлен на рис.8.
-
Элемент массива
Элемент массива
…
Элемент массива
Поля
структуры
fio
fio
…
fio
kurs
kurs
kurs
facultet
facultet
facultet
spec
spec
spec
№ элемента массива
0
1
…
19
Рис.8
Примеры обращения к полям элемента массива с номером i:
gets(std[i].fio); //вводится с клавиатуры поле fio
scanf("%i",&std[i].kurs); //с клавиатуры вводится целочисленное поле
// kurs
3.1. Определение динамического массива из n структур
Объявление указателя на структуру типа stud:
stud *st;
int n;
printf("n=");
scanf("%i",&n); //ввод количества элементов динамического массива st
st=(stud*)malloc(n*sizeof(stud)); // выделение динамической памяти
// под n структур типа stud.
Массив представлен на рис.9. Значением переменной st будет адрес нулевого элемента (первой структуры) динамического массива структур. Число n будет определять количество однотипных объектов (структурный тип stud описывает каждый такой объект), информация о которых будет храниться в созданном динамическом массиве. Именем этого массива будет имя указателя st.
|
Элемент массива |
Элемент массива |
… |
Элемент массива |
|
|
|
|
|
Поля структуры |
fio |
fio |
… |
fio |
kurs |
kurs |
kurs |
||
facultet |
facultet |
facultet |
||
spec |
spec |
spec |
||
st |
|
|
|
|
№ элемента массива |
0 |
1 |
… |
n-1 |
Рис.9 |
Примеры обращения к полям i-го элемента динамического массива структур st.
gets((st+i)–>fio); //вводится с клавиатуры поле fio
scanf("%i",&(st+i)–>kurs); //с клавиатуры вводится целочисленное
//поле kurs
printf ("kurs=%i\n",(st+i)–>kurs); // на экран выводится значение поля
// kurs
Здесь операция & определяет адрес в ОП поля kurs i-го элемента динамического массива структур st. Операция –> (записанные последовательно друг за другом два знака: минус (–) и больше (>)) обозначает доступ к полю структуры через указатель:
Пример. Каждого студента можно описать при помощи следующих характеристик: ФИО, курс, специальность, предмет1, предмет2, предмет3. Написать программу, определяющую количество студентов:
-
сдавших сессию на «отлично»;
-
не сдавших хотя бы 1 экзамен.
Ход выполнения работы
-
Алгоритм решения данной задачи – алгоритм обработки одномерного массива. В задаче каждым элементом массива будет структура, т.е. элемент массива представляет собой набор переменных различного типа. Для ввода элемента массива нужно вводить значения каждого поля элемента массива поочередно. Так как работаем с массивом, то ввод-вывод элементов массива производится с помощью циклов с параметром.
-
Написать программу, соответствующую алгоритму.
Запишем алгоритм решения задачи и соответствующие программы с использованием статического и динамического массивов.
Использование динамических массивов:
Алгоритм |
Программа |
структурный_тип stud { сhar fio[30]; int kurs; сhar spec[30]; int hist; int math; int phis; }; объявление stud *st; цел: n, i, count_5, count_2; ввод n выделение динамической памяти под указатель st для i=0 до n-1 шаг 1 заполнить каждое поле элемента массива структур отдельно все_для i count_5=count_2=0 для i=0 до n-1 шаг 1 //определяем количество //отличников если sti–>hist= =5 && sti–>math= =5 && sti–>phis= =5 count_5++; все_если // определяем количество студентов, // не сдавших хотя бы один экзамен если sti–>hist==2|| sti–>math==2|| sti–>phis==2 count_2++; все_если все_если все_для i печать count_5; печать count_2; освободить выделенную динамическую память под указатель st;
|
#include "stdio.h" #include "stdlib.h" typedef struct { char fio[30]; int kurs; char spec[30]; int hist; int math; int phis; } stud; int main() { stud *st; int n, i, count_5, count_2; printf("n="); scanf("%i",&n); st=(stud*)malloc(n*sizeof(stud)); // заполнение массива структур for(i=0;i<=n-1;i++) { printf(“fio=”);gets((st+i)–>fio); printf(“spec=”);gets((st+i)–>spec); printf(" kurs="); scanf("%i",&(st+i)–>kurs); printf(" history="); scanf("%i",&(st+i)–>hist); printf(" math="); scanf("%i",&(st+i)–>math); printf(" phis="); scanf("%i",&(st+i)–>phis); } count_5=count_2=0; for (i=0;i<=n-1;i++) { //определяем количество // отличников if((st+i)–>hist= =5&& (st+i)–>math= =5 && (st+i)–>phis==5) count_5++; //определяем количество студентов, //не сдавших хотя бы один экзамен if((st+i)–>hist= =2|| (st+i)–>math= =2|| (st+i)–>phis= =2) count_2++; } printf("count_5=%i\n",count_5); printf("count_2=%i\n",count_2); free(st); return; } |
Использование статических массивов:
Алгоритм |
Программа |
структурный_тип stud { сhar fio[30]; int kurs; сhar spec[30]; int hist; int math; int phis; }; объявление stud st[10]; цел: i, count_5, count_2; для i=0 до 10-1 шаг 1 заполнить каждое поле элемента массива структур отдельно все_для i count_5=count_2=0 для i=0 до 10-1 шаг 1 //определяем количество //отличников если st[i]–>hist= =5 && st[i]–>math= =5 && st[i]–>phis= =5 count_5++; все_если // определяем количество // студентов, не сдавших // хотя бы один экзамен если st[i]–>hist= =2|| st[i]–>math= =2|| st[i]–>phis= =2 count_2++; все_если все_если все_для i печать count_5; печать count_2;
|
#include "stdio.h" #include "stdlib.h" #define n 10 typedef struct { char fio[30]; int kurs; char spec[30]; int hist; int math; int phis; } stud; int main() { stud st[n]; int i, count_5, count_2; // заполнение массива структур for(i=0;i<=n-1;i++) { printf(“fio=”);gets(st[i].fio); printf(" kurs=");scanf("%i",&st[i].kurs); printf(“spec=”);gets(st[i].spec); printf(" history=");scanf("%i",&st[i].hist); printf(" math=");scanf("%i",&st[i].math); printf(" phis=");scanf("%i",&st[i].phis); } count_5=count_2=0; for (i=0;i<=n-1;i++) { //определяем количество отличников if(st[i].hist= =5&&st[i].math= =5&& st[i].phis= =5) count_5++; //определяем количество студентов, //не сдавших хотя бы один экзамен if(st[i].hist= =2|| st[i].math= =2|| st[i].phis= =2) count_2++; } printf("count_5=%i\n",count_5); printf("count_2=%i\n",count_2); return; } |
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.