- •Е.А. Ганцева
- •Учебное пособие
- •Оглавление
- •Введение
- •Контрольные вопросы
- •2. Операции и основные типы данных
- •2.1. Операции
- •2.2. Указатели и массивы
- •2.3. Символы и строки символов
- •Контрольные вопросы
- •3. Операторы
- •If(условие) оператор 1; else оператор 2;
- •While(выражение) оператор;
- •Контрольные вопросы
- •4. Сложные типы данных
- •4.1. Составные деклараторы
- •4.2. Перечисления
- •4.3. Структуры
- •4.4. Объединения
- •4.5. Объявление tyрedef
- •4.6. Битовые поля
- •Контрольные вопросы
- •5. Функции
- •Контрольные вопросы
- •6. Организация ВводА/выводА
- •6.1. Ввод/вывод потоком
- •6.2. Функции ввода/вывода нижнего уровня
- •6.3. Функции ввода/вывода с консоли и порта
- •Контрольные вопросы
- •7. Директивы препроцессора
- •#Undef идентификатор
- •Контрольные вопросы
- •8. Видимость и время жизни переменных
- •Контрольные вопросы
- •9.1. Описание локальных переменных
- •9.2. Функциональная запись преобразования типов
- •9.3. Перегрузка функций
- •9.4. Перегрузка операторов
- •9.5. Модификаторы const и volatile
- •9.6. Доступ к глобальным переменным
- •Контрольные вопросы
- •10. Объектно–ориентированное программирование
- •10.1. Инкапсуляция
- •10.2. Классы и объекты
- •10.3. Друзья класса
- •10.4. Перегрузка операторов для классов
- •10.5. Конструкторы и деструкторы
- •10.6. Указатель this
- •10.7. Наследование
- •10.8. Доступность членов в иерархии классов
- •10.9. Виртуальные базовые классы
- •10.10. Виртуальные функции
- •Контрольные вопросы
- •11. Потоки ввода/вывода
- •11.1. Понятие потока
- •11.2. Библиотека iostream
- •11.3. Класс streambuf
- •11.4. Класс ios
- •11.5. Потоковый вывод
- •11.6. Встроенные типы
- •11.7. Манипуляторы
- •11.8. Потоковый ввод
- •11.9. Ввод типов, определенных пользователем
- •11.10. Простой ввод/вывод в файл
- •11.11. Обработка строкового потока
- •11.12. Потоки вывода на экран
- •Контрольные вопросы
- •Список использованных источников
Контрольные вопросы
1. Какова структура программы на Си?
2. Какие константы используются в Си?
2. Операции и основные типы данных
2.1. Операции
Для записи операторов используют операции, приведенные в табл. 1.
Таблица 1
Операция Наименование Операция Наименование |
! Логическое НЕ ~ Побитовое дополнение |
+ Сложение - Вычитание, арифмети- |
* Умножение ческое отрицание |
/ Деление % Остаток |
<< Сдвиг влево >> Сдвиг вправо |
< Меньше <= Меньше или равно |
> Больше >= Больше или равно |
== Равно != Не равно |
& Побитовое И, адресация | Побитовое ИЛИ |
^ Побитовое исключ. ИЛИ && Логическое И |
|| Логическое ИЛИ , Последовательное выполне- |
?: Операция условного вы- ние (запятая) |
ражения ++ Инкремент |
-- Декремент = Простое присваивание |
+= Сложение с присваиванием -= Вычитание с присваиванием |
*= Умножение с присваиванием /= Деление с присваиванием |
%= Остаток с присваиванием >>= Сдвиг вправо с присваиванием |
<<= Сдвиг влево с присваиванием &= Побитовое И с присваиванием |
|= Побитовое ИЛИ с присваи- ^= Побитовое исключающее |
ванием ИЛИ с присваиванием |
Значение логического выражения, отличное от 0, истинно.
Си/Си++ поддерживает определения для множества базовых или “основных” типов данных. Представление в памяти, область значений величин различных типов, преобразование типов изложены в /1 – 4/.
Типы signed char, signed int, signed short int и signed long int вместе с соответствующими двойниками unsigned называются типами целых.
Спецификаторы типов float и double относятся к типу "плавающих".
Тип void может быть использован для объявления функций, не возвращающих значения.
В целых типах ключевое слово signed может быть опущено. Если ключевое слово unsigned опускается, то тип целого будет знаковым (signed).
В некоторых реализациях могут быть использованы опции компилятора, позволяющие изменить умолчание для типа char со знакового на беззнаковый. Тогда сокращение char имеет то же значение, что и unsigned char.
Для преобразования типа выражения необходимо в скобках перед ним записать требуемый тип:
(int)1.2; (double)(a+3); (float)i; (long)(6785*3.5/x);
Определить размер памяти в байтах, соответствующий идентификатору или типу позволяют операция sizeof:
sizeof(char); sizeof(int); sizeof(b); sizeof(float);
Операция sizeof обычно используют при выделении памяти под переменные для того, чтобы избежать машинной зависимости:
buf=(int *)malloc(100*sizeof(int)); // выделение памяти для 100 целых.
Запретить изменение переменной позволяет модификатор const :
const float i=1;
Переменные const имеют ту же зону видимости, что и переменные static. Const, в отличие от директивы #define, контролирует типы.
Для изменяющихся переменных используется модификатор volatile, показывающий, что переменные могут меняться фоновым процессом.