- •Введение
- •Изучение среды программирования
- •Теоретические сведения
- •Среда программирования
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Переменные и операции над ними
- •Теоретические сведения
- •Основные определения
- •Операции над целыми числами
- •Вещественные числа и операции над ними
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Конструкция выбора, логические и другие операции
- •Теоретические сведения
- •Конструкция выбора и составная инструкция
- •Операторы отношения и логические операторы
- •Остальные операторы
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Конструкции циклов
- •Теоретические сведения
- •Цикл while
- •Цикл for
- •Конструкция в конструкции
- •Задание к работе
- •Свойства массивов
- •Структуры
- •Задание к работе
- •Операции с указателями
- •Указатели и массивы
- •Указатели и структуры
- •Задание к работе
- •Использование указателей для передачи результата и аргумента
- •Задание к работе
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •644046, Г. Омск, пр. Маркса, 35в
-
Структуры
Массивы позволяют эффективно работать с большим количеством однотипных данных. Однако в некоторых случаях в программе требуется группа данных различного типа. Например, для хранения информации о товаре нам нужна одна строка для хранения названия товара и переменная целого типа для хранения его цены.
В этом случае поможет еще один элемент языка С – структура (в других языках аналогичный элемент часто называется запись). В отличие от массива структура может содержать переменные произвольного типа. Поэтому перед использованием структуру нужно объявить, т.е. описать те переменные, которые она содержит. Для товара объявить структуру можно следующим образом:
struct tovar
{
char name[20];
int price;
};
Это объявление сообщит компилятору, что структура tovar содержит поля name и proce. Компилятор вычислить необходимый для структуры объем памяти и смещение полей относительно начала структуры.
Можно сказать, что объявление структуры фактически создало новый тип. После этого объявления можно заводить переменные, имеющие тип объявленной структуры. Например:
tovar a,b;
После таких объявлений компилятор отведет под переменные a и b необходимое место в памяти.
При объявлении структуру можно сразу инициализировать. Инициализация структуры аналогична инициализации массива:
tovar a={”мыло”, 100};
Поскольку поля в структуре занимают различный объем, для обращения к ним нельзя использовать операцию индексирования. Для обращения к полю используют операцию обращения к полю, которая обозначается точкой. Например:
a.price = 10;
Для этого примера компилятор создаст код, который прибавит к адресу структуры a смещение поля price, вычисленному при объявлении структуры. По полученному адресу и будет записано число 10 – цена товара. Аналогичным образом происходит обращение к полю и в случае, если нужно получить его значение.
Задание к работе
-
Создать массив из 50 чисел, значения которых равны значению функции от индекса элемента. Функции взять из второго задания предыдущей лабораторной работы. Распечатать значения этого массива.
-
Пользователь вводит с клавиатуры слово (не больше 19 букв). Его нужно распечатать вертикально, выводя по одной букве в строке. Ввод пользователем слова в массив символов a можно реализовать следующей командой: scanf("%s", a); (для объяснения того, как она работает, потребовался бы еще не пройденный материал, поэтому объяснения пока пропустим). При выводе строки на экран нужно иметь в виду, что количество символов в строке неизвестно, но известно, что последний символ – '\0'. При написании программы подумайте, как можно сократить количество операций в ней.
-
Объявить структуру, содержащую строки, соответствующие имени и фамилии человека. Создать массив из 10 таких структур, инициализировать их именами и фамилиями любых известных людей. Напечатать список людей, чье имя совпадает с именем, которое ввел пользователь.
Содержание отчета
Отчет должен содержат текст всех программ с подробными комментариями, результаты работы этих программ.
Контрольные вопросы
-
Что такое массив?
-
Как объявить массив?
-
Сколько элементов и с какими индексами содержит массив?
-
Что означает ошибка выхода за границы массива?
-
Что такое операции индексирования?
-
Что такое строка, как она создается и используется?
-
Что такое структура, как она создается и используется?
-
Указатели
Цель работы: Изучение указателей, операций над ними, операций с указателями на массивы и структуры.
Теоретические сведения
-
Указатели
Нам нужно написать программу, которая работает со списком сотрудников организации. У сотрудников есть начальники. Предположим, что пользователь вводит имя сотрудника, а нам требуется напечатать его начальника, начальника его начальника и так всех начальников вплоть до руководителя предприятия.
Для каждого сотрудника должна быть структура, в которой хранится его имя, фамилия и его непосредственный начальник. Какого типа должно быть поле, в котором храниться начальник сотрудника?
Это поле должно давать нам информацию о структуре, которая описывает данные о начальнике (включая начальника начальника). Другими словами, ссылаться на структуру начальника, или указать, как обратиться к структуре начальника.
В языке С тип данных, который указывает адрес в памяти переменной, массива или структуры называется указатель. Указатель занимает объем памяти, необходимый для того, чтобы сохранить адрес любой ячейки памяти в компьютер. В 32-битной операционной системе указатель занимает 4 байта.
Для переменной типа указатель строго задается тип переменной, на которую он указывает. Это делается для того, чтобы случайно не выполнить некорректную операцию. Например, если над расположенным в памяти вещественным числом выполнить операцию целочисленного деления, то результат будет не верным.
Указатель объявляется с помощью символа «*», который записывается после типа переменной, на которую он указывает. Например, так можно объявить указатель на переменную целого типа:
int* a;
В рассматриваемом выше примере структура сотрудника должна содержать указатель на другую структуру типа сотрудник, который является начальником:
struct employee
{
char name[20];
char fam[20];
employee* chief;
};
Третье поле в это структуре указывает на другую структуру того же типа.
Указатели играют очень важную роль в языке С. Они служат для организации сложных структур данных (как в рассмотренном примере), для работы с динамической памятью, передаче параметров функций, быстрым операциям с памятью и многих других аспектов программирования, которые будут рассмотрены в дальнейшем.