Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
Приложение. КРАТКОЕ ВВЕДЕНИЕ В ЯЗЫК СИЭто приложение нельзя рассматривать как полное описание языка Си. Оно предназначено для читателей, уже знакомых с каким-либо другим современным языком программирования, но нуждающихся в кратком обзоре элементов языка Си, применяемых в данной книге. Читателям, которые собираются активно работать с языком Си, автор настоятельно рекомендует обратиться к специальному учебнику, например: Керниган Б., Ритчи Д. Язык программирования Си (Пер. с англ. — М.: финансы и статистика, 1985). А.1. ОСНОВНЫЕ ТИПЫ ДАННЫХПеред использованием любых переменных сначала необходимо определить их типы, или, говоря профессиональным языком, объявить их
При объявлении переменных им можно присвоить начальные значения, как сделано в этом примере для переменных ожидаемого. Типы “Boolean” (“Булевский”) и “logical” (“логический”) в языке Си отсутствуют. Целочисленное значение 0 воспринимается как false (“ложь”), а значение 1 (или любое другое ненулевое значение) — как true (“истина”). А.2. НЕКОТОРЫЕ ОПЕРАТОРЫРассмотрим фрагмент программы
Смысл этих трех условных операторов интуитивно ясен. Заметим, что после ключевого слова Операторы присваивания, например
(а также любые другие операторы), могут группироваться вместе в один составной оператор с помощью фигурных скобок. Так, строка
является составным оператором. Фигурные скобки обязательно применяются в условном операторе
то оператор
выполнялся бы всегда, поскольку этот оператор не имеет никакой связи с условием
присваивает значение 10 обеим переменным тип. Примитивный цикл можно образовать с помощью условного оператора
Здесь Первая из них — оператор цикла while:
Этот цикл дает тот же результат, что и предыдущий пример, — после приращения переменной Другой важной конструкцией является оператор цикла
Эта часть программы дает такой же результат, как и оба предыдущих примера, так как в каждом из них вычисляется значение суммы
Если
Здесь проверка на завершение цикла выполняется в конце, как и предполагает запись. Поэтому значение Оператор завершения
применяется при необходимости безусловного завершения выполнения ближайшего вложенного оператора
тот же эффект может быть получен без применения оператора безусловного перехода
или
Для немедленного перехода на проверку условия завершения цикла можно использовать оператор продолжения
Например, оператор
можно заменить на
А.3. ОПЕРАТОРЫ И ВЫРАЖЕНИЯСимволы
Запись
означает, что результат умножения у z должен быть прибавлен к значению переменной х. Конечно, операция умножения имеет более высокий приоритет, чем операция сложения
эквивалентно
Однако есть операции, которые выполняются в порядке справа налево. Примером может служить операция присваивания
даст такой же эффект, как
Заметим, что символ Перечислим теперь все операции языка (см. скан) (см. скан) Выражение может не только изменять значения, но и выполнять действия, которые изменяют состояние. Следующая строка, например, является выражением
Это выражение с присваиванием, которое увеличивает значение переменной
которая, в частности, может быть заменена на
Оба выражения
будем иметь Выражение присваивания и знак точки с запятой
обозначает не выражение, а оператор (аналогичный смысл приобретает запись
Он работает аналогично строке
(запись Пара символов
вычисляется первое выражение
можно записать
Очень важно различать логические и побитовые операции. Логические операции применяются очень часто, например в таком выражении
которое следует читать как
Для логических операций
может произойти деление на нуль. Результатом вычисления логических выражений всегда будет О или 1. Но в побитовых операциях всегда имеется в виду вся последовательность битов операндов, даже если указываются целочисленные переменные, как, например
Здесь использованы операции “сдвиг влево”
Операция преобразования типа может применяться для принудительного преобразования типа переменной. Так, значение выражения
будет равно 3 типа integer (“целый”). Если обе переменные Константы с плавающей точкой содержат десятичную точку или букву
Операция деления по модулю
В последнем примере оператор преобразования типа Если значение с плавающей точкой присваивается целочисленной переменной, то будет иметь место усечение. Оператор
присваивает значение 3 переменной и Если переменная х имеет тип
А.4. ЛЕКСИЧЕСКИЕ ВОПРОСЫ И СТРУКТУРА ПРОГРАММЫВ большинстве случаев пробелы и переход на новые строки не оказывают никакого влияния на смысл программы. Последовательность символов вида
компилятором игнорируется. Так обозначаются комментарии, предназначенные для человека. Идентификаторы, например, имена переменных, состоят из букв латинского алфавита и цифр, но первым символом должна быть буква. В языке Си символ подчеркивания Идентификаторы могут также применяться для обозначения констант, например
После такой “препроцессорной управляющей строки” можно будет использовать идентификатор
которая означает, что в любом месте программы любая встречающаяся строка вида
автоматически заменяется на строку
Во избежание недоразумений в более сложных случаях рекомендуется применять скобки, что для данной макрокоманды могло бы выглядеть как
Существуют управляющие строки для включения файлов. Часто применяется строка
Результат ее действия заключается в замене этой строки содержимым файла с именем
Программа обычно содержит одну или несколько функций. В языке Си нет подпрограмм или процедур, а только функции. Даже основная программа является функцией, имеющей имя
Стандартные функции А.5. МАССИВЫ И УКАЗАТЕЛИПосле объявления массива
доступны следующие пять переменных типа
Можно также записать
Если
Это не совсем практичная программа, но она показывает, как можно получить доступ к переменной, не используя ее имени. Здесь Имя массива может быть использовано в качестве указателя на его первый элемент. Так, вместо При объявлении массивы можно инициализировать, если для них отводится постоянное место в памяти, то есть когда массивы внешние или статические. Внешние переменные объявляются на самом внешнем уровне, вне функций. В следующем примере программы инициализируются внешние массивы
Статическим переменным при объявлении должно предшествовать ключевое слово
А.6. ФУНКЦИИВ языке Си функции иногда могут иметь значение. Если функция должна иметь возвращаемое значение, то оно присваивается ей с помощью оператора возврата
Для выполнения этого же действия можно написать и более короткий вариант с применением условного выражения
Обратите внимание на обозначение того, что функция имеет целое значение функции и аргумент с плавающей точкой. Определенная так функция может быть вызвана обычным образом, как в примере
где Если функция не предназначена для возвращения значения, то нет необходимости включать в нее оператор В большинстве случаев нужна только передача числовых значений аргументов в функцию. Но иногда требуется так организовать работу функции, чтобы она присваивала значения переменным, которые доступны ей только через аргументы. Это можно реализовать, допуская, что аргументами будут указатели на переменные. В следующей функции выполняется взаимный обмен значениями между двумя целочисленными переменными
После выполнения строки программы
значениями переменных
Напомним, что Говорят, что переменная А.7. СТРУКТУРЫНесколько переменных можно сгруппировать вместе в так называемую структуру. Предположим, что нужно записать в память некоторую информацию о точках в двухмерном пространстве. Для каждой точки эта информация состоит из ортогональных координат хиуи кода, показывающего, лежит ли точка внутри определенного треугольника. Предположим, что имеем две точки
Теперь можно использовать компоненты структуры
Вместо такого объявления можно записать либо
либо
Две последние версии имеют то преимущество, что тот же самый тип структуры впоследствии можно использовать в простой записи Заметим, что при таком объявлении нужно обязательно использовать ключевое слово Но можно использовать и другое средство, которое в общем случае позволяет задать тип для нового имени. Здесь можно записать
Теперь
Массив
или, если выше было объявлено имя
или, если применен оператор
Теперь каждый элемент массива Структуры особенно полезны совместно с динамическим распределением памяти, поскольку они могут содержать указатели на другие структуры. Таким образом можно строить списки, деревья и так далее. Если
где два символа - А.8. ДИНАМИЧЕСКОЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИПредположим, что было объявлено
Тогда
где памяти недоступен, то переменной
Недостаточно памяти Пусть теперь необходимо поместить букву
Отведенную оператором malloc память можно освободить оператором
Предположим, что блок из
Теперь, если указатель Память может отводиться и для других типов данных. Предположим, что нам нужна последовательность из к целых чисел. Поскольку стандартная функция malloc должна обязательно знать, сколько необходимо байтов, то нам интересно узнать, сколько байтов отводится для целого числа. Это число определяется машинно-независимым способом операцией
Другая сложность связана с типом указателей, которые необходимы. Нам нужен указатель на целое вместо указателя на символ. Однако функция malloc связана с указателем на символ. Преобразование типа может быть осуществлено с помощью оператора преобразования типа. Следовательно, запишем
Здесь оператор преобразования типа А.9. ВВОД/ВЫВОДВ языке Си нет специальных конструкций для ввода и вывода. Вместо этого применяется ряд стандартных функций вместе с предопределенным типом структуры, имеющей имя
Файл заголовков
таким образом, если напишем
то переменная
в котором аргументы имеют следующий смысл:
Симметричной для функции
После выполнения этой программы будет создан файл
Вместо функции
Фактически запись
если данные находятся в файле на диске, или
если данные должны быть введены с клавиатуры пользователя. Однако остальные аргументы теперь должны быть указателями, поскольку функции fscanf и
(отсутствие символа
В обозначении формата Значение функции, возвращаемое функцией Аналогично указателю Одиночный символ может быть прочитан и записан более примитивным образом:
Здесь запись Если мы проверим последний прочитанный символ и решим, что он должен быть использован еще раз, то его можно вернуть обратно во входной поток, записав
Функции структуру и числа в них представляются в виде последовательности символов. Для файлов на диске, которые должны читаться и записываться только нашими собственными программами, будет более эффективно использовать бесформатный ввод/вывод. Это означает, что внутреннее и внешнее представление данных идентично, поэтому числа вернее всего будут записываться в виде двоичных слов фиксированной длины. Для бесформатного ввода/вывода применяются функции
Аргументы имеют следующие типы и смысл:
Эти две функции выдают в качестве значения функции целое число, равное числу элементов данных, которые были прочитаны или записаны. Как и в случае с функцией А.10. СТАНДАРТНЫЕ МАТЕМАТИЧЕСКИЕ ФУНКЦИИСтрого говоря, доступный набор предопределенных функций не является частью языка. Однако на практике удобно иметь на руках список таких функций. Мы часто используем математические функции, включенные в следующий список, в котором перечислены имена функций и типы аргументов вместе с кратким пояснением, что данная функция вычисляет:
(см. скан)
|
1 |
Оглавление
|