русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Доступ к элементам структур.


Дата добавления: 2013-12-23; просмотров: 1906; Нарушение авторских прав


Инициализация и присваивание структур.

Инициализация и присваивание структур.Инициализация структур похожа на инициализацию массивов. Непосредственно в определении конкретной структуры после ее имени и знака '=' в фигурных скобках размещается список начальных значений элементов. Например:

 

 

Сравнивая структуры с массивами, нужно обратить внимание на одну особенность, связанную с операцией присваивания. Если определены два массива одного и того же типа и одинаковых размеров, то присвоить элементам одного массива значения элементов другого массива можно только с помощью явного перебора элементов, например, в цикле

 

 

Попытка использовать имена массивов без индексов в операции присваивания будет обречена на провал (ведь имя массива есть неизменяемый указатель):

 

 

В то же время стандарт языка Си разрешает присваивание структур. Если не обращать внимание на смысл имен введенных выше структур типа structgoods (tea - чай; coat - пиджак), то допустимо следующее присваивание:

 

 

Определив структуру типа complex, можно выполнить, например, такое присваивание (структура sigma того же типа определена и инициализирована выше):

 

 

Отметим, что для структур не определены операции сравнения даже на равенство. И сравнивать структуры нужно только поэлементно.

 

 

Доступ к элементам структур. Наиболее наглядно и естественно доступ к элементам структур обеспечивается с помощью уточненных имен. Конструкция

имя_структуры. имя_элемепта

 

играет роль названия (имени) объекта того типа, к которому отнесен элемент в соответствии с определением структурного типа. В нашем Примере с инициализацией структуры типа struct goods:

 

coat.name - указатель типа char* на строку "пиджак черный";



coat.price - переменная типа long со значением 400000;

coat.percent - переменная типа float со значением 7.5;

coat.vol - переменная типа int со значением 220;

coat.date - массив типа char [9], содержащий "12.01.97".

 

Обратите внимание, что перед точкой стоит не название структурного типа, а имя конкретной структуры, для которой ее определением выделена память.

Уточненное имя - это выражение с двумя операндами и операцией "точка" между ними. Операция "точка" называется операцией доступа к элементу структуры (или объединения). У нее самый высокий ранг наряду со скобками (и операцией "стрелка" для доступа к элементам структуры через адресующий ее указатель, см. табл. 1.4).

Уточненное имя используется для выбора правого операнда операции "точка" из структуры (или объединения), задаваемой левым операндом. Левый операнд должен иметь структурный тип, а правый операнд должен быть именем компонента (элемента) этой структуры. Тип результата операции "точка", т.е. тип уточненного имени, - это тип именуемого ею компонента (элемента) структуры. Именно такие типы указаны в приведенных выше примерах, т.е. coat.vol - объект типа int и т.д.

Если при определении структуры она инициализирована, то ее элементы получают соответствующие начальные значения. С помощью уточненных имен эти значения могут быть, например, выведены на экран дисплея.

Пример программы с инициализацией структуры и выводом значений ее элементов:

 

 

Результат выполнения программы:

 

 

Уточненные имена элементов структур обладают всеми правами объектов соответствующих типов. Их можно использовать в выражениях, их значения можно вводить с клавиатуры и т.д. Например, с помощью следующих операторов можно изменить торговую наценку (элемент coat.price) и вычислить розничную цену на определенный в программе товар (пиджак черный):

 

 

Обратите внимание, что в качестве фактического параметра функции scanf() используется адрес элемента percent структуры coat. Для этого операция получения адреса & применяется к уточненному имени coat.percent. При вычислении розничной цены товара приходится вводить явное приведение типов (long),так как результат умножения элемента coat.price на вещественное выражение 1.0+coat.percent/!00 имеет по умолчанию тип double.

Следующая программа выполняет сложение комплексных чисел, для представления которых использован структурный тип, имя которого вводит спецификатор typedef:

 

 

Возможный результат выполнения программы:

 

 

 

Определения:

Процедура – подпрограмма для выполнения какой-то законченной последовательности действий.

Функция – подпрограмма для вычисления какого-либо параметра.

