Лабораторная работа № 2
Среда разработки, основы языка и типы данных, ввод- вывод
Программа на Cи состоит из набора процедур (часто называемых функциями, даже
если они не возвращают значений). Эти
процедуры содержат объявления, операторы и
другие элементы, которые вместе говорят компьютеру что надо делать. На рисунке A-1
показана небольшая процедура, в которой объявляются три целочисленные переменные и
присваиваются им значения. Имя процедуры — main (главная).
Процедура не имеет
формальных параметров, на что указывает отсутствие каких-либо идентификаторов между
скобками за именем процедуры. Тело процедуры заключено в
фигурные скобки ( { } ).
Этот пример показывает, что Cи имеет переменные, и что эти переменные должны быть
объявлены до использования. Cи также имеет операторы, в этом примере это операторы
присваивания. Все операторы должны заканчиваться точкой с запятой (в
отличие от
Паскаля, который использует двоеточия между операторами, а не после них).
Комментарии начинаются с символов « / *» и заканчивается символами «* /» и
могут занимать несколько строк.
main ()
/* это комментарий */
{
int i, j, k;
/* объявление 3 целочисленных переменных */
i = 10;
/* присвоить i значение 10 (десятичное число) */
j = i + 015;
/* присвоить j значение i + 015 (восьмеричное число) */
k = j * j + 0xFF;
/* установить k в j * j + 0xFF (шестнадцатеричное число) */
}
Рис. A-l. Пример процедуры в Си.
Процедура содержит три константы. Константа 10 в первом присваивании
это обычная десятичная константа. Константа 015 является восьмеричной константой
(равно 13 в десятичной системе счисления). Восьмеричные константы всегда начинаются
с начального нуля. Константа 0xFF является шестнадцатеричной константой (равной 255
десятичной). Шестнадцатеричный константы всегда начинаются с 0x. Все три типа
используются в Cи.
. Основные типы данных
Cи имеет два основных типа данных (переменных): целое и символ, объявляемые как int и
char, соответственно. Нет отдельной булевой переменной. В качестве булевой переменной
используется переменная int. Если эта переменная содержит 0, то это означает ложь/false,
а любое другое значение означает истина/true. Cи также имеет и типы с плавающей
точкой, но MINIX не использует их.
К типу int можно применять «прилагательные» short,
long или unsigned, которые
определяют (зависящий от компилятора) диапазон значений. Большинство процессоров
8088 используют 16-битные целые числа для int и short int и 32-битные целые числа для
long int. Целые числа без знака (unsigned int) на процессоре 8088 имеют диапазон от 0 до
65535, а не от -32768 до +32767, как это у обычных целых чисел (int). Символ занимает 8
бит.
Спецификатор register
также допускается как для int, так и для char, и является
подсказкой
для компилятору, что объявленную переменную стоит поместить в регистр,
чтобы программа работала быстрее.
Некоторые объявления показаны на рис. А — 2.
int i;
/* одно целое число */
short int z1, z2;
/ *два коротких целых числа */
char c;
/* один символ */
unsigned short int k;
/* одно короткое целое без знака */
long flag_poll;
/* 'int' может быть опущено */
register int r;
/* переменная регистра */
Рис. А-2. Некоторые объявления
.
Преобразование между типами разрешено. Например, оператор
flag_pole = i;
разрешен, даже если i имеет тип int, а flag_pole — long. Во многих случаяхнеобходимо или
полезно принудительно проводить преобразования между типами данных. Для
принудительного преобразования достаточно поставить целевой тип в
скобках перед
выражением для преобразования. Например
:
р ( (
long
) i);
предписывает преобразовать целое число i в long перед
передачей его в качестве
параметра в процедуру p, которая ожидает именно параметр long
.
При преобразовании между типами следует обратить внимание на знак.
При преобразовании символа в целое число некоторые компиляторы обрабатывают
символы как знаковые, то есть от — 128 до +127, тогда как другие рассматривают их как
без знака, то есть от 0 до 255. В MINIX часто встречаются такие выражения, как
i = c &
0377
;
которые преобразует с (символ) в целое число, а затем выполняет логическое И
(амперсанд) с восьмеричной константой 0377. В результате получается, что старшие 8 бит
устанавливаются в ноль, фактически заставляя рассматривать c как 8-битное
число без
знака, в диапазоне от 0 до 255.
При запуске программы на Си автоматически открываются пять потоков, основными из
которых являются следующие:
•
Стандартный поток ввода
stdin
•
Стандартный поток вывода
stdout
•
Стандартный поток вывода сообщений об ошибках
stderr
Стандартный поток ввода
stdin по умолчанию соответствует клавиатуре, а
потоки
stdout и
stderr - экрану монитора.
Для управления вводом-выводом с помощью этих потоков используются ряд функций:
•