- •1.Базовые элементы языка с. Алфавит и словарь языка
- •2. Основные типы данных. Классификация их типов. Модификация базовых типов.
- •3. Константы.
- •4. Переменные.
- •5. Структура с - программы. Понятие локальных и глобальных переменных. Функция main().Директивы препроцессора (#include и #define). Комментарии.
- •6. Операции языка с. Арифметические, логические операции. Поразрядные операции.
- •7. Операции языка с. Операция присваивания и отношения. Операция определения размера. Оператор последовательного вычисления.
- •8. Операции языка с. Условная операция. Операция (), операция [].
- •9. Приоритет операций и порядок вычислений.
- •11. Ввод-вывод символов
- •12. Форматированный ввод-вывод. Модификаторы формата. Спецификаторы преобразования. Подавление ввода.
- •13. Операторы языка с. Условные операторы (if и switch).
- •16. Одномерные массивы.
- •17. Строковый литерал. Чтение и запись строк.
- •18. Двухмерные массивы. Массивы строк.
- •20.Способы доступа к элементам массива
- •21. Понятие указателя. Инициализация указателей.
- •22. Указательные переменные. Операции получения адреса (&) и раскрытия ссылки(*).
- •23. Указательные выражения. Адресная арифметика.
- •Динамическое выделение памяти для массивов.
- •Функции. Определения функций. Оператор return.
- •Тип_результата id_функции (список);
- •Функции. Прототипы функций.
- •Тип_результата id_функции (список);
- •Функции. Вызов функций: вызов по значению и по ссылке.
- •Тип_результата id_функции (список);
- •Передача массива в функцию.
- •Классы памяти. Область видимости.
- •Аргументы функции main(): argv и argc.
- •Вызов библиотечных функций.
- •Директива препроцессора #define: создание макрофункций с помощью директивы #define.
- •Директивы условной компиляции #if, #else, #elif, #endif, #ifdef, #ifndef.
- •Понятие структуры. Доступ к членам структуры.
- •Присваивание структур.
- •Id_структуры . Id_поля
- •Передача членов структур функциям. Передача целых структур функциям.
- •Указатели на структуры. Средство typedef.
- •Понятия объединения и перечисления. Битовые поля.
- •Основы файловой системы. Стандартные потоки. Указатель файла. Открытие файла. Закрытие файла.
Понятие структуры. Доступ к членам структуры.
Cтруктуры – это составной объект, в который входят элементы любых типов, за исключением функций. В отличие от массива, который является однородным объектом, структура может быть неоднородной.
Тип структуры определяется записью вида:
struct { список определений } ;
В структуре обязательно должен быть указан хотя бы один компонент. Определение структур имеет
следующий вид:
тип-данных описатель;
где тип-данных указывает тип структуры для объектов, определяемых в описателях. В простейшей форме описатели представляют собой идентификаторы или массивы.
Пример:
struct { double x,y; } s1, s2;
struct { int year; char moth, day; } date1, date2;
Переменные s1, s2 определяются как структуры, каждая из которых состоит из двух компонент х и у. Каждая из двух переменных date1, date2 состоит из трех компонентов year, moth, day. Существует и другой способ ассоциирования имени с типом структуры, он основан на использовании тега структуры. Тег структуры аналогичен тегу перечислимого типа. Тег структуры определяется следующим образом:
struct тег { список описаний; };
где тег является идентификатором.
В приведенном ниже примере идентификатор student описывается как тег структуры:
struct student { char name[25];
int id, year_of_birth;
char grp; };
Объявление структурного типа обязательно заканчивается ; .
Тег структуры используется для последующего объявления структур данного вида в форме:
struct тег список-идентификаторов;
Пример:
struct studeut st1,st2;
Использование тегов структуры необходимо для описания рекурсивных структур. Ниже рассматривается использование рекурсивных тегов структуры.
struct node { int data;
struct node * next; } st1_node;
Тег структуры node действительно является рекурсивным, так как он используется в своем собственном описании, т.е. в формализации указателя next. Структуры не могут быть прямо рекурсивными, т.е. структура node не может содержать компоненту, являющуюся структурой node, но любая структура может иметь компоненту, являющуюся указателем на свой тип, как и сделано в приведенном примере.
Значения элементов структур могут определяться вводом, присваиванием или инициализацией.
Пример инициализации структуры:
student stud1={"Васильков",1,1992,"ПО711"};
Доступ к членам структуры
Доступ к отдельному элементу структуры осуществляется посредством конструкции вида:
имя-структуры.элемент
Оператор доступа к элементу структуры . соединяет имя структуры и имя элемента.
Пусть объявлена структура, содержащая информацию о координатах точки:
struct {int x;
int y} pt;
Чтобы напечатать, например, координаты точки pt, используется следующее обращение к printf:
printf("%d, %d", pt.x, pt.y);
Пример обращения к элементам сруктуры student, описанной в предыдущем пункте:
st1.name="Иванов";
st2.id=st1.id;
st1_node.data=st1.year_of_birth;
Присваивание структур.
Если тип двух программных объектов одинаков , то один объект можно присвоить другому.
По умолчанию, когда один объект присваивается другому, делается поразрядная копия всех
данных-членов копируемого объекта. Например, когда структура var1 присваивается структуре
var2. То содержимое всех полей структуры var1 копируется в соответствующие поля структуры
var2. Это иллюстрируется следующим программным кодом:
#include
#include
struct ex_struct//объявили структурный тип
{int a;
int b;};
void main(){
//объявляем переменную структурного типа и присваиваем ее полям занчение 5
ex_struct var1={5,5};
// объявляем переменную структурного типа
ex_struct var2;
//выводим на экран значение переменной var1
printf("\nvar1.a=%d var1.b=%d",var1.a,var1.b);// на экран выведется var1.a=5 var1.b=5
//присваиваем переменной var2 var1
var2=var1;
//выводим на экран значение переменной var2
printf("\nvar2.a=%d var2.b=%d",var2.a,var2.b); // на экран выведется var2.a=5 var2.b=5
//присваиваем полю a переменной var2 значение 6
var2.a=6;
//выводим на экран значения переменных var1 и var2.
printf("\nvar1.a=%d var1.b=%d",var1.a,var1.b); // на экран выведется var1.a=5 var1.b=5
printf("\nvar2.a=%d var2.b=%d",var2.a,var2.b); // на экран выведется var2.a=6 var2.b=5
}
Таким образом после выполнения операции присваивания два объекта остаются независимыми.
На пример изменение поля a переменной var1 не влияет на переменную var2.
Однако при присваивании объектов друг другу необходимо быть очень внимательным.
Обращение к полям структур производится путем создания составных имен, которые образуются двумя способами:
1) при помощи операции принадлежности (.) общий вид которой