Лекция: Общее знакомство
Вид материала | Лекция |
- Жизнь Клима Самгина (общее знакомство) утопия, 27.58kb.
- Лекция Общее знакомство с организмом человека Человек и окружающая среда, 81.53kb.
- Цель дисциплины, 24.29kb.
- Тема пояснения, 99.97kb.
- Общее знакомство с цветковыми растениями, 1421.63kb.
- Образовательные программы : дошкольное общее образование, начальное общее образование,, 549.09kb.
- План «курсы трейдинга» День 1 Вступительная лекция Знакомство. Базовые понятие о трейдинге., 56.64kb.
- Ю. Б. Введение в общую психологию. М., 2000. Лекция, 413.91kb.
- Урок литературы по рассказу саши черного "в лунную ночь", 85.66kb.
- Лекция со студентами асс, 33.36kb.
Объединения
Объединение описывает переменную, которая может иметь любой тип из некоторого множества типов.
Определение объединенного типа данных аналогично определению структурного типа данных:
union имя_объединения {
Описания_элементов
};
Пример:
union bigword {
long bg_long;
char *bg_char [4];
};
Данные типа union bigword занимают память, необходимую для размещения наибольшего из своих элементов, и выравниваются в памяти к границе, удовлетворяющей ограничениям по адресации как для типа long, так и для типа char *[4].
Описание переменной объединенного типа:
Пример:
union bigword x;
union bigword *p;
union bigword a[100];
Перечисления
^ Данные перечислимого типа относятся к некоторому ограниченному множеству данных.
Определение перечислимого типа данных:
enum имя_перечислимого_типа {
Список_значений
};
Каждое значение данного перечислимого типа задается идентификатором.
Пример:
enum color {
red, green, yellow
};
Описание переменной перечислимого типа:
enum color chair;
enum color suite [40];
Использование переменной перечислимого типа в выражении.
Пример:
char = red;
suite[5] != yellow;
^
Переменные структуры
В языках, таких как Ада и Паскаль, имеется тип данных, называемых переменная запись, объекты которой содержат набор одних и тех же компонентов плюс компоненты, не являющиеся общими для всех остальных объектов. В языке Си также имеется тип данных, подобный переменной записи, называемой переменной структурой, которая может быть реализована с использованием комбинации структуры и объединения. В общем случае переменные структуры будут состоять из трех частей: набора общих компонентов, метки активного компонента и части с меняющимися компонентами. Общая форма переменной структуры имеет следующий вид:
struct {
общие компоненты;
метка активного компонента;
union {
описание компонента 1
описание компонента 2
...
описание компонента n
} идентификатор;
}
Ниже приведен пример определения переменной структуры health_record:
struct {
/* общая информация */
char name[25];
int age;
char sex;
/* метка активного компонента */
marital_status ms;
/* переменная часть */
union {
/* холост */
/* нет компонентов */
/* женат */
struct {
char marriage_date[8];
char spouse_name[25];
int no_children;
}
/* разведен */
char date_divorced[8];
} marital_info;
} health_record;
где тип marital_status, т.е. тип метки активного компонента ms, описан как
typedef enum {SINGL,MARRIED, DIVORCED}
marital_status;
Ниже приведены несколько примеров ссылки на компоненты переменной структуры:
health_record.name
healts_record.ms
health_record.marriage_info.marriage_date
^
Указатели и структуры
Рассмотрим метку структуры student, описание которой было дано выше как
struct student {
char name[25];
int id, age;
char sex;
}
Указатель new_student определен как
struct student *new_student;
Предположим, что память выделена таким образом, чтобы new_student указывал на объект student. Тогда на компоненты этого объекта можно ссылаться следующим образом:
(*new_student).name
(*new_student).id
(*new_student).age
(*new_student).sex
Поскольку указатели часто используются для указания на структуры, в языке Си специально для ссылок на компоненты таких структур введен оператор выбора стрелка вправо ->. Например, ссылки на вышеприведенные компоненты структуры можно записать с использованием оператора стрелки вправо -> как:
new_struct->name
new_struct->id
new_struct->age
new_struct->sex
^
Массив структур
Процесс описания массива структур совершенно аналогичен описанию любого другого типа массива:
struct book libry[MAXBKS];
Этот оператор объявляет libry массивом, состоящим из MAXBKS-элементов. Каждый элемент массива представляет собой структуру типа book. Таким образом, libry[0] является book-структурой, libry[1] - второй book-структурой и т.д.
^ Определение элементов массива структур. При определении элементов массива структур мы применяем те же самые правила, которые используются для отдельных структур: сопровождаем имя структуры операцией получения элемента и имени элемента:
libry[0].value value - первый элемент массива
libry[4].title title - пятый элемент массива
^
Переименование типов
Формат
typedef старый_тип новый_тип
Примеры:
typedef long large;
/* определяется тип large, эквивалентный типу long */
typedef char *string;
/* тип string, эквивалентен типу char* */
Переименование типов используется для введения осмысленных или сокращенных имен типов, что повышает понятность программ, и для улучшения переносимости программ (имена одного типа данных могут различаться на разных ЭВМ).
Пример:
/* Реализован алгоритм, который позволяет определить
строки матриц, состоящие из одинаковых целых,
расположенных в различных столбцах. Используются
двумерные массивы и структуры. Сначала выполняется
сортировка строк по возрастанию. Отсортированные
строки сравниваются и выводятся на экран номера
одинаковых строк */
#include
#include
#include
#include
const n=4, m=4; // n - кол-во строк, m - столбцов
int m1[n][m]; /*исходный массив*/
struct mas{int i,i1;};
/*i-индекс сравниваемой строки с i1 строкой*/
mas a[n*2];
/*массив типа mas, где будут лежать одинаковые
строки, a[1].i и a[1].i1 - одинаковые строки*/
void main()
{
clrscr();
int i,j;
randomize();
for(i=0;i
for(j=0;j
m1[i][j]=random(2);
/*случайным образом в массив заносим целые*/
for(i=0;i
printf("\n %d) ",i);
for(int j=0;j
printf(" %d",m1[i][j]);
}
int min, p;
/* индекс минимального элемента после s-го элемента
i-ой строки сортировка строк массива по возрастанию */
for(i=0;i
for(int s=0;s
min=m1[i][s+1];
for(int j=s;j
if(m1[i][j]<=min) {
min=m1[i][j];p=j;
}
/* запоминаем минимальный элемент в ряду после
s-го элемента */
if(m1[i][s]>=min) {
m1[i][p]=m1[i][s];m1[i][s]=min;
}
/* меняем местами s-й и p-й элемент,если
s-й > p-го(минимального) */
}
}
printf("\n");
for(i=0;i
printf("\n %d) ",i);
for(int j=0;j
printf(" %d",m1[i][j]);
/* выводим отсортированный массив */
}
int s,k=0;
/*сколько элементов в i-й строке совпадают с элементами i1 строки*/
/*сколько строк совпали*/
int i1;
for(i=0;i
for(i1=i+1;i1
s=0;
for(int j=0;j
/* сравнение идет по j-му столбцу */
if(m1[i][j]==m1[i1][j]) s++;
/* если соответствующие элементы в i-й и i1-й строки совпадают то кол-во совпавших увеличивается на 1 */
if(s==m) {a[k].i=i;a[k].i1=i1;k++;}
/* если все элементы i-й и i1-й строки совпали, то они одинаковые */
}
printf("\n Совпадающие строки :");
for(i=0;i
printf("\n %d и %d",a[i].i,a[i].i1);
/* распечатываем a[i].i-ю и a[i].i1-ю совпадающую
строку */
getch();
}
15. Лекция: Библиотека языка Си и файлы ввода-вывода
^ Стандартные библиотечные функцииБиблиотека языка Си содержит множество функций и макроопределений. Библиотеки меняются от системы к системе, но есть ядро функций (стандартная библиотека). Эти функции используются для:
Главными преимуществами стандартных библиотечных функций Си являются мобильность и низкие затраты на сопровождение пользовательских приложений. Библиотечные функции не подвержены частым изменениям, поэтому программы, в которых они используются, легки в сопровождении. Некоторые из этих библиотечных функций соответствуют стандарту ANSI С - стандарту Си Американского национального института, благодаря чему они приемлемы для всех систем, соответствующих этому стандарту. Чтобы сократить затраты и время на разработку приложений, рекомендуется использовать библиотечные функции Си всякий раз, когда это оказывается возможным. Стандартные библиотечные функции Си объявляются в наборе файлов-заголовков, которые в UNIX-системах обычно расположены в каталоге /user/include. Опишем библиотечные функции ANSI C, определенные в файлах-заголовков, перечисленные ниже: Кроме указанных, в большинстве UNIX-систем есть файлы заголовков, которые не определены в ANSI C: В этих файлах заголовков объявляются функции, которые помогают получить доступ к информации о бюджетах пользователей и групп в UNIX-системах. В указанных системах они определены в библиотеке libc.a. Эти функции полезны для разработки приложений. В файле заголовков
|