- •Содержание
- •Введение
- •1. Структурное программирование
- •4. Семь основных элементов программирования
- •4.1. Вывод
- •4.1.1. Функция printf
- •4.1.2. Другие функции вывода: puts и putchar
- •4.2 Ввод
- •4.2.1. Функция scanf
- •4.2.2. Использование gets и getch для ввода
- •4.3. Потоковый ввод-вывод
- •4.4. Типы данных
- •4.4.1. Числа с плавающей точкой
- •4.4.2. Три типа целых
- •4.4.3. Определение строки
- •4.4.4. Идентификаторы
- •4.4.5. Преобразования типов
- •4.5. Операции
- •4.5.1. Операции присваивания
- •4.5.2. Одноместные и двуместные операции
- •4.5.4. Побитовые операции
- •4.5.5. Комбинированные операции
- •4.5.6. Адресные операции
- •4.6. Условные операторы
- •4.6.1. Операции сравнения
- •4.6.2. Логические операции
- •4.6.3. Операторы присваивания
- •4.6.5. Оператор запятая
- •4.6.6. Оператор if
- •4.6.7. Условный оператор (?:)
- •4.7. Циклические конструкции в программах
- •4.7.1. Цикл while
- •4.7.2. Цикл for
- •4.7.3. Цикл do...While
- •4.7.4. Оператор switch (переключатель)
- •4.7.5. Оператор break
- •4.7.6. Оператор continue
- •4.7.7. Оператор goto
- •4.7.8. Использование команд передачи управления
- •4.8. Функции
- •4.8.1. Анализ программы
- •4.8.2. Глобальные описания
- •4.8.3. Описание функции void
- •4.8.4. Оператор return
- •4.8.5. Использование прототипов функций и полных определений функций
- •4.9. Комментарии
- •5. Обзор структур данных
- •5.1. Указатели
- •5.1.1. Динамическое распределение
- •5.1.2. Указатели и функции
- •5.1.3. Адресная арифметика
- •5.1.4. Неправильное употребление указателей
- •5.1.5. Использование неинициализированных указателей
- •5.1.6. Ошибки при передаче по адресу
- •5.2. Массивы
- •5.2.1. Массивы и указатели
- •5.2.2. Массивы и строки
- •5.2.3. Многомерные массивы
- •5.2.4. Массивы и функции
- •5.2.5. Индексы массивов
- •5.3. Структуры
- •5.3.1. Структуры и указатели
- •5.4. Операции с файлами
- •5.5. Использование директивы typedef
- •Соглашения, принятые для описания алгоритмов
- •And do else fi for goto if od set then through to while
- •Библиографический список
4.4. Типы данных
При написании программы мы работаем с некоторым видом информации, большинство которой попадает в один из 4-х основных типов: целые числа, числа с плавающей точкой, текст и указатели.
Целые – это числа, которые используются для счета (например, 1, 2, 5, –21, 752).
Числа с плавающей точкой могут содержать дробные разряды и экспоненту (5,4567*1065). Иногда их называют действительными (вещественными) числами (real).
Текст состоит из символов (a, Z, !, 3) и строк (“Это просто проверка”).
Указатели не хранят информацию; вместо этого каждый из них содержит адрес памяти ЭВМ, в которой хранится информация.
4.4.1. Числа с плавающей точкой
С++ поддерживает 4 основных типа данных в различных формах. Мы уже использовали 2 из них: целые (int) и символы (char). Сейчас мы будем модифицировать последнюю программу для использования 3-го типа данных: чисел с плавающей точкой (float). Имеется также версия типа float, известная как double. Как вы могли догадаться, переменная типа double в два раза больше переменной типа float. Это означает, что она может иметь больше значащих цифр и больший диапазон значений экспоненты.
Войдем в редактор С++ и преобразуем программу и следующему виду:
void main ()
{
int a, b;
float ratio;
printf ("Введите два числа:");
scanf ("%d %d" ,&a, &b);
ratio = a/b;
printf ("Отношение =%f\n", ratio);
}
Сохраним ее под именем RATIO.CPP. Введя два значения (такие, как 10 и 3), вы получите результат (3.000000). Вероятно, вы ожидали ответа 3.333333; почему же ответ оказался только 3? Потому, что a и b имеют тип int, отсюда и результат тоже типа int. Он был преобразован к типу float при присваивании его ratio, но преобразование имело место после, а не до деления. Вернитесь в редактор и измените тип a и b на float; измените также строку формата "%d %d" в scanf на "%f %f". Сохраните программу, затем компилируйте и выполняйте. Результат теперь 3.333333, как и ожидалось.
Есть и другое решение этой проблемы. В С++ предусмотрена возможность изменять тип переменной на время операции. Это может быть полезно, например, в приведенном выше примере. Для такого изменения необходимо добавить перед именем переменной заключенное в скобки имя типа, в который ее нужно преобразовать:
void main ()
{
int a, b;
float ratio;
printf ("Введите два числа:");
scanf ("%d %d" ,&a, &b);
ratio = (float)a/(float)b;
printf ("Отношение =%f\n", ratio);
}
Теперь при выполнении программы будет получен результат 3.333333, хотя переменные a и b определены как int. Такой прием полезно использовать в том случае, если требуется в одном или нескольких местах программы обращаться к переменным одного типа как к переменным другого типа.
4.4.2. Три типа целых
В дополнение к типу int, С++ поддерживает версии short int и long int, обычно сокращаемые до short и long. Фактические размеры short, int и long зависят от реализации; все, что гарантирует С++ – это то, что переменная типа short не будет больше (т.е. не займет больше байт), чем переменная типа long. В С++ эти типы занимают 16 битов (short), 16 битов (int) и 32 бита (long).
Беззнаковые типы. С++ позволяет вам объявлять некоторые типы (char, short, int и long) беззнаковыми (unsigned). Это означает, что вместо отрицательных значений эти типы имеют только неотрицательные (большие или равные нулю) значения. Переменные такого типа могут поэтому хранить бóльшие значения, чем знаковые типы. Например, в С++ переменная типа int может содержать значения от –32768 до 32767; переменная же типа unsigned int может содержать значения от 0 до 65535. Обе занимают одно и тоже место в памяти (16 бит в данном случае), но используют его по-разному.
Таблица 1 - Типы данных, размеры и диапазоны в С++
Тип |
Размер (в битах) |
Диапазон |
unsigned char |
8 |
0..255 |
char |
8 |
–128…127 |
enum |
16 |
–32768…32767 |
unsigned short |
16 |
0…65535 |
short |
16 |
–32768…32767 |
unsigned int |
16 |
0…65535 |
int |
16 |
–32768…32767 |
unsigned long |
32 |
0…4294967295 |
long |
32 |
–2147483648…2147483647 |
float |
32 |
3.4E–38…3.4E+38 |
double |
64 |
1.7E–308…1.7+308 |
long double |
64 |
1.7E–308…1.7+308 |
pointer |
16 |
(указатели near, _cs, _ds, _es, _ss) |
pointer |
32 |
(указатели far, huge) |
