Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Понятие структуры в языке СиСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте Тема 6. Структуры Цель: познакомиться со способами создания структурного типа данных i переменных структурного типа, с операторами доступа к элементам структурных переменных, с вложенными структурами i массивами структур в языке Си, с оператором SizeOf и декларацией typedef. Понятие структуры в языке Си Объявление типа структуры Декларация переменных структурного типа Доступ к элементам структурной переменной Массивы структур Оператор sizeof Декларация typedef Понятие структуры в языке Си Структура - это одна или несколько переменных, возможно, различных типов данных, которые сгруппированы под одним именем. В языке Си термин "структура" соответствует понятию "запись" в языках программирования. Пример 1: строка таблицы журнала студенческой группы.
Пример 2: точка в пространстве.
Пример 3: круг на плоскости.
Для того, чтобы работать со структурой, необходимо: 1. объявить структурный тип; 2. декларировать переменные этого типа. Объявление типа структуры Синтаксис: struct [<имя = тег>] {<Декларация_члена 1>; <Декларация_члена 2>; ... <Декларация_члена n>; }; Декларация структуры - это описание типа данных. Пример 4: точка А в пространстве. struct struct point {Int xa {int xa; int ya; int ya; int za; int za; };}; / * Без тега * / / * с тегом * / / * Новый тип - struct point * / Пример 5: круг на плоскости. struct struct circle {Float x0 {float x0; float y0; float y0; float r; float r; };}; / * Без тега * / / * с тегом * / / * Новый тип - struct circle * / Декларация переменных структурного типа Синтаксис: I. <Декларация типа структуры> <список переменных>; Это сочетание способов, в котором в одной декларации описывается структурный тип и переменные этого структурного типа. II. struct <тег> <список переменных> В этом случае описание структурного типа с тегом выполняется предварительно, а затем используется для описания переменных. Пример 6: описать прямую, проходящую через точки А i В, Используя ранее введенный тип для представления точки в пространстве. struct struct point {Int xa {int xa; int ya; int ya; int za; int za; } A, b;}; struct point a, b; Инициализации структурных переменных можно выполнить при ее объявлении (по аналогии с массивами): Пример 7: круг с центром (2, 3) и радиусом 5,5. / * Без тега * / / * с тегом * / struct circle pr = {2.0, 3.0, 5.5} {Float x0; float y0; float r; } Pr = {2.0, 3.0, 5.5}; Пример 8: расстояние от (0,0) до точки pt. struct {Float x; float y; } Pr = {20,15} double dist; dist = sqrt ((double) pt.x * pt.x + (double) pt.y * pt.y); printf («От начала координат"); printf ("до точки (% f,% f)", pt.x, pt.y); printf ("расстояние% f", dist); Структуры можно вкладывать друг в друга (нет ограничения на глубину вложения).
Прямоугольник на плоскости образуется в результате пересечения двух прямых углов, в которых стороны Параллельные осям координаты, первый из этих углов образуется точкой pt1, второй угол - точкой pt2. Пример 9: задания прямоугольника координатами точек двух углов. struct rectange { struct point pt1; struct point pt2; }; srtuct rectange poly; float a; / * длина стороны а * / a = poly.pt2.x - poly.pt1.x; printf ("Длина стороны a =% f \ n", a);
Массивы структур Структуры можно объединять в массивы (получаем таблицу): Пример 10: список студентов с результатами экзаменов. # Define KST 35 struct list {Char * fio; int math; int phys; int r_l; }; struct list group [KST]; Пример 11: Объявление таблицы с инициализацией. struct list gr [] = { {"Андреев", 5, 5, 5}, {"Борисенко", 5, 4, 4}, .......... {"Якименко", 4, 4, 4} };
Оператор sizeof В декларации списка студентов мы определили размер этого списка (массива структур) с помощью поименованной константы KST: # Define KST 35 Еще один вариант определения размера этого массива такой. Размер этого массива полностью определен во время компляцiи I дорвнюе произведения количества элементов массива на размер его отдельного элемента, поэтому число элементов массива вычисляется: число элементов массива = <размер> group / <размер> struct list В языке Си есть оператор sizeof (унарный, префiксний, правоасоцiативний, высший приоритет). Он работает во время компляцiи. Он применяется для исчисления размера любого объекта: · sizeof <обкт> · sizeof (<имя типа данных>) Результат этого оператора целое, равной размеру (в байтах) объекта или типа данных. Объектом может быть: · переменная; · массив; · структура. Именем типа данных может быть: · имя базового типа (int, long, float,...); · имя производной типа (структуры или указателя). Поэтому в операторi препроцессору define возможные записи: # Define KST (sizeof group / sizeof (struct list)) # Define KST (sizeof group / sizeof group [0]) Второй оператор содержит не <имя типа данных>, а объект (первый элемент массива group).
Декларация typedef Эта декларация позволяет давать новые имена типам данных. Синтаксис: typedef <старое имя типа> <новое имя типа>; Семантика: <Старое имя> i <новое имя> становятся синонимами. Пример 12: объявление таблицы с результами экзаменов студентов. typedef INT Ekz; typedef CHAR * String; typedef Struct List {String fio; Ekz math; Ekz phys; Ekz r_l; } Liststud; Liststud Group [KST]; Этот пример iлюстуе использования того имени типа данных, который был декларирован в typedef. Синтаксис: <Тип, объявленный typedef> <список змнних> Принято имя типа-синоньма, объявление в typedef, начинать с большой буквы, чтобы отличать его от базовых типов. Причины использования typedef: 1. эстетическая: одним именем заменяется сложная декларация типа данных; 2. стремление сделать текст программы более ясным. Например, вместо 3. struct list * pstr; / * указатель на структуру типа list * / можно объявить: typedef struct list * Plist; / * указатель (P List) на структуру типа list * / Plist pstr; 4. typedef використують для обеспечения машинной независимости программы на языке Си. Например, зависят от реализации величины цiлочисельних типов данных (int, short, long) i действительных (double, long double). При переносi на другую платформу меняют только декларации typedef, а не декларации всех переменных (целых i действительных). typedef не создает новый тип данных, а создает только синоним для существующего типа данных.
Понятие функции в языке Си Определение функции Вызов функции Инструкция return (возврат) Прототип функции Понятие функции в языке Си Вспомним универсальный метод решения задач на ЭВМ - метод пошаговой детализации. С его помощью входное задача разбивается на пiдзадачi, между этими пiдзадачамы распределяются обязанности i определяется, как эти пiдзадачi взаимодействуют: задача { · пiдзадача 1 · пiдзадача 2 ·............. · пiдзадача n} На этапе разработки алгоритма каждом вспомогательного метода мы ставим в соответствие вспомогательный алгоритм. В языке Си вспомогательном алгоритма будет соответствовать понятию функция, которая будет выполнять свои обязанности фиксированным способом i выполнять взамодiю с другими функциями. В других языках программирования вспомогательным алгоритмам отвечают: подпрограммы языка Бейсик, процедуры и функции языка Паскаль.
Определение функции Прежде чем использовать функцию, ее нужно определить Синтаксис: <Тип результата> <имя функции> ([<декларация аргументов>]) { <Декларации> / * тело <Инструкции> функции * / };Могут быть опущены отдельные компоненты этого определения:
Оператор () - высший приоритет, лiвоасоцiативний. Такие функции-заглушки используют для создания больших программных комплексов, состоящих из множества функций. По мере разработки функций такие заглушки заменяют на реальные функции. Вызов функции <Имя функции> ([<список аргументов>])Значение, возвращаемое функцией, может быть в функции, вызывающей, проигнорировано. Пример 3: / * вызов printf: * / printf ("как инструкция"); / * Printf возвращает результат: * / if (res = printf ("как выражение")) dummy (); / * успех * /else exit (-1); / * выход в MS-DOS * /Инструкция return (возврат) Возвращает результат из вызываемой функции, в с функцию, которая вызывает. Синтаксис: return <выражение>; / * если выражение простой * /return (<выражение>); / * если выражение сложное * /Семантика:
Прототип функции Потому что функции в языке Си независимые друг от друга (на различие от языка Паскаль, где они могут быть вложенные друг в друга), функции, что вызывает нужна информация по то, что в ней будут использованы вызовы других функций. Это выполняется с помощью Инструкции описания прототипа функции. Синтаксис: <Тип результата> <имя функции> ();или более "жесткий" вариант: <Тип результата> <имя функции> (<декларации типов аргументов>);Поэтому в примере 4 в функции main необходима декларация: INT max_int (int, int); / * 1 * /Она сообщает, что в функции main Ожидается вызов функции max_int с двумя цiлочисельнимы аргументами, которая возвращает результат целого типа. Этот прототип также можно записать иначе: INT max_int (); / * 2 * /INT max_int (int a, int b); / * 3 * /Третий вариант iлюструе главный принцип прототипа функции - имена аргументов, указанi в прототипi, не обвьязково должны спiвпадаты с именами формальных аргументов в описании функции.
Способы передачи аргументов Аргументы командной строки Способы передачи аргументов В абсолютном большинстве языков программирования существует три способа передачи аргументов
Аргументы командной строки В командной строке исполняемого файла, можно передать аргументы, записывая их через пробел. Эти аргументы, которые записаны в командной строке, являются фактическими для функции main. Формальные аргументы для функции main создаются ОС. Поэтому в функции main нужно уметь их обрабатывать. Аргументы (формальные) функции main:
Для программы echo операционная система построит такие фактические аргументы:
! Аргументы командной строки являются строками.
Тема 6. Структуры Цель: познакомиться со способами создания структурного типа данных i переменных структурного типа, с операторами доступа к элементам структурных переменных, с вложенными структурами i массивами структур в языке Си, с оператором SizeOf и декларацией typedef. Понятие структуры в языке Си Объявление типа структуры
|
||
|
Последнее изменение этой страницы: 2017-01-27; просмотров: 1028; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.009 с.) |