Главная » Просмотр файлов » Керниган и Ритчи - Язык программирования Си

Керниган и Ритчи - Язык программирования Си (793773), страница 14

Файл №793773 Керниган и Ритчи - Язык программирования Си (Керниган и Ритчи - Язык программирования Си) 14 страницаКерниган и Ритчи - Язык программирования Си (793773) страница 142019-04-24СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 14)

Так же, как и в символьные константы, встроки можно включать эскейп-последовательности; \", например, представляет собой двойную кавычку.Строковые константы можно конкатенировать ("склеивать") во время компиляции; например, запись двухстрок"Здравствуй," " мир!"эквивалентна записи одной следующей строки:"Здравствуй, мир!"Указанное свойство позволяет разбивать длинные строки на части и располагать эти части на отдельныхстрочках.Фактически строковая константа — это массив символов. Во внутреннем представлении строки в концеобязательно присутствует нулевой символ '\0', поэтому памяти для строки требуется на один байт больше,чем число символов, расположенных между двойными кавычками.

Это означает, что на длину задаваемойстроки нет ограничения, но чтобы определить ее длину, требуется просмотреть всю строку. Функцияstrlen(s) вычисляет длину строки s без учета завершающего ее символа '\0'. Ниже приводится нашаверсия этой функции:/* strlen: возвращает длину строки s */int strlen(char s[]){int i;i = 0;while (s[i] != '\0')++i;return i;}Функция strlen и некоторые другие, применяемые к строкам, описаны в стандартном заголовочном файле<string.h>.Будьте внимательны и помните, что символьная константа и строка, содержащая один символ, не одно и тоже: 'х' не то же самое, что "х".

Запись 'х' обозначает целое значение, равное коду буквы х изстандартного символьного набора, а запись "х" - массив символов, который содержит один символ (букву х)и '\0'.В Си имеется еще один вид константы — константа перечисления. Перечисление — это список целыхконстант, как, например, вenum boolean { NO, YES };Первое имя в enum5 имеет значение 0, следующее — 1, и т.

д. (если для значений констант не было явныхспецификаций). Если не все значения специфицированы, то они продолжают прогрессию, начиная отпоследнего специфицированного значения, как в следующих двух примерах:enum escapes { BELL = '\а', BACKSPACE = '\b', TAB = '\t',NEWLINE = '\n', VTAB = '\v', RETURN = '\r' };enum months { JAN = 1, FEB, MAR, APR, MAY, JUN,JUL, AUG, SEP, ОСТ, NOV, DEC };/* FEB есть 2, MAR есть 3 и т.д.

*/Имена в различных перечислениях должны отличаться друг от друга. Значения внутри одного перечислениямогут совпадать.Средство enum обеспечивает удобный способ присвоить константам имена, причем в отличие от #defineзначения констант при этом способе могут генерироваться автоматически. Хотя разрешается объявлятьпеременные типа enum, однако компилятор не обязан контролировать, входят ли присваиваемые этимпеременным значения в их тип. Но сама возможность такой проверки часто делает enum лучше, чем#define. Кроме того, отладчик получает возможность печатать значения переменных типа enum всимвольном виде.2.4. ОбъявленияВсе переменные должны быть объявлены раньше, чем будут использоваться, при этом некоторыеобъявления могут быть получены неявно — из контекста.

Объявление специфицирует тип и содержит списокиз одной или нескольких переменных этого типа, как, например, вint lower, upper, step;char с, line [1000];Переменные можно распределять по объявлениям произвольным образом, так что указанные выше спискиможно записать и в следующем виде:int lower;int upper;int step;char c;char line[1000];Последняя форма записи занимает больше места, тем не менее, она лучше, поскольку позволяет добавлять ккаждому объявлению комментарий. Кроме того, она более удобна для последующих модификаций.В своем объявлении переменная может быть инициализирована, как, например:char esc = '\\';int i = 0;int limit = MAXLINE+1;float eps = 1.0e-5;Инициализация неавтоматической переменной осуществляется только один раз — перед тем, как программаначнет выполняться, при этом начальное значение должно быть константным выражением.

Явноинициализируемая автоматическая переменная получает начальное значение каждый раз при входе вфункцию или блок, ее начальным значением может быть любое выражение. Внешние и статическиепеременные по умолчанию получают нулевые значения. Автоматические переменные, явным образом неинициализированные, содержат неопределенные значения ("мусор").5От английского слова enumeration — перечисление. — Примеч. ред.К любой переменной в объявлении может быть применен квалификатор const для указания того, что еезначение далее не будет изменяться.const double e = 2.71828182845905;const char msg[] = "предупреждение: ";Применительно к массиву квалификатор const указывает на то, что ни один из его элементов не будетменяться.

