- •Программирование и основы алгоритмизации
- •1. Понятие алгоритма
- •1.1. Определение алгоритма
- •1.2. Гост на описание блок-схем
- •1.3. Виды алгоритмов
- •2. Языки программирования
- •2.1. Определение алгоритмического языка
- •2.2. Классификация языков. История развития языков программирования
- •2.3. Выбор языка программирования
- •2.5. Арифметические и логические основы программирования
- •3. Понятие системы программирования
- •3.1. Этапы создания программ
- •3.2. Конструирование программ
- •3.3. Методы, технологии и инструментальные средства производства программных продуктов
- •4.1. Литералы
- •4.2. Встроенные типы данных
- •4.3. Операции
- •Адресные операции
- •Операции преобразования знака
- •Побитовые операции
- •Операция определения размера
- •Операции увеличения и уменьшения значения
- •Операции динамического распределения памяти
- •Операция доступа
- •Аддитивные операции
- •Мультипликативные операции
- •Операции сдвига
- •Поразрядные операции
- •Операции сравнения
- •Логические бинарные операции
- •Операция присваивания
- •Специальные формы операций присваивания
- •Операции выбора компонентов структурированного объекта
- •Операции обращения к компонентам класса
- •Операция управления процессом вычисления значений
- •Операция вызова функции
- •Операция явного преобразования типа
- •Операция индексации
- •4.5. Агрегатные типы данных
- •4.5.1. Массивы
- •4.5.2. Структуры
- •4.5.3. Поля битов
- •4.5.4. Объединения Используются для хранения значений различных типов в одной и той же области памяти, но не одновременно.
- •4.5.5. Перечисления
- •4.5.6. Переименование типов
- •Typedef имя ранее определенного типа имя нового типа1
- •Объявление typedef применяется для создания удобных распознаваемых имен часто встречающихся и для вложенных типов, а также, чтобы сделать программы переносимыми для различных целых типов.
- •4.6. Обработка символьных и строковых переменных
- •4.7. Указатели
- •4.7.1. Инициализация указателей
- •4.7.2. Операции с указателями
- •4.8. Пользовательские процедуры и функции
- •4.8.1. Перегрузка функций
- •4.8.2. Перегрузка операций
- •4.8.3. Шаблоны функций
- •4.8.4. Возврат из функции нескольких значений
- •4.9. Файлы
- •4.10. Директивы препроцессора
- •Библиографический список
4.5.5. Перечисления
Это множество поименованных целых констант, называемых перечислимыми константами. Перечислительный тип определяет все допустимые значения, которые могут иметь переменные этого типа. Основная форма объявления
enum имя типа список названий список переменных;
Список переменных может быть пустым.
Пример: enum test{test1, test2, test3,test4};
enum test t;
Каждое из имен test1… test4 представляет собой целую величину (если они не определены по-другому). По умолчанию они соответствуют 0,1,2,3.
Во время объявления типа можно одному или нескольким перечисленным константам присвоить другие значения (константными выражениями).
Пример: еnum Ages {stas=18, ira, alex=19,Nina= alex-1};
Когда нет явного инициализатора, то применяется правило по умалчиванию: каждая следующая перечислимая константа увеличивается на единицу (+1) по сравнению с предшествующей. В примере вычисляется ira=19; Nina=18;
С переменными перечислимого типа можно проводить следующие операции:
– присвоить переменную типа enum другой переменной того же типа;
– провести сравнение с целью выяснения равенства или неравенства;
– некоторые арифметические операции с константами типа enum.
Пример: i= test4-test2;
Оператор print f(%d %d”, test1, test4); выдаст на экран числа 0 и 3.
t= test3;
t++ ; теперь t= test4;
t -=2 ; // t = test2;
С перечислениями можно работать как с целыми типами. Перечисления неявно могут преобразовываться в обычные целочисленные типы, но не наоборот.
Пример использования перечислений.
#include <stdio.h>
void main()
{
enum test {t1,t2,t3,t4,t5} t;
printf("t1=%d t4=%d\n", t1,t4); // 0 3
t=t1; printf("t=t1 = %d\n ", t); // 0
t++; printf("t++ = %d\n ", t); // 1
t=t4; t-=2;
printf("t4=%d t-=2 = %d\n ", t4, t); // 3 1
t--; printf("t-- = %d\n ", t); // 0
t=t4; t=t-t2; printf("t= = %d\n ", t); // 2
}
Нельзя использовать другие арифметические операции. Перечислимые константы могут быть объявлены анонимно (без имени).
Пример.
enum{false, true} boolean; //объявляет переменную boolean с допустимыми
// значениями false, true.
Основное назначение перечислений улучшить читаемость программы.
4.5.6. Переименование типов
Язык Си позволяет дать новое название уже существующим типам данных. Для этого используется ключевое слово typedef и при этом новый тип не создается.
Typedef имя ранее определенного типа имя нового типа1
,имя нового типа2…;
Новое имя становится синонимом имен ранее определенным. Пример:
typedef float real; //Теперь вместо float можно использовать real.
typedef char symbol; // вместо зарезервированного типа char можно
// использовать symbol
Часто используется для переопределения структур.
typedef struct st
{
char name [30];
char group [4];
int god;
} STUDENT;
Для определения переменной далее можно использовать запись st AN; или STUDENT AN;
Область действия зависит от расположения оператора typedef. Если определение находится внутри функции, то область действия локальна и ограничена этой функцией. Если вне, то – глобальна. С typedef может быть объявлен любой тип, включая указатели, функции и массивы, структуры и объединения.
Пример.
typedef char arr [40]; // FIO- массив символов
arr FIO, *adres; // adres - указатель на массив символов
Это эквивалентно char FIO[40], *adres;
Пример.
typedef int* Pi; //объявлен новый тип Pi-указатель на целое.
typedef void (*pfn) ( ); //объявлен новый тип pfn-указатель на функцию,
// не возвращающую значения, с любым списком типов аргументов.
typedef void (*pfnI) (int); // объявление типа pfnI-указатель на функцию с
//одним аргументом типа int, не возвращающую значения
typedef void (*pptn[10]) (); //объявление типа pptn- массив из 10 указателей
// на функцию, не возвращающую значения, с любым списком аргументов.