Описания

Язык С
Строк программы, исключая математическое обеспечение Является учебным введением в центральную часть языка “C” Hачинаем. Единственный способ освоить новый язык Оператор FOR Набор полезных программ Подсчет символов Подсчет слов Функции Аргументы - вызов по значению Область действия: внешние переменные Резюме Константы Описания Преобразование типов До 9 и буквы от а до F Операции и выражения присваивания Старшинство и порядок вычисления Операторы и блоки Переключатель Цикл DO - WHILE Оператор CONTINUE Основные сведения Функции, возвращающие нецелые значения Еще об аргументах функций Правила, определяющие область действия Статические переменные Блочная структура Рекурсия Указатели и адреса Указатели и массивы Адресная арифметика Указатели символов и функции Указатели - не целые До 12, а не от 0 до 11. Так как за экономию памяти у нас пока не награждают, такой способ проще, чем подгонка индек-сов Инициализация массивов указателей Указатели на функции Структуры Структуры и функции Указатели на структуры Мы продемонстрируем, как правильно выполнить эту задачу Поля Определение типа Обращение к стандартной библиотеке Форматный вывод - функция PRINTF Форматный ввод - функция SCANF Форматное преобразование в памяти Обработка ошибок - STDERR и EXIT Обращение к системе Низкоуровневый ввод/вывод - операторы READ и WRITE Произвольный доступ - SEEK и LSEEK Пример - распечатка справочников Пример - распределитель памяти Константы Синтаксическая нотация Преобразования Первичные выражения Унарные операции Аддитивные операции Операция присваивания Спецификаторы типа Описание структур и объединений Инициализация TYPEDEF Оператор SWITCH Внешнее определение функции Область действия внешних идентификаторов Неявные описания Явные преобразования указателей Анахронизмы Операторы
439386
знаков
0
таблиц
0
изображений

2.4. Описания

 

Все переменные должны быть описаны до их использования,

хотя некоторые описания делаются неявно, по контексту. Опи-

сание состоит из спецификатора типа и следующего за ним

списка переменных, имеющих этот тип, как, например,

 

INT LOWER, UPPER, STEP;

CHAR C, LINE[1000];

Переменные можно распределять по описаниям любым обра-

зом; приведенные выше списки можно с тем же успехом записать

в виде

 

INT LOWER;

INT UPPER;

INT STEP;

CHAR C;

CHAR LINE[1000];

Такая форма занимает больше места, но она удобна для до-бавления комментария к каждому описанию и для последующих модификаций.

Переменным могут быть присвоены начальные значения внут-

ри их описания, хотя здесь имеются некоторые ограничения.

Если за именем переменной следуют знак равенства и констан-

та, то эта константа служит в качестве инициализатора, как,

например, в

 

CHAR BACKSLASH = '\\';

INT I = 0;

FLOAT EPS = 1.0E-5;

Если рассматриваемая переменная является внешней или

статической, то инициализация проводится только один раз,

согласно концепции до начала выполнения программы. Инициали-

зируемым явно автоматическим переменным начальные значения

присваиваются при каждом обращении к функции, в которой они

описаны. Автоматические переменные, не инициализируемые яв-

но, имеют неопределенные значения, (т.е. мусор). Внешние и

статические переменные по умолчанию инициализируются нулем,

но, тем не менее, их явная инициализация является признаком

хорошего стиля.

Мы продолжим обсуждение вопросов инициализации, когда

будем описывать новые типы данных.

2.5. Арифметические операции.

 

Бинарными арифметическими операциями являются +, -, *, /

и операция деления по модулю %. Имеется унарная операция -,

но не существует унарной операции +.

·      
44 -

При делении целых дробная часть отбрасывается. Выражение

X % Y

дает остаток от деления X на Y и, следовательно, равно нулю,

когда х делится на Y точно. Например, год является високос-

ным, если он делится на 4, но не делится на 100, исключая

