1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while



страница1/3
Дата26.07.2014
Размер0.59 Mb.
ТипДокументы
  1   2   3
1. Язык Си. Операторы IF – ELSE и ELSE – IF. Переключатель. Операторы BREAK и CONTINUE. Циклы WHILE, FOR, DO-WHILE

Условный оператор if в языке С записывается в виде:

if (логическое выражение ) оператор/блок [ else оператор/блок ]

Логическое выражение (обязательно заключенное в круглые скобки) -это любое выражение, считающееся истинным, если оно не равно нулю. Условный оператор в свою очередь может включать условный оператор, таким образом допустимы вложенные условные операторы. Синтаксис языка предполагает, что при вложениях условных операторов каждое else соответствует ближайшему к нему предшествующему if.

Break - передает управление на конец текущего цикла

Continue – передает управление на начало цикла, не выполняя последующие операторы.

Условный оператор switch имеет вид : switch ( выражение ) {

case кв 1 : [ операторы 1 )

case кв2 : [ операторы 2 ]

default : [ операторы ]



выражение должно иметь целый тип : кв1 . кв2 и т.д. - константные выражения целого типа. Порядок выполнения оператора switch следующий: вычисляется выражение в скобках, если его значение равно значению какого либо из константных выражений- происходит переход к первому из операторов, стоящих после этого константного выражения, в противном случае - к оператору, стоящему после метки default, затем операторы выполняются последовательно. Метку default не обязательно включать в оператор. Выхода из оператора switch при достижении следующего case или метки default не происходит - в отличие от аналогичного оператора CASE языка PASCAL. Однако эти действия можно задать явно, используя специальный оператор выхода break, который можно включить в последовательности выполняемых операторов. Оператор break аналогичен по своему действию процедуре Break в языке PASCAL, он вызывает немедленное завершение выполнения условной или циклической конструкции, в частности, оператора switch.

Оператор цикла while записывается в виде:

while (логическое выражение ) оператор/блок

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

Оператор цикла do while записывается в виде:

do оператор/блок while (логическое выражение );

- и выполняется, пока истинно логическое выражение в скобках, но в отличие от цикла while логическое выражение вычисляется после выполнения тела цикла.

Цикл for является наиболее сложным из трех видов циклических операторов языка С :

for( [ инициализирующее выражение ] ; [ логическое выражение ] ; [ корректирующее выражение ] ) [ оператор/блок ]

Цикл for выполняется следующим образом: перед началом цикла (только один раз) вычисляется инициализирующее выражение, затем вычисляется логическое выражение и.

если оно истинно, выполняется тело цикла, и после каждого шага цикла вычисляется корректирующее выражение. В цикле for все три выражения могут отсутствовать, но два символа " ; " должны быть записаны в скобках. При отсутствии логического выражения предполагается, что его значение всегда истинно. Никаких специальных требований к выражениям, используемым в цикле for. не предъявляется, это совершенно произвольные выражения, а их названия лишь обозначают порядок записи этих выражений в скобках.

Для немедленного выхода из цикла любого типа можно использовать оператор break. Для пропуска части операторов тела цикла используется оператор continue.
2. Язык Си. Побитовые логические операции и операции сдвигов. Условное выражение. Старшинство и порядок вычисления операций

Побитовое отрицание ~ ; побитовое "и" & ; побитовое исключающее "или" ^ ; побитовое "или" | ; сдвиг битов влево << , сдвиг битов вправо >>.



операции присваивания: в отличие от языка PASCAL в языке С конструкция, состоящая из двух операндов и операции присваивания, является выражением, его значение равно значению, полученному переменной в левой части выражения. Кроме обычной операции присваивания = существует еще 10 операций: += , -=э *=, /=, %=, <<=, >>= , &= , ^= , |= . смысл которых очевиден из простейшего примера : х+=а означает х=х+а .

Приоритеты операций определены следующим образом: унарные операции > {*, /. %} > {+, -} > {«,»} > {>, >=, <, <=}> {==. !=}>&>^> | > && > | > операции присваивания > операция "запятая".


3. Локальные и глобальные переменные Си. Статические и регистровые переменные. Инициализация переменных

Кроме своего типа каждая переменная в языке С характеризуется также классом памяти. Существует четыре класса памяти :

auto- автоматические переменные;

extern - внешние переменные;

static - статические переменные;

register - регистровые переменные.

Описатель класса памяти может указываться в описаниях переменных слева от типа:

класс памяти тип имя = { список значений } ; Автоматические переменные определены в той функции или блоке, где они описаны и инициализируются при каждом выполнении функции (блока). Такие объекты "живут" лишь во время работы блока (функции).

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

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

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

По умолчанию переменные, описанные в функциях, имеют класс памяти auto, описанные вне функций - extern. Внутри функции в случае совпадения имен глобальной и локальной переменных действовать будет только локальная переменная.

В C++ предусмотрен доступ к глобальным переменным, скрытым локальными переменными с тем же именем. Операция разрешения области видимости :: позволяет в таких ситуациях воспользоваться глобальной переменной. Например:

int x=5;

void x_in () {int x=3; printf(" Локальная х= %d\n",x); ргintf("Глобальная х= %d\n",::х);}


4. Препроцессор языка Си. Включение файлов. Макроподстановка. Условная компиляция

Компилятор языка Си содержит препроцессор, который позволяет осуществлять макроподстановки, условную компиляцию и включение именованных файлов. Строки, начинающиеся с #, являются командами этого препроцессорa. Синтаксис этих строк не связан с остальным языком; они могут появляться в любом месте и их влияние распространяется до конца исходного программного файла.



Замена лексем

Команда #define идентификатор строка_лексем приводит к тому, что препроцессор заменяет последующие вхождения этого идентификатора на указанную строку лексем. Строка вида #define идентификатор(идентификатор,...,идентификатор) строка_лексем, где между первым идентификатором и открывающейся скобкой "(" нет пробела, представляет собой макроопределение с аргументами. В дальнейшем, первый идентификатор, за которым следует открывающая скобка "(", последовательность разделенных запятыми лексем и закрывающая скобка ")", заменяются строкой лексем из определения. Каждое вхождение идентификатора, упомянутого в списке формальных параметров в определении, заменяется соответствующей строкой лексем из обращения. Фактическими аргументами в обращении являются строки лексем, разделенные запятыми; однако запятые, входящие в закавыченные строки или заключенные в круглые скобки, не разделяют аргументов. Количество формальных и фактических параметров должно совпадать. Текст внутри строки или символьной константы не подлежит замене. В обоих случаях замененная строка просматривается снова с целью обнаружения других идентификаторов, известных препроцессору. В обоих случаях слишком длинная строка определения может быть продолжена на другой строке, если поместить в конце продолжаемой строки обратную косую черту "\". Описываемая возможность особенно полезна для определения "объявляемых констант", как, например:

#define TABSIZE 100 , затем объявление int table[TABSIZE];

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

#define max(a,b) ((a)>(b)?(a):(b)), а затем вызов x = max(y,20) (в последнем определении a и b взяты в скобки, для того, чтобы фактическими параметрами макро могли бы быть произвольные выражения.

Команда #undef идентификатор приводит к отмене препроцессорного определения данного идентификатора.

Определить идентификатор можно не только с помощью команды #define, но также и при вызове компилятора, с помощью параметров команды cc.

Включение файлов

Команда #include "filename" приводит к замене этой строки на все содержимое файла с именем filename. Файл с этим именем сначала ищется в текущем справочнике, а затем в других "стандартных" местах, определяемых пользователем при вызове компилятора. В отличие от этого команда #include <filename> ищет файл только в стандартном справочнике системы. Команды #include могут быть вложенными.



Условная компиляция

Команда препроцессора #if константное_выражение проверяет, отлично ли от нуля значение константного выражения. Команда #ifdef идентификатор проверяет, определен ли этот идентификатор в препроцессоре. Команда #ifndef идентификатор проверяет, является ли этот идентификатор в данный момент не определенным для препроцессора. За каждым из трех перечисленных видов строк может следовать произвольное число строк, возможно содержащих команду препроцессора #else, а затем должна следовать команда #endif. Если проверяемое условие истинно, то любые строки между #else и #endif игнорируются. Если проверяемое условие ложно, то любые строки между проверяемой строкой и #else или, при отсутствии #else, #endif игнорируются. Эти конструкции могут быть вложенными. Например:

#ifdef DEBUG

fprintf(stderr,"i=%o j=%d\n",i,j);

#endif

Переменная препроцессора может быть определена не только в самой программе, но и при вызове транслятора.



Команда #line. Для других препроцессоров, генерирующих Си-программы, полезна следующая команда #line константа "имя_файла", которая сообщает компилятору (для диагностических сообщений), что следующая строка исходного файла имеет номер, задаваемый константой, и что текущий входной файл именуется именем_файла. Если имя_файла отсутствует, то запоминаемое имя файла не изменяется. Пример #line 250 "gram.y"

5. Язык Си. Указатели и адресная арифметика. Указатели символов и многомерные массивы. Указатели на функции

Указателями называются переменные и константы, значениями которых являются адреса участков памяти, выделенных для объектов конкретных типов. В языке С так же. как в языке PASCAL, существуют типизированные и обобщенные указатели. Типизированные указатели описываются в виде:



базовый тип * имя указателя , * имя указателя ,... ; * относится только к тому имени, непосредственно перед которым она стоит. В одном операторе описания можно описать как переменные некоторого типа, так и указатели на такой тип. Символ *, меняющий тип переменной, называется в таком контексте модификатором. Переменные типа «указатель» можно инициализировать так же. как и числовые переменные, например : int a=0, *b=&a, **c=&b; обобщенный указатель имеет тип void*. В нем можно хранить адреса любых объектов, но его использование ограничено по сравнению с типизированными указателями. Отметим, что любой адрес можно проверить на равенство или неравенство со специальным значением NULL (аналогичным константе NIL в языке PASCAL), которое записывается вместо нуля. Слово NULL позволяет определить указатель, который ничего не адресует.

Для указателей определены следующие операции.

1. Операция "значение", записывающаяся в виде *указатель . результат операции есть значение, записанное по адресу, хранящемуся в данном указателе. В языке PASCAL такая операция записывается в виде указателя . Операция "значение" применима только к типизированным указателям. Она имеет такой же приоритет, как и все другие унарные операции.

2. К указателям применима операция явного преобразования типа, причем указатель можно преобразовать не только в указатель другого типа, но и в число, и число можно преобразовать в указатель.

3. Операция присваивания = при этом оба операнда должны быть указателями одного типа, либо один из них должен иметь тип void* , либо правый операнд должен быть числом 0.

4. Операции сравнения = =,!=,<.<=.>.>= , при этом оба операнда должны быть указателями одного типа, либо один из них должен иметь тип void*, либо один из операндов должен быть числом 0.

5. Операция вычитания — , оба операнда должны быть указателями одного типа, либо второй операнд должен быть целым числом.

6. Операция сложения + , при этом второй операнд должен быть целым числом.

7. Увеличение и уменьшение указателя ++ , -- .

8. Операции присваивания += и -= . второй операнд в этом случае должен быть целым числом.

9. Операция "адрес" & .

При выполнении операций 5-8 используется так называемая адресная арифметика - т.е. за 1 принимается размер в байтах типа данных, базового для этого указателя. Это свойство арифметических операций с указателями особенно часто используется при работе с массивами.



Массивы

Описание одномерного массива в языке С имеет вид:



тип имя массива [ длина ] [ = { список значений } ] ; здесь тип - тип элемента массива, имя массива - идентификатор, длина - количество элементов массива, заданное константным выражением. список значений - последовательность разделенных запятыми константных выражений, например:

int a[7]={-l,147/3+26/7,33,5,6,0,-ll};

Индексы элементов любого массива всегда начинаются с 0. так что последний элемент имеет индекс длина-1. Так, в приведенном примере индекс последнего (седьмого по счету) элемента массива а равен 6. Инициализирующая часть оператора не обязательна: кроме того, длина списка значений может быть меньше длины массива, тогда оставшиеся элементы массива не инициализируются. Если задан полный список значений, то можно не указывать длину массива - память под массив будет распределена в соответствии с количеством инициализирующих выражений, но модификатор [ ] . означающий массив, опускать нельзя. Имя массива считается константой-указателем, равной адресу нулевого элемента массива, т.е. а и &а[0] - это одно и то же. Обращение к элементам массива возможно либо с помощью индексов (точно так же. как в языке PASCAL) : a[i] . либо по адресу : *(a+i) - причем в последнем случае используется адресная арифметика. Фактически в программе всегда происходит обращение к элементу массива по адресу, а использование индексов допускается лишь для удобства программирования. Выход индекса за границы массива никак не отслеживается в языке С и не считается ошибкой. Описание многомерного массива в общем случае имеет вид: тип имя массива [ длина][ длина] ... [ ={ список значений } ] ; Например, двумерный массив b можно описать в виде

int b[3][4]={{l,2,3,4},{3,7,0,2},{3,7,4,8}};



6. Определение структур в Си. Массивы структур. Указатели на структуры. Структуры, ссылающиеся на себя. Поля в структурах. Объединения

Структура - это объединенное в единое целое множество семантически связанных именованных элементов разных типов (аналог записей в языке PASCAL). Существует несколько вариантов описания структур, во многих случаях при этом используется структурный шаблон. Структурный шаблон описывается в виде: struct имя шаблона { описания элементов }; элементы структуры, описываемые в таком операторе - это то же самое, что поля записей в языке PASCAL. Структурную переменную можно описать, используя предварительно описанный шаблон: struct имя шаблона имена переменных; можно объединить описания шаблона и переменной: struct имя шаблона { описания элементов } имена переменных; или struct { описания элементов } имена переменных; в этом случае шаблон может и не иметь имени. Имя шаблона не является именем типа, его нельзя использовать в описаниях без слова struct, но можно дать имя структурному типу, используя оператор typedef. Структуры, как и любые другие переменные, можно инициализировать. Допускаются массивы структур, вложенные структуры и указатели на структуры. Пример описания структурных переменных: struct stl {int Num; unsigned char Cli; char St[64];}; struct stl a={-l,’V’,”123456789"}, b={0,’U’,”"}, c={777,'\a’,”This is С structure"}, *pl=&c; Обращение к элементу структуры осуществляется так же, как в языке PASCAL: имя структуры.имя элемента. Для указателей на структуры определена специальная операция косвенной адресации: ->, которая имеет самый высокий приоритет среди всех операций, она используется для обращения к элементу структуры по адресу: указатель->имя элемента. Например: pl->Ch. pl->St[0]. Можно заменить операцию косвенной адресации операцией "значение": (*pl).Ch. (*pl).St[0]. В смысле взаимодействия с функциями структуры рассматриваются как скалярные объекты, поэтому допускаются параметры функций - структуры и функции, возвращающие структуры. Для однотипных структур определена операция присваивания =. К структурным переменным применима операция "адрес" &. Объединение - это объект, который может содержать (попеременно) данные разных типов (фактически объединение является структурой, все элементы которой имеют нулевое смещение относительно ее базового адреса). Для объединения резервируется память по самому большому элементу. Полным аналогом объединений являются вариантные поля записей в языке PASCAL. Описание объединений и обращение к их элементам аналогично соответствующим действиям со структурами, но при этом ключевое слово struct заменяется на union. Инициализировать объединение можно только значением, имеющим тип первого из его элементов. Битовое поле - это последовательность битов, лежащих внутри одного или нескольких машинных слов. Описание поля имеет вид: struct {[тип][ имя]: длина ; ... }; Тип элемента поля всегда int или unsigned. Неименованные элементы можно использовать для выравнивания (пропуска битов). В арифметических выражениях элементы битовых полей рассматриваются как целые числа. Структура указывающая на себя. Построение динамических объектов (списков, деревьев) выполняется так же, как в языке PASCAL, т.е. для этого используются структуры. Структуры могут включать в качестве элементов указатели на себя, например, элемент односвязного списка символьных строк можно описать в виде: struct Element{char *String; struct Element *Next;}; Для распределения и освобождения динамической памяти используются функции, описанные в stdlib.h : void* malloc(size_t r) - возвращает указатель на место в памяти, отведенное для объекта размера г : если память недоступна - возвращает NULL; void* calloc(size_t n,size_t r) - возвращает указатель на место в памяти, отведенное для массива из п объектов размера г ; если память недоступна - возвращает NULL; void* realloc(void* p,size_t r) - изменяет размер объекта, на который указывает р . на г . возвращает новый указатель или NULL; void free(void* p) - освобождает память, распределенную функциями с alloc, malloc, realloc. В С введены две унарные операции - new и delete - для динамического распределения памяти, освобождающие программиста от необходимости явно использовать библиотечные функции malloc, calloc и free. Операции new имя пита или new имя типа [ инициализатор] позволяют выделить и сделать доступным свободный участок памяти и возвращают адрес выделенного места. Если память недоступна - возвращают NULL. В выделенный участок заносится значение, определяемое инициализатором, который не является обязательным элементом и представляет собой выражение в круглых скобках. Например:point=new int(15); h=new double(3.1415); string=new char[80]; Последний оператор отводит место в свободной памяти под массив из 80 элементов типа char. Указатель string содержит теперь адрес нулевого элемента массива. Для явного освобождения выделенного операцией new фрагмента памяти используется операция delete указатель, где указатель адресует освобождаемый участок памяти. Например, операторами delete point; delete string; освобождаются участки памяти, связанные с указателями point и string.

7. Стандартные функции ввода и вывода в Си. Буферизированный доступ к файлам: fopen(), getc(), putc(). STDIN, STDOUT, STDERR.

Файл открывается при помощи fopen, которая возвращает информацию потока ввода-вывода, прикрепленного к указанному файлу или другому устройству, с которого идет чтение (или в который идет запись). В случае неудачи функция возвращает NULL. Функция freopen библиотеки Си выполняет аналогичную операцию после первого закрытия любого открытого потока, связанного с ее параметрами.

FILE *fopen(const char *path, const char *mode);

FILE *freopen(const char *path, const char *mode, FILE *fp);

path - путь к файлу, mode - режим открытия (может принимать следующие значения: r, w, a, r+ , w+, a+, rb+, wb+, ab+. Значение "b" зарезервировано для двоичного режима С.

Функция fgetc применяется для чтения символа из потока.

int fgetc(FILE *fp); В случае успеха, fgetc возвращает следующий байт или символ из потока (зависит от того, файл "двоичный" или "текстовый". В противном случае, fgetc возвращает EOF. Стандартная функция getchar также определена в stdio.h, она не принимает аргументов, и эквивалентна getc(stdin).

Функция fputc применяется для записи символа в поток.

int fputc(int c, FILE *fp); Параметр c "тихо" конвертируется в unsigned char перед выводом. Если прошло успешно, то fputc возвращает записанный символ. Если ошибка, то fputc возвращает EOF. Стандартная функция putchar, также определенная в stdio.h, принимает только первый аргумент, и является эквивалентной putc(c, stdout).

Функция fgets применяется для чтения строки из потока.

char *fgets(char *ouput_string, int size, FILE *f). Считывание происходит до тех пор пока не будет достигнут конец строки (\n) или длина строки, в которую происходит считывание.

Функция fwrite записывает блок данных в поток.

int fwrite ( const void * array, size_t size, size_t count, FILE * stream ); Таким образом запишется массив элементов count в текущую позицию в потоке. Для каждого элемента запишется size байт. Индикатор позиции в потоке изменится на число байт, записанных успешно. Возвращаемое значение будет равно count в случае успешного завершения записи. В случае ошибки возвращаемое значение будет меньше count.

Стандартные потоки ввода-вывода в системах типа UNIX (и некоторых других) — потоки процесса, имеющие номер (дескриптор), зарезервированный для выполнения некоторых «стандартных» функций. Как правило (хотя и не обязательно), эти дескрипторы открыты уже в момент запуска задачи (исполняемого файла). Поток номер 0 (stdin) зарезервирован для чтения команд пользователя или входных данных. При интерактивном запуске программы по умолчанию нацелен на чтение с устройства текстового интерфейса пользователя (клавиатуры). Поток номер 1 (stdout) зарезервирован для вывода данных, как правило (хотя и не обязательно) текстовых. При интерактивном запуске программы по умолчанию нацелен на запись на устройство отображения (монитор). Поток номер 2 (stderr) зарезервирован для вывода диагностических и отладочных сообщений в текстовом виде.

Форматный вывод данных осуществляется функцией printf: int printf(строка формата [,список вывода ]) которая возвращает количество выведенных символов. Список вывода может содержать любые выражения, разделенные запятыми. Строка формата заключается в " " и может содержать : 1)обычные символы, которые просто выводятся на экран; 2) специальные символы, управляющие размещением данных на экране; 3)элементы формата данных.

Для вывода строки на экран элементы формата можно не использовать, в этом случае список вывода пуст.

Элемент формата представляет собой последовательность :

% [-] [длина поля][.точность][l]; Могут использоваться следующие спецификации типов :

d, i, u, о, х, Х, с, f, е, Е, g, G, s, р.

Форматный ввод данных осуществляется функцией scanf:

int scanf (строка формата , список ввода) которая возвращает количество введенных значений. Список ввода должен содержать адреса переменных, описанных в программе, строка формата должна содержать только элементы формата данных.

Функции gets(),putc(),getc() аналогичны функциям fgets(), fgetcg(), fputch(), но в них используются стандартные потоки ввода/вывода.8. Дескрипторы файлов. Низкоуровневый ввод/вывод: open(), read(), write(), close(). Произвольный доступ – lseek().



Файловый дескриптор (file descriptor) - это целое число (int), соответствующее открытому файлу. Дескриптор, соответствующий реально открытому файлу всегда больше или равен нулю. Копия таблицы дескрипторов (читай: таблицы открытых файлов внутри процесса) скрыта в ядре. В пределах одного процесса все дескрипторы уникальны (даже если они соответствуют одному и тому же файлу или устройству). В разных процессах дескрипторы могут совпадать или не совпадать - это не имеет никакого значения, поскольку у каждого процесса свой собственный набор открытых файлов.

В командной оболочке открыты три файла: стандартный ввод (дескриптор 0), стандартный вывод (дескриптор 1) и стандартный поток ошибок (дескриптор 2). Когда под оболочкой запускается программа, в системе создается новый процесс, который является для этой оболочки дочерним процессом, следовательно, получает копию таблицы дескрипторов своего родителя (то есть все открытые файлы родительского процесса). Таким образом программа может осуществлять консольный ввод-вывод через эти дескрипторы. Таблица дескрипторов, помимо всего прочего, содержит информацию о текущей позиции чтения-записи для каждого дескриптора. При открытии файла, позиция чтения-записи устанавливается в ноль. Каждый прочитанный или записанный байт увеличивает на единицу указатель текущей позиции.

Открытие файла системным вызовом int open(const char * filename, int flags, mode_t mode); Возвращает дескриптор файла при удачном завершении, иначе -1; Создание файла производится этой же функцией, но с добавлением флагов (O_CREAT, O_EXCL, O_TRUNC).

Флаги: 0 - O_RDONLY (только для чтения), 1 - O_WRONLY (только для записи), 2 - O_RDWR (чт/зап)

mode чаще всего используется 0666 (полный доступ вроде) или 0600 (для пользователя)

Чтение файла int read(int fd, void *buf, int nbytes). Возвращает количество считанных байтов.

Запись в файл int write(int fd, void *buf, int nbytes). Возвращает количество записанных байтов.

Закрытие файла int close(int fd). Возвращает 0 в случае успешного завершения операции и -1 в противном случае. По сути этот системный вызов освобождает файловый дескриптор в таблице.

Системный вызов произвольного доступа lseek(int fd, long offset, int from). Устанавливает значение указателя в памяти в новой позиции и возвращает позицию указателя.

from: SEEK_SET=0 - смещение от начала файла; SEEK_CUR=1 - текущее положение указателя; SEEK_END=2 - смещение от конца файла.

Существует также системный вызов int pread(int fd, void *buf, int nbytes, off_t offset) - выполняет те же функции, что и вызов read, только со смещения offset. Возвращает количество считанных байтов.

  1   2   3

Похожие:

1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconОператоры в языке Java
Одни операторы ставятся перед операндами и называются префиксными, другие после, их называют постфиксными операторами. Большинство...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconЗанятие Ввод вывод. Операторы Read (Readln), Write (Writeln). Простейшие линейные программы 11 Операторы Write и WriteLn 11
Занятие Язык программирования Паскаль. Знакомство со средой программирования Турбо Паскаль. Основные понятия. Первая программа. Оператор...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconСписок-минимум вопросов по квантовой механике (вмк) Сформулировать постулаты квантовой механики
Записать операторы координаты и импульса в координатном представлении. Какому правилу коммутации подчиняются эти операторы?
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconСписок-минимум вопросов по квантовой механике (вмк) Сформулировать постулаты квантовой механики
Записать операторы координаты и импульса в координатном представлении. Какому правилу коммутации подчиняются эти операторы?
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconЛекция 5 Операторы управления выполнением программы java условные операторы
Else необязателен. На месте любого из операторов может стоять составной оператор, заключенный в фигурные скобки. Логическое выражение...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while icon2. линейные операторы над векторным пространством
Корневые подпространства. Жорданова нормальная форма. Теорема Гамильтона—Кэли. Комплексификация линейного оператора. Собственные...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconDf. Вектор – это элемент векторного пространства (пространство с аксиомами для векторов). Df
Вопрос Линейные операторы (ЛО) в конечномерном пространстве и их матричное представление. Характеристический многочлен, собственные...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconУрок 5 Тема: Простейшие линейные программы. Арифметические выражения. Оператор присваивания. Вопросы для повторения
Линейная программа (конструкция следования) содержит в себе операторы ввода, вывода и присваивания. Операторы линейного алгоритма...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while iconОператоры языка Паскаль. Простые и составные операторы
Выполнение: вычисляется значение выражения, стоящего в правой части оператора, и полученное значение присваивается переменной, имя...
1. Язык Си. Операторы if – else и else – if. Переключатель. Операторы break и continue. Циклы while, for, do-while icon«Развитие методов математической физики для задач квантовой физики и теории распространения волн»
Пектральная теория операторов, методы гомогенизации, псевдодифференциальные операторы, разностные операторы, квантовая теория рассеяния,...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org