Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Четвертый оператор printf() начинается с последовательности \r. Она помещает курсор в начало текущей строки. Затем отображается строка “Ого!” и последовательность \n переводит курсор на следующую строку.
Окончательный вывод на экране имеет следующий вид:
Введите желаемую сумму месячной зарплаты: $4000.00
Ого! $4000.00 в месяц соответствует $48000.00 в год.
Сброс буфера вывода
Когда функция printf() действительно отправляет вывод на экран? Первоначально операторы printf() пересылают выходные данные в промежуточную область хранения, называемую буфером. Время от времени данные, находящиеся в буфере, отправляются на экран. Стандартные правила С относительно того, когда пересылать вывод из буфера на экран, довольно очевидны: он передается на экран, когда буфер заполнен, когда встречается символ новой строки или когда наступает время ввода данных. (Отправка вывода из буфера на экран или в файл называется сбросом буфера.) Например, первые два оператора printf() не заполняют буфер и не содержат символа новой строки, но непосредственно за ними следует оператор scanf(), который запрашивает ввод. Это инициирует отправку вывода printf() на экран.
Вы можете столкнуться со старой реализацией, в которой оператор scanf() не обеспечивает принудительную очистку буфера. Это в результате приводит к тому, что программа начинает искать введенные данные, даже предварительно не выводя на экран приглашение на ввод. В таком случае для сброса буфера можно воспользоваться символом новой строки. Код изменяется следующим образом:
printf("Введите желаемую сумму месячной зарплаты:\n");
scanf("%f", ssalary);
Данные в языке C113
Этот код работает независимо от того, приводит предстоящий ввод данных к сбросу буфера или нет. Однако он устанавливает курсор на следующей строке, не позволяя вводить данные в той же строке, где находится приглашение. Другое решение предусматривает применение функции fflush(), которая описана в главе 13.
Ключевые понятия
В языке С имеется поразительное количество числовых типов. Это отражает намерение разработчиков языка С избегать препятствий на пути программиста. Вместо заявления о том, что одного вида целочисленных значений вполне достаточно, в языке С попытались предоставить программистам возможность выбора конкретной вариации (со знаком или без) и размера типа, которые лучше всего удовлетворяют нуждам разрабатываемой программы.
В компьютере числа с плавающей запятой фундаментально отличаются от целых чисел. Они хранятся и обрабатываются по-разному. Две 32-битных единицы памяти могут содержать идентичные наборы битов, но если одна из них интерпретируется как float, а другая как long, то они будут представлять совершенно разные и не связанные между собой значения. Например, если взять в IBM PC последовательность битов, представляющую число 256.0 типа float, и интерпретировать его как значение типа long, вы получите 113246208. Язык С позволяет записывать выражения со смешанными тинами данных, но будет выполнять автоматические преобразования, чтобы в действительном вычислении участвовал только один тин данных.
В памяти компьютера символы представлены числовым кодом. В США наибольшее распространение получил код ASCII, но язык С поддерживает использование и других кодов. Символьная константа — это символьное представление числового кода, применяемого в компьютерной системе; она состоит из символов, заключенных в одиночные кавычки, например, 'А'.
Резюме
В языке С имеется большое разнообразие типов данных. Базовые типы данных разделены на две категории: целочисленные типы данных и данные с плавающей запятой. Двумя отличительными особенностями целочисленных типов являются объем памяти, выделяемой для типа, и наличие или отсутствие знака. Наименьший тип целочисленных данных — char, который в зависимости от реализации может быть со знаком или без знака. Можно использовать signed char и unsigned char, чтобы явно указать, какой вариант нужен, однако обычно это делается в случае использования тина char для хранения небольших целых чисел, а не символьных кодов. К другим целочисленным типам относятся short, int, long и long long. В языке С гарантируется, что каждый из этих типов имеет, по крайней мере, такой же размер, как предшествующий тип. Все они являются типами со знаком, но можно применять ключевое слово unsigned для создания соответствующих типов без знака: unsigned short, unsigned int, unsigned long и unsigned long long. Или же можно добавить модификатор signed, чтобы явно указать, что тип имеет знак. Наконец, существует еще тип Bool — тип без знака, который способен принимать значения 0 и 1, представляющие false и true.
Существуют три типа с плавающей занятой: float, double и, начиная со стандарта С90, long double. Каждый из них минимум не меньше предыдущего тина. Дополнительно реализация может поддерживать комплексные и мнимые типы за счет использования ключевых слов Complex и Imaginary в сочетании с ключевыми ело-
114 Глава 3.
вами для типов с плавающей запятой. Например, можно работать с типами double _Complex и float _Imaginary.
Целые числа могут быть выражены в десятичной, восьмеричной и шестнадцатеричной форме. Префикс 0 указывает на восьмеричное число, а префикс 0x пли 0x — на шестнадцатеричное. Например, 32, 040 и 0x2 0 — это десятичное, восьмеричное и шестнадцатеричное представление одного и того же значения. Суффикс 1 или L указывает, что значение имеет тип long, all или LL — что оно относится к типу long long.
Символьные константы представляются путем помещения символа в одиночные кавычки, например, 'Q', '8' и '$'.С помощью управляющих последовательностей, таких как '\n', задаются определенные непечатаемые символы. Вы можете применять форму '\007' для представления символа в коде ASCII.
Числа с плавающей запятой могут быть записаны в форме с фиксированной десятичной точкой, например, 9393.912, или в экспоненциальном представлении, например, 7.38Е10. Стандарты С99 и С11 предоставляют третью форму экспоненциальной записи с использованием шестнадцатеричных цифр и степеней 2, подобно 0xа.lfpl0.
Функция printf() позволяет выводить значения различных типов с применением спецификаторов, которые в своей простейшей форме состоят из знака процента и буквы, указывающей тип, например, %d или %f.
Вопросы для самоконтроля
Ответы на эти вопросы находятся в приложении А.
1. Какие типы вы будете использовать для каждого из следующих типов данных (в некоторых случаях могут подойти несколько типов данных)?
а. Население Москвы.
б. Стоимость копии фильма на DVD-диске.
в. Буква, которая чаще других встречается в данной главе.
г. Количество раз, сколько эта буква встречается в данной главе.
2. В каких случаях следует использовать переменную типа long вместо int?
3. Какие переносимые типы можно использовать, чтобы получить 32-битное целое число со знаком? Приведите аргументы в пользу своего выбора.
Читать дальшеИнтервал:
Закладка: