Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по ОАиП.doc
Скачиваний:
21
Добавлен:
15.04.2019
Размер:
411.14 Кб
Скачать
  1. Директивы препроцессора (основные).

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

<директивы препроцессора>

<определение типов пользователя – typedef>

<описание прототипов функций>

<определение глобальных переменных>

<функции>

В свою очередь, функции имеют такую структуру:

<класс памяти> <тип> < ID функции> (<объявление параметров>)

{ - начало функции

код функции

} - конец функции

Рассмотрим кратко основные части общей структуры программ.

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

Препроцессорные директивы начинаются с символа #, за которым следует наименование директивы, указывающее текущую операцию препроцессора.

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

#include < ID_файла.h>

где «h» – расширение заголовочных файлов.

Если идентификатор файла заключен в угловые скобки (< >), то поиск дан­но­го файла производится в стандартной директории с этими файлами, если же ID файла заключено в двойные кавычки (” ”), то поиск данного файла производится в текущей директории.

К наиболее часто используемым библиотекам относятся:

stdio.h - содержит стандартные функции файлового ввода-вывода;

conio.h - функции для работы с консолью (клавиатура, экран монитора);

math.h - математические функции.

Второе основное назначение препроцессора – это обработка макро­­опре­делений. Макроподстановка define (определить) имеет общий вид:

#define < ID > <строка>

Например: #define PI 3.1415927

В ходе препроцессорной обработки программы появление в тексте идентификатора PI везде заменяется значением 3.1415927.

Основные возможности препроцессора приведены в Приложении 3.

Рассмотрим небольшой пример, позволяющий понять самые простейшие приемы программирования на языке Си:

#include <stdio.h>

void main(void)

{ // Начало функции main

printf(“ Высшая оценка знаний - 10 !”);

} // Окончание функции main

Отличительным признаком функции служат круглые скобки ( ) после идентификатора функции, в которые заключается список аргументов. Если аргументы отсутствуют, указывают атрибут void - отсутствие значения. Перед ID функции обычно указывается тип возвращаемого ею результата, так как функция main() ничего не возвращает - в качестве результата указывается void.

Код функции представляет собой набор инструкций, каждая из которых оканчивается символом «;». В нашем примере одна инструкция - функция printf() выполняет форматный вывод данных на экран, в данном случае, указанную фразу.

  1. Базовые типы данных.

Данные в языке Си разделяются на две категории: простые (скалярные), будем их называть базовыми, и сложные (составные) типы данных.

Основные типы базовых данных: стандартный целый (int), веще­ствен­ный с одинарной точностью (float) и символьный (char).

В свою очередь, данные целого типа могут быть короткими (short), длинными (long), и без знаковыми (unsigned), а вещественные - с удвоенной точностью (double).

Сложные типы – массивы, структуры (struct), объединения или смеси (union), перечисление (enum).

Данные целого и вещественного типов находятся в определенных числовых диапазонах так как занимают разный объем оперативной памяти:

Таблица 1

Тип данных

Объем памяти (байт)

Диапазон значений

сhar

1

-128 …127

int

2

-32768…32767

short

2(1)

-32768…32767(-128…127)

long

4

-2147483648…2147483647

unsigned int

4

0…65535

unsigned long

4

0…4294967295

float

4

3,14*10-38…3,14*1038

double

8

1,7 *10-308 1,7 *10308

Тип int - целое число, обычно соответствующее естественному размеру целых в используемой ЭВМ. Квалификаторы short и long, которые можно использовать с типом int, указывают на различные размеры целых, т.е. определяют размер памяти, выделяемый под переменные (табл.1).

Примеры: short int x;

long int x;

unsigned int x = 8; (декларация с одновременной инициализацией числом 8).

Атрибут int в таких ситуациях может быть опущен.

Атрибуты signed и unsigned показывают, как интерпретируется старший бит числа, как знак или как часть числа:

int

Знак

Значение числа

15

14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

- номера битов

unsigned int

Значение числа

15 0

long

Знак

Значение числа

31

30 0

unsigned long

Значение числа

31 0

Если указан только атрибут int, это означает - short signed int.

Символьная переменная занимает в памяти 1 байт и представля­ется кодом от 0 до 255. Закрепление конкретных символов за кодами производится кодовыми таблицами.

Для персональных компьютеров наиболее распространена ASCII (American Standard Code for Information Interchenge) таблица кодов (Приложение 1). Данные типа char рассматри­ваются компиля­то­ром как "целые", поэтому возможно использование signed char (по умолчанию) - символы с кодами от -128 до +127 (т.е. только символы с кодами до 127) и unsigned char - символы с кодами от 0 до 255 (в том числе и русские).

Примеры:

char res, simv1, simv2;

char let = 's'; (декларация с одновременной инициализацией символом s).

Данные вещественного типа в памяти занимают, соответственно, float - 4 байта; double - 8 байт; long double (повышенная точность) - 10 байт. Для размещения данных типа float обычно 8 бит выделено для представления порядка и знака и 24 бита под мантиссу.

Тип

Точность (мантисса)

Порядок

float

7 цифр после запятой

 38

double

15

 308

Long double

19

 4932