
- •Лекция № 29
- •Общие сведения о строках.
- •Работа со строками с помощью указателей.
- •Функции работы со строками.
- •1. Общие сведения о строках.
- •2. Работа строками с помощью указателей.
- •3. Функции работы со строками.
- •Лекция № 30
- •2. Конструкторы и присваивание строк.
- •3. Операции
- •4. Функции (самостоятельная работа)
- •Лекция № 32
- •2. Инициализация структур.
- •3. Доступ к полям структуры.
- •4. Битовые поля.
- •5. Объединения (union).
- •Лекция № 32 а (самостоятельная работа)
- •2. Структуры и массивы.
- •3. Массивы структур.
- •4. Копирование структур.
- •5. Примеры решения задач.
- •Лекция № 33
- •2. Пример 2.
- •3. Пример 3.
- •4. Пример 4.
- •Лекция № 34
- •2. Доступ к файлу.
- •3. Функции для работы с файлами.
- •4. Примеры решения задач.
Лекция № 32 а (самостоятельная работа)
Тема : Обработка структур.
План
Структуры.
Структуры и массивы.
Массивы структур.
Копирование структур.
Примеры решения задач.
1.Структуры.
Структурой называется группа данных различных типов и/или назначения, которые представляют собой единый информационный элемент.
Например, к покупателю может относиться следующая информация :
Имя ; Адрес; Индекс;
Номер телефона ; Номер счета
Каждый элемент данных, называемый полем, имеет различное назначение. Одно поле содержит имя, другое название улицы, третье номер телефона. Однако все эти поля связаны между собой, поскольку относятся к одному и тому же покупателю, и обычно называются записью.
2. Структуры и массивы.
Поле структуры может быть массивом. Поле структуры может быть другой структурой. Например :
struct address
{
char street[40];
char city[20];
char zipcode[10];
};
Объявив эту структуру адресов, можно затем объявить структуру сотрудников и включить туда поле, представляющее собой структуру адресов. Получим одну структуру внутри другой.
struct employee
{
char lastname[20];
char firstname[20];
long salary;
address home;
}
Доступ к полю адресов можно выполнить следующим образом :
employee person;
…
strcpy (person.home.street, “221 Baker St.”);
strcpy (person.home.city, “London”);
…
3. Массивы структур.
Возможно создание массива, элементами которого являются структуры. Например :
employee staff[100];
student group[30];
Первая инструкция создает массив из 100 элементов, каждый из которых обозначает сотрудника вместе со всеми полями, присущими элементу структуры employee. Вторая инструкция создает массив из 30 студентов.
Для доступа к полю city данного сотрудника необходимо указать соответствующий индекс массива, чтобы компьютер мог понять, о ком идет речь. Например :
staff[10].home.city
4. Копирование структур.
Используя оператор присваивания, можно копировать одну переменную в другую, имеющею ту же структуру. Например, пусть заданы следующие объявления :
employee worker1, worker2, staff[100];
Тогда, поскольку компилятор может копировать переменные с одинаковой структурой, допустим следующие инструкции :
worker1 = worker2;
staff[5] = worker1;
worker1.home = staff[1].home;
5. Примеры решения задач.
Определить структуру, описывающую понятие рациональное число. Написать и протестировать функции для сокращения, печати рационального числа, а также для деления двух рациональных чисел.
#include <stdio.h>
#include <math.h>
typedef struct
{
int chis;
int znam;
} Racion;
void put (Racion A)
{
if (A.chis*A.znam < 0) printf (“ - ”);
A.chis = abs (A.chis);
A.znam = abs(A.znam);
printf (“%d / %d”, A.chis, A.znam);
}
Racion SOKR (Racion A)
{
int I,min;
if (abs(A.chis) > abs (A.znam)) min = abs(A.znam);
else min = abs(A.chis);
for (i=min; i > 1; i--)
if (A.chis%i==0 && A.znam&i==0) break;
A.chis/=i;
A.znam/=i;
return A;
}
void DIV (Racion A, Racion B, Racion *C)
{
A = SOKR(A);
B = SOKR(B);
C - > chis = A.chis * B.znam;
*C = SOKR(*C);
}
void main ()
{
Racion A,B,C;
puts (“Введите числитель и знаменатель 1-й, а затем 2-й дроби : ”);
scanf (“%d%d%d%d”, &A.chis, &A.znam, &B.chis, &B.znam);
DIV (A, B, &C);
printf (“При делении ”); put (A); printf (“ на ”); put (B);
printf (“\n получилось ”); put (C);
}