Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_Kara-Ushanova.doc
Скачиваний:
12
Добавлен:
22.02.2015
Размер:
326.14 Кб
Скачать

17.Основы программирования на с

  1. Структура программы

  2. Типы данных

  3. Ввод / вывод

  4. Различные операции, вычисления

  5. Операторы

  6. Работа с подпрограммами

Стpуктуpа пpогpаммы на языке Си Программа, написанная на языке Си, состоит из отдельных модулей, которые называются функциями. Любая функция не зависит от других функций. Если написана программа некоторой функции, она может быть помещена в библиотеку, и ею смогут пользоваться другие программисты.

Ниже приведен пример функции, выполняющей сложение двух чисел (смысл составления такой программы сомнителен, но она показывает принципы оформления функций). float sum (a, b) /* Заголовок функции */ float a,b; /* Описание аргументов */

float x; /* Описание локальной переменной */

x = a + b; /* Оператор выполнения действия */return x; /* Возвpат вычисленного значения в вызывающую пpогpамму */ Как видно из примера, функция состоит из заголовка функции, описания аргументов и локальных переменных(действующих только в пределах данной функции ) и операторов, выполняющих заданные для функции действия. Кроме того, две фигурные скобки указывают на начало и конец собственно программы функции. Заголовок обеспечивает "связь" функции с остальными функциями. Именно через список аргументов функция получает конкретные значения для переменных, с которыми будут выполняться вычисления внутри нее. Вычисленное значение может быть возвращено через имя функции (в данном примере эту операцию выполняет оператор return x ), но возможно возвращение вычисленных значений и через список аргументов. Этот случай будет рассмотрен в дальнейшем.Заголовок состоит из описания типа числа, возвращаемого функцией (в данном случае float), имени функции (sum) и заключенного в круглые скобки списка аргументов (в данном случае a и b).

В языке Си любая переменная должна быть описана, т.е. должно быть явно указано, к какому типу объектов программы относится данное имя (число, строка, массив и т.д). При оформлении функций тип аргументов описывается перед открывающей фигурной скобкой, после которой записываются операторы функции. Но способов описания аргументов существует два. В приведенном выше примере используется так называемый "классический" способ описания. Второй способ описания, который считается современным, для данного примера будет иметь вид: float sum (float a, float b)

float x; x = a + b; return x; При втором способе описания тип переменных указывается вместе с именем. Это позволяет сразу видеть тип объекта и имя переменной, к которому этот тип относится. Кpоме того пpи такой фоp- ме описания функции тpанслятоp пpовеpяет соответствие типов данных в соответствующих паpах паpаметpов, что обеспечивает обнаружение достаточно трудно уловимых ошибок несовпадения типа данных при вызове функции.Из примера также видно, что все операторы заканчиваются точкой с запятой (;). Но после заголовка функции точки с запятой нет. Именно по этому признаку транслятор языка Си определяет, что это заголовок функции, а не оператор вызова функции.С правой стороны показаны комментарии. Комментарий начинается с косой черты, за которой следует звездочка. Его конец отмечается этими же символами, размещенными в обратном порядке (*/). Комментарии могут размещаться в любом месте программы, в том числе и внутри операторов, например:

