Язык Си - руководство для начинающих
Шрифт:
В первом способе используется сам код ASCII. Вы должны только указать номер символа вместе с предшествующим знаком "обратная косая черта". Мы уже делали это в нашей программе "золотой эквивалент". Вот эта строка
beep = ' \007 ';
Здесь имеются два важных момента, которые вы должны отчетливо представлять себе. Первый - это то, что последовательность знаков заключается в апострофы точно так же, как это делается с обычным символом. Второе - то, что номер символа должен быть записан в восьмеричном виде. При записи последовательности знаков мы можем случайно пропустить нули в первых позициях; в этом случае для представления кода "сигнал" мы могли бы использовать '\07'
При использовании кода ASCII необходимо отметить различие между числами и символами, обозначающими числа. Например, символу "4" соответствует код ASCII, равный 52. Это символ "4" а не число 4.
РИС. 3. 4. Формы записи констант целых типов
Во втором способе представления "неудобных" знаков используются специальные последовательности символов. Они называются управляющими последовательностями и выглядят следующим образом:
\n новая строка
\t табуляция
\b шаг назад
\r возврат каретки
\f подача бланка
\\ обратная косая черта (\)
\' апостроф (')
\" кавычки (")
При присваивании символьной переменной эти последовательно сти тоже должны быть заключены в апострофы. Например, мы могли бы написать оператор
nerf = ' \n ';
а затем вывести на печать переменную nerf; это приведет к продвижению на одну строку вперед на печатающем устройстве или на экране дисплея.
Первые пять управляющих последовательностей являются общепринятыми символами, предназначенными для управления работой печатающего устройства:
символ "новая строка" вызывает переход к новой строке;
символ "табуляция" сдвигает курсор или печатающую головку на некоторое фиксированное число позиций 5 или 8;
символ "шаг назад" производит сдвиг назад на одну позицию;
символ "возврат каретки" осуществляет возврат к началу строки;
символ "подача бланка" вызывает протяжку бумаги на одну страницу.
В последних трех управляющих последовательностях символы \, ', " можно считать символьными константами [поскольку они служат для определения символьных констант и непосредственно используются в операторе printf, применение их самих в качестве символов могло бы привести к ошибке]. Если вы хотите вывести на печать строку.
Запомните, " символ \ называется обратная косая черта".
оператор будет выглядеть так:
printf(" Запомните, \" символ \\ называется обратная косая черта. \" \n");
Здесь у вас могут возникнуть два вопроса. Во-первых, почему мы не заключили управляющие последовательности в апострофы? Во-вторых, в каких случаях необходимо использовать код ASCII и когда управляющие последовательности, которые мы только что обсуждали? (Мы надеемся, что у вас возникли как раз эти вопросы,
ПОТОМУ что мы собираемся отвечать именно на них.)1. Когда символ является частью строки символов, заключенной в кавычки, он входит туда без апострофов независимо от того, является ли он управляющим или нет. Заметим, что все остальные символы в нашем примере (3,а, п, о, м, н, и т. д.) тоже присутствуют в этой строке без кавычек. Строка символов, заключенная в кавычки, называется символьной строкой или цепочкой. Мы обсудим этот вопрос в следующей главе.
2. Если у вас есть возможность выбора одной из двух форм записи некоторой специальной управляющей последовательности, скажем '\f', или эквивалентного кода из таблицы кодов ASCII - '\016', то рекомендуем использовать '\f'. Во-первых, это более наглядно. Во-вторых, лучше согласуется с требованием переносимости программ, поскольку даже в том случае, когда в системе не используется код ASCII, обозначение '\f' будет продолжать "работать".
Программа
Ниже приводится короткая программа, позволяющая узнавать номер кода символа даже в том случае, если на вашей машине не используется код ASCII.
main /* определяет номер кода символа */
{
char ch;
printf(" Введите, пожалуйста, символ .\n");
scanf(" %c", &ch); /* ввод пользователем символа */
printf("Koд символа %с равен %d.\n", ch, ch);
}
При работе с этой программой не забывайте нажимать клавишу [ввод] или [возврат] после ввода символа. Затем функция scanf прочтет введенный символ; знак амперсанд (&) указывает, что символ должен быть присвоен переменной ch. Функция printf выводит на печать величину ch дважды: первый раз как символ (в соответствии со спецификацией %c), а затем как десятичное целое число (в соответствии со спецификацией %d).
Типы данных float и double
В большинстве проектов разработки программного обеспечения оказывается вполне достаточным использовать данные целых типов. Однако в программах вычислительного характера часто применяются числа с плавающей точкой. В языке Си такие данные описываются типом float; они соответствуют типу real в Фортране и Паскале. Указанный подход, как вы могли заметить при внимательном чтении, позволяет представлять числа из гораздо более широкого диапазона, включая и десятичные дроби. Числа с плавающей точкой совершенно аналогичны числам в обычной алгебраической записи, используемой при работе с очень большими или малыми числами. Давайте рассмотрим ее подробнее.
Алгебраическая запись числа представляет собой произведение некоторого десятичного числа на степень, основание которой равно десяти. Ниже приведено несколько примеров.
Число | Алгебраическая запись для ввода запись в машину |
---|---|
1 000000000 | = 1.0 ´ 109 = 1.0e9 |
123000 | = 1.23 ´ 105 = 1.23е5 |
322.56 | = 3.2256 ´ 102 = 3.2256е2 |
0.000056 | = 5.6 ´ 10– 5 = 5.6е-5 |