Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lect10.doc
Скачиваний:
8
Добавлен:
20.05.2014
Размер:
68 Кб
Скачать
☆
    1. Структуры

В предыдущих лекциях рассматривали массивы. Массив – это последовательность

элементов одного типа. Обращение к конкретному элементу производится по его индексу. Но можно создавать группы из элементов разного типа. Такие группы

называются структурами и доступ к отдельным элементам выполняется по именам элементов. Это отличает структуру от массива, хотя массив можно считать простейшей структурой.

Структуру можно рассматривать как новый сложный тип, составленный из

других типов. Имя этого нового структурного типа указывается после

ключевого слова struct в виде: struct имя { . . . . } ;

где в фигурных скобках даются имена и типы его составляющих.

Пример :

struct stdnt { char Nm [20]; char Grup[5]; (10.8)

int godr; float srbal; float stip; } ;

Это опиcание структурного типа (tag в англ.). Типы элементов в описании разделяются знаками точка с запятой. Для выделения памяти структуре нужно

обычным образом описать одну или несколько структурных переменных, например,

stdnt s1, s2, s3;

Обычно работают с массивами структур: stdnt sts[60];

Такой массив можно рассматривать как таблицу, в которой строки

соответствуют индексам массива, а столбцы имеют имена и размеры,

указанные в описании типа stdnt в (10.11). Отметим, что в литературе

по базам данных строки называют записями, а столбцы полями.

Вызов конкретного элемента осуществляется через уточненное имя,

( есть и другие способы) :

имястp . имяэл

Здесь имястp – это имя структуры ( не имя типа!), а имяэл – это имя элемента.

Пример: s1.stip, s1. srbal, sts [13]. Nm, sts[7] . godr

Последнее значение в примере – это год рождения восьмого студента.

В заключение отметим ещё раз, что оператор struct определяет новый тип, но

не создаёт конкретного объекта, т.е. не выделяет память для него ( напомним, что

объект – это участок памяти). Создание объекта происходит при его описании,

т.е. когда определяется его имя и его структура по указанному в описании типу.

10.6 Применение функции printf для форматирования

В языке Си функция printf является стандартной функцией для вывода

данных на экран. Её можно использовать и в программах на С++ . Для работы

с ней нужен заголовочный файл <stdio.h> . Достоинство этой функции

состоит в том, что, в отличие от вывода в поток cout, она позволяет явно

указывать формат выводимых данных, т.е. их вид и расположение. Но работа

с ней сложнее, чем с потоком cout. Для её вызова нужен оператор

printf (" ........\n " , список вывода ); (10.9)

Первым параметром является управляющая строка, которая записывается

в кавычках после открывающей скобки для параметров функции.

В управляющей строке указывается любой выводимый текст и дескрипторы

для значений. Дескриптор означает “описатель” .

Пример: printf ( “ x = % f y= % f \n”, x, y );

При выводе указанная в кавычках строка копируется, а вместо

знаков процента % в управляющей строке вставляются значения

из списка вывода. Дескрипторы i, f, c характеризуют тип

выводимых значений: i или d используются для целых чисел, f -для

вещественных, с - для символов. Между знаком % и дескриптором может быть

указано количество позиций для чисел или символов,а также количество цифр в

дробной части , например, % 7i , % 11.2f.

Пример: printf ( “ x = %9.2 f y= %9.2 f \n”, x, y ); (10.10)

Если в выделенные позиции число или строка не помещаются, то поле

автоматически расширяется. Есть и другие возможности управления

формой вывода. Напомним, что в арифметических выражениях

символ % означает операцию получения остатка от деления.

Управляющий символ \n -это символ "новая строка" (один символ !).

Перед закрывающей кавычкой его ставят почти всегда для переxода на новую

строку. Если этого не сделать, то следующий вывод, например, сообщение системы,

не будет выводиться с новой строки, т.е. \n - это подготовка следующего вывода.

Список вывода отделяется запятой от управляющей строки, и его элементы

разделяются запятыми. Каждому элементу из списка вывода соответствуют в управляющей строке знак % и дескриптор, т.е. количество знаков % равно длине списка. Можно вызывать printf и без списка вывода.

Пример для функции вывода:

printf (" мой результат: a = %i b= %f %c \n", aa, bb, simvl);

Здесь список вывода сoстоит из трех элементов, т.е. выводятся значения

aa, bb, simvl и эти значения будут отображены вместо первого, второго и

третьего % в управляющей строке.

Форматный вывод в файл, аналогичный printf, выполняет функция языка С

fprintf

В заключение этого раздела отметим, что для современных компиляторов

библиотека стандартных функций языка С переписана в стиле С++ с целью

ускорения выполнения. Использование старой библиотеки при этом также

возможно. Для применения модифицированной библиотеки нужно изменить

имена заголовочных файлов для стандартных функций и добавить в начало

программы оператор

usimg namespace std;

Имена заголовочных файлов изменяются следующим образом: в начале старого

имени добавляется буква 'c' и удаляется расширение .h . Пример:

# include < math.h > - это стиль языка С,

# include < сmath > - это новый стиль для языка С++.

- - - - - Контрольная работа. Создать массив с фамилией автора.

Вывести на экран фамилию в обратном порядке, используя цикл .

5

Соседние файлы в папке Лекции