Указание const можно также применять к аргументу-массиву, чтобы сообщить, что функция неизменяет этот массив:int strlen(const char[] );Реакция на попытку изменить переменную, помеченную квалификатором const, зависит от реализациикомпилятора.2.5. Арифметические операторыБинарными (т. е. с двумя операндами) арифметическими операторами являются +, -, *, /, а также операторделения по модулю %. Деление целых сопровождается отбрасыванием дробной части, какой бы она ни была.Выражение дает остаток от деления х на y и, следовательно, нуль, если х делится на y нацело. Например, годявляется високосным, если он делится на 4, но не делится на 100. Кроме того, год является високосным, еслион делится на 400.

Следовательно,if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)printf("%d високосный год\n", year);elseprintf("%d невисокосный год\n", year);Оператор % к операндам типов float и double не применяется. В какую сторону (в сторону увеличения илиуменьшения числа) будет усечена дробная часть при выполнении / и каким будет знак результата операции% с отрицательными операндами, зависит от машины.Бинарные операторы + и - имеют одинаковый приоритет, который ниже приоритета операторов *, / и %,который в свою очередь ниже приоритета унарных операторов + и -. Арифметические операции одногоприоритетного уровня выполняются слева направо.В конце этой главы (параграф 2.12) приводится таблица 2.1, в которой представлены приоритеты всехоператоров и очередность их выполнения.2.6. Операторы отношения и логические операторыОператорами отношения являются>>=<<=Все они имеют одинаковый приоритет.

Сразу за ними идет приоритет операторов сравнения на равенство:==!=Операторы отношения имеют более низкий приоритет, чем арифметические, поэтому выражение вроде i <lim-1 будет выполняться так же, как i < (lim-1), т. е. как мы и ожидаем.Более интересны логические операторы && и ||. Выражения, между которыми стоят операторы && или ||,вычисляются слева направо.

Вычисление прекращается, как только становится известна истинность илиложность результата. Многие Си-программы опираются на это свойство, как, например, цикл из функцииgetline, которую мы приводили в главе 1:for (i = 0; i < lim-1 && (с = getchar()) != EOF && с != '\n'; ++i)s[i] = c;Прежде чем читать очередной символ, нужно проверить, есть ли для него место в массиве s, иначе говоря,сначала необходимо проверить соблюдение условия i < lim-1. Если это условие не выполняется, мы недолжны продолжать вычисление, в частности читать следующий символ. Так же было бы неправильнымсравнивать с и EOF до обращения к getchar; следовательно, и вызов getchar, и присваивание должнывыполняться перед указанной проверкой.Приоритет оператора && выше, чем таковой оператора ||, однако их приоритеты ниже, чем приоритетоператоров отношения и равенства. Из сказанного следует, что выражение видаi < lim-1 && (с = getchar()) != '\n' && с != EOFне нуждается в дополнительных скобках.

Но, так как приоритет != выше, чем приоритет присваивания, в(с = getchar()) ! = '\n'скобки необходимы, чтобы сначала выполнить присваивание, а затем сравнение с '\n' .По определению численным результатом вычисления выражения отношения или логического выраженияявляется 1, если оно истинно, и 0, если оно ложно.Унарный оператор ! преобразует ненулевой операнд в 0, а нуль в 1. Обычно оператор ! используют вконструкциях видаif (!valid)что эквивалентноif (valid == 0)Трудно сказать, какая из форм записи лучше. Конструкция вида !valid хорошо читается ("если неправильно"), но в более сложных выражениях может оказаться, что ее не так-то легко понять.Упражнение 2.2. Напишите цикл, эквивалентный приведенному выше fоr-циклу, не пользуясь операторами&& и ||.2.7.

Преобразования типовЕсли операнды оператора принадлежат к разным типам, то они приводятся к некоторому общему типу.Приведение выполняется в соответствии с небольшим числом правил. Обычно автоматически производятсялишь те преобразования, которые без какой-либо потери информации превращают операнды с меньшимдиапазоном значений в операнды с большим диапазоном, как, например, преобразование целого в число сплавающей точкой в выражении вроде f+i. Выражения, не имеющие смысла, например число с плавающейточкой в роли индекса, не допускаются. Выражения, в которых могла бы теряться информация (скажем, приприсваивании длинных целых переменным более коротких типов или при присваивании значений сплавающей точкой целым переменным), могут повлечь за собой предупреждение, но они допустимы.Значения типа char — это просто малые целые, и их можно свободно использовать в арифметическихвыражениях, что значительно облегчает всевозможные манипуляции с символами.

Характеристики

Тип файла
PDF-файл
Размер
2,25 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7046
Авторов
на СтудИзбе
259
Средний доход
с одного платного файла
Обучение Подробнее