то, что делящиеся на 400 годы тоже являются високосными. По-

этому

 

IF(YEAR % 4 == 0 && YEAR % 100 != 0 \!\! YEAR % 400 == 0)

год високосный

ELSE

год невисокосный

 

Операцию % нельзя использовать с типами FLOAT или

DOUBLE.

Операции + и - имеют одинаковое старшинство, которое

младше одинакового уровня старшинства операций *, / и %, ко-

торые в свою очередь младше унарного минуса. Арифметические

операции группируются слева направо. (Сведения о старшинстве

и ассоциативности всех операций собраны в таблице в конце

этой главы). Порядок выполнения ассоциативных и коммутатив-

ных операций типа + и - не фиксируется; компилятор может пе-

регруппировывать даже заключенные в круглые скобки выраже-

ния, связанные такими операциями. таким образом, а+(B+C) мо-

жет быть вычислено как (A+B)+C. Это редко приводит к како-

му-либо расхождению, но если необходимо обеспечить строго

определенный порядок, то нужно использовать явные промежу-

точные переменные.

Действия, предпринимаемые при переполнении и антипере-

полнении (т.е. При получении слишком маленького по абсолют-

ной величине числа), зависят от используемой машины.

2.6. Операции отношения и логические операции

 

Операциями отношения являются

=> > =< <

 

все они имеют одинаковое старшинство. Непосредственно за ни-

ми по уровню старшинства следуют операции равенства и нера-

венства:

 

== !=

 

которые тоже имеют одинаковое старшинство. операции отноше-

ния младше арифметических операций, так что выражения типа

I<LIM-1 понимаются как I<(LIM-1), как и предполагается.

Логические связки && и \!\! более интересны. Выражения,

связанные операциями && и \!\!, вычисляются слева направо,

причем их рассмотрение прекращается сразу же как только ста-

новится ясно, будет ли результат истиной или ложью. учет

этих свойств очень существенен для написания правильно рабо-

тающих программ. Рассмотрим, например, оператор цикла в счи-

тывающей строку функции GETLINE, которую мы написали в главе

1.


·     45 -

FOR(I=0;I<LIM-1 && (C=GETCHAR()) != '\N' && C != EOF; ++I)

S[I]=C;

Ясно, что перед считыванием нового символа необходимо

проверить, имеется ли еще место в массиве S, так что условие

I<LIM-1 должно проверяться первым. И если это условие не вы-

полняется, мы не должны считывать следующий символ.

Так же неудачным было бы сравнение 'C' с EOF до обраще-

ния к функции GETCHAR : прежде чем проверять символ, его

нужно считать.

Старшинство операции && выше, чем у \!\!, и обе они

младше операций отношения и равенства. Поэтому такие выраже-

ния, как

 

I<LIM-1 && (C = GETCHAR()) != '\N' && C != EOF

не нуждаются в дополнительных круглых скобках. Но так как

операция != старше операции присваивания, то для достижения

правильного результата в выражении

 

(C = GETCHAR()) != '\N'

кобки необходимы.

Унарная операция отрицания ! Преобразует ненулевой или

истинный операнд в 0, а нулевой или ложный операнд в 1.

Обычное использование операции ! Заключается в записи

 

IF( ! INWORD )

Вместо

IF( INWORD == 0 )

Tрудно сказать, какая форма лучше. Конструкции типа ! INWORD

Читаются довольно удобно (“если не в слове”). Но в более

сложных случаях они могут оказаться трудными для понимания.

Упражнение 2-1.

Напишите оператор цикла, эквивалентный приведенному выше

оператору FOR, не используя операции &&.


Информация о работе «Язык С»
Раздел: Информатика, программирование
Количество знаков с пробелами: 439386
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
48443
0
0

... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...

Скачать
43709
0
0

... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...

Скачать
39778
0
1

... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...

Скачать
64931
0
0

... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...

0 комментариев


Наверх