x /* это сложение */ = a + b;Но комментарий может размещаться на нескольких строках. Для этого символы начала комментария (/*) записывают перед его началом, а символы, закрывающие комментарий, в требуемом месте. Любой текст, размещенный между символами начала и конца комментария, никоим образом не влияет на выполнение программы. Этим можно пользоваться, когда необходимо на время отладки исключить из текста программы какие-нибудь операторы или их части. В любой законченной программе должна быть одна и только одна главная функция, с которой начинается выполнение программы. Эта функция имеет постоянное имя main.Она, как и любая другая функция, начинается с заголовка и заканчивается закрывающей фигурной скобкой. Функция main и другие функции в одной программе могут записываться в любом порядке друг за другом, но ни одна из них не может быть записана внутри другой, т.е. заголовок любой функции должен следовать после самой последней закрывающей фигурной скобки предыдущей функции. Вызывать на выполнение функции можно в любом порядке с использованием вложенных вызовов при любой глубине вложения, например: x = log(sqrt(sin(3.14/8)));В этом примере используются стандартные функции для вычисления соответственно натурального логарифма, корня квадратного и синуса (угол для вычисления синуса с помощью этой функции должен задаваться в радианах). Как бы пpогpамма не была проста, для ее выполнения всегда требуется осуществление опеpаций, которые являются стандартными, например выделение памяти для хранения данных, преобразование данных из одной формы представления в другую и т.д. Такие действия выполняются с помощью функций, которые хранятся в библиотеках, подсоединяемых к программе пользователя.Препроцессор - это программа предварительной обработки текста непосредственно перед трансляцией. Команды препроцессора называются директивами. Директивы препроцессора содержат символ диез # в начале строки. Препроцессор используется в основном для подключения h-файлов. В Си также очень часто используется директива #define для задания символических имен констант.

БИЛЕТ 18.

Алфавит языкаАлфавитом языка называется совокупность символов, используемых в языке.В алфавит языка Си входят: прописные и строчные буквы латинского алфавита (A,B,C,...,Z,a,b,c,...,z) цифры (0,1,2,3,4,5,6,7,8,9) специальные знаки " ' {} [] () | + - * / % \ ; . , : ? < > _ ! & # ~ ^ - неизображаемые символы ("обобщенные пробельные символы"), такие как пробел, табуляция, переход на новую строку.В комментариях, строках и символьных константах могут использоваться и другие литеры, например русские буквы.

Комментарий формируется как последовательность символов, начинающаяся парой символов /* и завершенная парой символов */. Например:

/* Это комментарий */

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

/* text1 /* text2 */ text3 */ считается ошибочной.

2.1. Ключевые слова

Следующие идентификаторы зарезервированы для использо-

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

иным образом:

int extern else

char register for

float typedef do

double static while

struct goto switch

union return case

long sizeof default

short break entry

unsigned continue

auto if

Ключевое слово entry в настоящее время не используется

каким-либо компилятором; оно зарезервировано для использова-

ния в будущем. В некоторых реализациях резервируются также

слова fortran и asm.

2.2. Константы

Имеется несколько видов констант, которые перечислены

ниже.

2.2.1. Целые константы

Целая константа, состоящая из последовательности цифр,

считается восьмеричной, если она начинается с 0 (цифра

нуль), и десятичной в противном случае. Цифры 8 и 9 имеют

восьмеричные значения 10 и 11 соответственно. Последова-

тельность цифр, которой предшествуют символы 0х (нуль, х-

маленькое) или 0х (нуль X-большое), рассматривается как

шестнадцатиричное целое. Шестнадцатиричные цифры включают

буквы от a (маленькое) или A (большое) до f (маленькое) или

F (большое) со значениями от 10 до 15. Десятичная константа,

величина которой превышает наибольшее машинное целое со зна-

ком, считается длинной; восьмеричная или шестнадцатиричная

константа, которая превышает наибольшее машинное целое без

знака, также считается длинной.

2.2.2. Длинные (long) константы

Десятичная, восьмеричная или шестнадцатиричная конс-

танта, за которой непосредственно следует l (эль-маленькое)

или L (эль-большое), является длинной константой. На некото-

рых машинах целые и длинные значения могут рассматриваться

как идентичные.

2.2.3. Символьные константы

Символьная константа - это символ, заключенный в оди-

ночные кавычки, как, например, 'х'. Значением символьной

константы является численное значение этого символа в машин-

ном представлении набора символов.

Некоторые неграфические символы, одиночная кавычка ' и

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

лами в соответствии со следующей таблицей условных последо-

вательностей:

Название Код Обозначение

новая строка 012 \n

горизонтальная табуляция 011 \т

символ возврата на одну 010 \в

позицию

возврат каретки 015 \r

переход на новую страницу 014 \f

обратная косая черта 0133 \\

одиночная кавычка 047 \'

произвольный символ 0ddd \ddd

Условная последовательность \ddd состоит из обратной

косой черты, за которой следуют 1, 2 или 3 восьмеричных

цифры, которые рассматриваются как задающие значение желае-

мого символа. Специальным случаем этой конструкции является

последовательность \0 (за нулем не следует цифра), которая

определяет нулевой символ. Если следующий за обратной косой

чертой символ не совпадает с одним из указанных, то обратная

косая черта игнорируется.

2.2.4. Вещественные константы

Вещественная константа состоит из целой части, десятич-

ной точки, дробной части, буквы e (маленькая) или E (боль-

шая) и целой экспоненты с необязательным знаком. Как целая,

так и дробная часть являются последовательностью цифр. Либо

целая, либо дробная часть (но не обе) может отсутствовать;

либо десятичная точка, либо e и экспонента (но не то и дру-

гое одновременно) может отсутствовать. Вещественные конс-

танты в большинстве реализаций считаются константами двойной

точности.

2.3. Строки

Строка - это последовательность символов, заключенная в

двойные кавычки, как, например, "...". Строка имеет тип мас-

сив символов и класс памяти static (см. ниже). Строка иници-

ализирована указанными в ней символами. Все строки, даже

идентично записанные, считаются различными. Компилятор

помещает в конец каждой строки нулевой байт \0, с тем чтобы

просматривающая строку программа могла определить ее конец.

Перед стоящим внутри строки символом двойной кавычки " дол-

жен быть поставлен символ обратной косой черты \; кроме

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

ности, что и в символьных константах. Обратная косая черта

\, за которой непосредственно следует символ новой строки,

игнорируется.

Имеются макропроцессорные средства, позволяющие объеди-

нять совпадающие строки при трансляции с целью экономии

памяти (см. команду xstr).

БИЛЕТ 19

6. ОПЕРАТОРЫ За исключением особо оговариваемых случаев, операторы выполняются последовательно.6.1. Операторное выражение большинство операторов являются операторными выражениями, которые имеют форму выражение;

Обычно операторные выражения являются присваиваниями или обращениями к функциям.6.2. Составной оператор (или блок) С тем, чтобы допустить возможность использования нескольких операторов там, где ожидается присутствие только одного, предусматривается составной оператор (который также называют "блоком"):

составной оператор: {список_описаний список_операторов} список_описаний:

описание описание список_описаний список_операторов: оператор оператор список_операторовЕсли какой-либо идентификатор из списка_описаний был описан ранее, то во время выполнения блока внешнее описание подавляется и снова вступает в силу после выхода из блока. Любая инициализация автоматических и регистровых переменных проводится при каждом входе в блок через его начало. В компиляторе ОС ДЕМОС разрешается (но это плохая практика) передавать управление внутрь блока; в таком случае эти инициализации не выполняются. Инициализации статических переменных проводятся только один раз, когда начинается выполнение программы. Находящиеся внутри блока внешние описания не резервируют памяти, так что их инициализация не разрешается.6.3. Условные операторы Имеются две формы условных операторов: if (выражение) оператор if (выражение) оператор else оператор

В обоих случаях вычисляется выражение и, если оно отлично от нуля, то выполняется первый подоператор. Во втором случае, если выражение равно нулю, выполняется второй подоператор. Как обычно, двусмысленность else разрешается связыванием else с последним встречающимся if, у которого нет else.6.4. Оператор while

Оператор while имеет форму while (выражение) операторПодоператор выполняется повторно до тех пор, пока значение выражения остается отличным от нуля. Проверка производится перед каждым выполнением оператора.6.5. Оператор do Оператор do имеет форму do оператор while (выражение)Оператор выполняется повторно до тех пор, пока значение выражения не станет равным нулю. Проверка производится после каждого выполнения оператора.6.6. Оператор for Оператор for имеет форму

(выражение1;выражение2;выражение3)операторОператор for эквивалентен следующему:

выражение1; while (выражение2) {оператор выражение3;}Таким образом, первое выражение определяет инициализацию цикла; второе специфицирует проверку, выполняемую перед каждой итерацией, так что выход из цикла происходит тогда, когда значение выражения становится нулем; третье выражение часто задаетприращение параметра, который вычисляется после каждой итерации. Любое выражение или все они могут быть опущены. Если отсутствует второе выражение, то предложение с while считается эквивалентным while(1); другие отсутствующие выраженияпросто опускаются из приведенного выше расширения.6.7. Оператор switch Оператор switch (переключатель), вызывает передачу управления к одному из нескольких операторов, в зависимости от значения выражения. Оператор имеет форму switch (выражение) операторВ выражении проводятся обычные арифметические преобразования, результат должен иметь тип int. Оператор обычно является составным. Любой оператор внутри этого оператора можетбыть помечен одним или более вариантным префиксом case, имеющим форму: case константное выражение: Где константное выражение должно иметь тип int. Никакие две вариантные константы в одном и том же переключателе не могут иметь одинаковое значение. Точное определение константного выражения приводится ниже. Кроме того, может присутствовать один операторный префикс вида

default: При выполнении оператора switch вычисляется входящее в него выражение и сравнивается с каждой вариантной константой. Если одна из вариантных констант оказывается равнойзначению этого выражения, то управление передается оператору, который следует за совпадающим вариантным префиксом. Если ни одна из вариантных констант не совпадает со значением выражения и если при этом присутствует префикс default, то управление передается оператору, помеченному этим префиксом. Если ни один из вариантов не подходит и префикс default отсутствует, то ни один из операторов в переключателе не выполняется. Сами по себе префиксы case и default не изменяют выполнения программы, программа выполняется последовательно, пока не встретится явная передача управления. Для выхода из переключателя имеется оператор break (п.0.8).Обычно оператор, который входит в переключатель, является составным. Описания могут появляться в начале этого оператора, но инициализации автоматических и регистровых переменных будут неэффективными.

6.8. Оператор break вызывает завершение выполнения наименьшего охватывающего этот оператор оператора while, do, for или switch; управление передается оператору, следующему за завершенным оператором.6.9. Оператор continue

приводит к передаче управления на продолжающую цикл часть наименьшего охватывающего этот оператор оператора while, do или for; то есть на конец цикла. Более точно, в каждом из операторов

while(...) { | do { | for(...) {

... | ... | ...

contin: ; | contin: ; | contin: ;

} | } while(...); | }

оператор continue эквивалентен оператору goto contin. (За contin: следует пустой оператор; см. п. 0.13.).

6.10. Оператор возврата

Возвращение из функции в вызывающую программу осуществляется с помощью оператора return, который имеет одну из следующих форм

return;

return выражение;

В первом случае возвращаемое значение неопределено. Во втором случае в вызывающую функцию возвращается значение выражения. Если требуется, выражение преобразуется к типу функции, в которой оно появляется, как в случае присваивания. Попадание на конец функции эквивалентно возврату без возвращаемого значения. Возвращать можно значение арифметического типа, а также

структуру (но не массив).

6.11. Оператор goto

Управление можно передавать безусловно с помощью оператора goto идентификатор1

Идентификатор должен быть меткой (п. 0.12), локализованной в данной функции.

6.12. Помеченный оператор

Перед любым оператором может стоять метка, имеющая вид: идентификатор:

Метки используются только для указания места, куда передается управление оператором goto. Областью действия метки является данная функция, за исключением тех подблоков, в

которых тот же идентификатор описан снова.

6.13. Пустой оператор

Пустой оператор имеет форму:

;

Пустой оператор оказывается полезным, так как он позволяет поставить метку перед закрывающей скобкой } составного оператора или указать пустое тело в операторах цикла, таких как while.

Поток данных (англ. stream) в программировании — абстракция, используемая для чтения или записи файлов, сокетов и т. п. в единой манере.

Потоки являются удобным унифицированным программным интерфейсом для чтения или записи файлов (в том числе специальных и, в частности, связанных с устройствами), сокетов и передачи данных между процессами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]