Модуль – программная единица для хранения элементов, которые можно использовать в тех или иных программах. (типы, константы, переменные и подпрограммы). Если все, что было написано в программе, полностью входит в скомпилированный файл программы, то из модуля в скомп. программу попадают только те части, которые необходимы данной программе. Модуль выступает как библиотека, которую можно употреблять во многих программах. Наличие модулей позволяет программировать и отлаживать программу по частям, создавать библиотеки подпрограмм и данных, воспользоваться возможностями стандартных модулей, практически неограниченно увеличивать кодовую (содержащую коды команд) часть программы.

Модули:

 

1.Стандартные – заранее созданные разработчиками языка. Эти модули поставляются в скомпилированном виде, и их без каких-либо доработок можно использовать в программах;

2.Модули разработчика – надо написать, скомпилировать, отладить, можно вносить изменения.

Некоторые понятия:

 

Программа С почти всегда состоит из нескольких раздельно транслируемых "модулей". Каждый "модуль" обычно называется исходным файлом, но иногда - единицей трансляции. Он состоит из последовательности описаний типов, функций, переменных и констант. Описание extern позволяет из одного исходного файла ссылаться на функцию или объект, определенные в другом исходном файле.

Например:

 

extern "c" double sqrt ( double );

extern ostream cout;

 

Самый распространенный способ обеспечить согласованность описаний внешних во всех исходных файлах - поместить такие описания в специальные файлы, называемые заголовочными. Заголовочные файлы можно включать во все исходные файлы, в которых требуются описания внешних. Например, описание функции sqrt хранится в заголовочном файле стандартных математических функций с именем math.h, поэтому, если нужно извлечь квадратный корень из 4, можно написать:

 

#include <math.h>

int main()

{

float x;

x=sqrt(4);

return 0;

}

 

Поскольку стандартные заголовочные файлы могут включаться во многие исходные файлы, в них нет описаний, дублирование которых могло бы вызвать ошибки. Так, тело функции присутствует в таких файлах, если только это функция-подстановка, а инициализаторы указаны только для констант.

 

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

 

В команде включения заключенное в угловые скобки имя файла (в нашем примере - ) ссылается на файл, находящийся в стандартном каталоге включаемых файлов. Часто это - каталог /usr/include/CC. Файлы, находящиеся в других каталогах, обозначаются своими путевыми именами, взятыми в кавычки. Поэтому в следующих командах:

 

#include "math1.h"

#include "/usr/bs/math2.h"

 

включаются файл math1.h из текущего каталога пользователя и файл math2.h из каталога /usr/bs.

 

Приведем небольшой законченный пример, в котором строка определяется в одном файле, а печатается в другом. В файле header.h определяются нужные типы:

 

// header.h -здесь объявляем переменную и функцию

extern char * prog_name;

extern void f();

 

// main.c -файл основной программы

#include "header.h"

char *prog_name = "примитивный, но законченный пример";

int main()

{

f();

}

 

// f.c -здесь находится функция f(), которая печатает строку //из осн. программы

#include <iostream.h>

#include "header.h"

void f()

{

cout << prog_name << '\n';

}

 

Рассмотрим другой пример:

 

// Основная программа

#include "include_file.cpp" //Подключаем свой модуль

#include <iostream.h>

 

int main()

{

int a,b,c,d,e;

cout << "Введите A: ";

cin >> a;

cout << "Введите B: ";

cin >> b;

c=fPlus(a,b);

d=fMinus(a,b);

e=fMultiply(a,b);

cout << "Сумма= " << c << endl;

cout << "Разность= " << d << endl;

cout << "Произведение= " << e << endl;

 

return 0;

}

 

// Файл include_file.cpp - наш модуль

int fPlus(int,int); //

int fMinus(int,int); // Прототипы функций

int fMultiply(int,int); //

 

int fPlus(int a,int b)

{

return a+b;

}

int fMinus(int a,int b)

{

return a-b;

}

int fMultiply(int a,int b)

{

return a*b;

}

 



<== предыдущая лекция | следующая лекция ==>
Выделение памяти для структур. | Составные части CИИ.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.