Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование в среде Visual C++ 6. Учебное пособие
.pdf
ограничиться шестью символами или меньше. Прописные
истрочные одной буквы считаются разными символами. Например, идентификаторы abb, ABB, Abb, aBb— это всё разные
идентификаторы. Идентификаторы не должны совпадать
сключевыми словами. Например, идентификатор неможет
иметь имя double, новполне допустимо Double.
1.4. Ключевые слова
Это определённые слова, имеющие специальное назначение, применение которых строго регламентировано. Название программных единиц и идентификаторов не должны
совпадать сключевыми словами. Ниже приведён список основных ключевых слов.
auto break cfse char continue default
do double else enum extern oat
for goto if int long regiser
return short signed sizeof static struct
switch typedef union unsigned void while
При использовании этих слов непо значению компилятор
сообщит обошибке ипрекращает дальнейшее компилирование программы.
1.5. Комментарии
Комментарии — это последовательность любых символов, которые компилятор игнорирует при компилировании
программы. Поэтому можно и даже желательно вставлять
комментарии столько, сколько необходимо при повторном
возврате кданной программе сцелью, например, её коррекции. Комментарии могут помочь вспомнить элементы Вашей программы. На языке СИ комментарий выглядит как
/*<символы>*/, авсистеме Visual C++ иначе: // <символы>
— 11 —

доконца строки. Нежелательно использовать вкомментариях директивы препроцессора, атакже использовать вложение
комментариев в комментарии. При переносе комментария
надругую строку всреде Visual C++ необходимо надругой
строке перед символами поставить знак начала комментария
(//), иначе компилятор воспримет продолжение комментария
как очередную строку программы со всеми вытекающими
последствиями.
При необходимости с помощью команд препроцессора
для ключевых слов давать другие имена, например, при наличии макроопределения типа #dene BOOL int слово BOOL
вобъявлениях можно использовать вместо int.
— 12 —

2.
2.1. Исходная программа
Исходная программа представляет собой совокупность
следующих элементов: директивы препроцессора, указаний компилятору, объявлений, определений исовокупности не менее одной функций. Директивы препроцессора
специфицируют действия компилятора при преобразовании текста программы перед её компиляцией. Указания
компилятору — это специальные инструкции, которым
компилятор должен следовать. Например, указывать компилятору, где искать программу вычисления какой-либо
стандартной математической функции.
Объявления переменных даёт имя переменным иих атрибуты. Каждая переменная впрограмме обязательно должна
быть заранее объявлена иуказаны её атрибуты, такие как тип
переменных их размерность иобъём переменных. Авзависимости от определений компилятор выделяет воперативной памяти компьютера необходимый объём памяти.
Все функции тоже должны быть заранее объявлены. Объявление функции задаёт её имя, тип возвращаемого (вычисленного) значения иможет задавать атрибуты формальных
параметров и переменных каждой функции. Тело самих
функций представляет собой составной оператор или блок,
содержащий объявления ипоследовательность операторов.
Для того чтобы программа наязыке былабы скомпилирована ивыполнена, она должна иметь хотябы одно
— 13 —

определение— определение самой функции, которая определяет действия, выполняемой функцией. Если же программа содержит несколько функций, она должна иметь
определения каждой функции итела их, асреди функций
одна должна быть главной ииметь имя main, именно снеё
начинается выполнение всей программы. Она поопределённым правилам обращается к другим функциям, а те,
всвою очередь, могут обращаться ктретьим итак далее.
Еслиже впрограмме только одна функция, она тоже должна иметь имя main. Всреде Visual C++ функция main имеет специфический вид искрыта отвнимания программиста. Компилятор каждую функцию компилирует отдельно,
поэтому каждая функция должна быть самодостаточной,
тоесть иметь все препроцессорные определения, все объявления. Воедино все программы объединяются всоответствие директив препроцессора типа #include. Все директивы препроцессора начинаются ссимвола #. Всреде Visual
C++ все препроцессорные директивы иопределения переменных располагаются в отдельном файле. Это наиболее
удобно при составлении программы.
2.2. Выполнение программы
Как уже было указано выше, вся программа состоит
изотдельных функций, одна изкоторых является главной
иимеет имя main. Посути дела эта функция вопределённой последовательности вызывает другие функции для
проведения необходимых расчётов. Заканчивает работу
программа либо когда будет выполнен последний оператор функции main, или при выполнении других функций
путём вызова библиотечных функций для прекращения
работы программы (такие как exit или abort).
— 14 —

Каждая функция начинает работу с первого блока
и с первого оператора, далее все блоки и операторы выполняются втой последовательности, как они были записаны втеле программы ифункций. Заканчивается работа
функции, как только встретится оператор return или при
выполнении последнего оператора. Дальнейшая работа
программы продолжается соператора, следующего заоператором вызова функции.
Все функции, включая иглавную, могут иметь свои формальные переменные, указанные в заголовке тела функции. При вызове функции вкачестве аргументов функции
являются реальные переменные, которые перечисляются
втомже порядке, как иформальные параметры взаголовке тела функции. Естественно, количество формальных
переменных иим соответствующих реальных параметров
должны совпадать, иначе компилятор сообщит обобнаружении ошибки, икомпиляция прекращается.
Все переменные, описанные втеле функции, являются
доступными только данной функции, это так называемые
локальные переменные. Они недоступны для вызывающей
программы. Переменные вызывающей программы (глобальные переменные) могут быть доступны вызываемой
при соответствующем оформлении. Всвязи сэтим локальные переменные могут иметь совпадающие имена спеременными других функций, если этим другим функциям
упомянутые локальные переменные будут недоступны.
Но все функции имеют глобальный характер, их можно
вызвать излюбой другой функции.
Язык позволяет выполнение так называемых вложенных вызовов, когда какая-либо функция вызывает
туже функцию. Например, z=exp (-exp (x)). Вэтом случае
— 15 —

сначала производится вычисление экспоненты внутренней
(exp (x)), а затем уже внешней экспоненты. Число таких
вложений может быть разным, в зависимости от версии
компилятора.
— 16 —

3.
3.1. Базовые типы данных
В реализован определённый набор типов данных, другие типы данных могут быть реализованы только наоснове
базовых. Базовые типы данных приведены вниже следующей
таблице.
3.1
целые
плавающие
прочие
char (signed char)
int (signed int)
long (signed long)
unsigned char
unsigned int
unsigned long
oat
double
long double
void
enum
знаковый символьный
знаковый целый
знаковый длинный целый
беззнаковый символьный
беззнаковый целый
беззнаковый длинный целый
плавающий
плавающий двойной точности
длинный плавающий двойной
точности
Пустой
перечислимый
1
2
4
1
2
4
4
8
10
0
-
Тип char определяет коды чисел от –128 до 127,
а беззнаковый char— от0 до255.
Тип int представляет числа от–32768 до32767, абеззнаковый int— от0 до65535.
— 17 —

Числа типа oat занимают четыре байта (32 двоичных разряда).
Формат: <знак числа_ мантисса _знак порядка_ порядок>.
Знак числа изнак порядка поодному биту, мантисса— 24
бита, порядок (основание 2)— 7 бит. Значение мантиссы лежит впределах от1 до2, поэтому старший разряд мантиссы
нехранится. Область значений составляет примерно от3.*10
до3.4*10
+38
. Точность числа составляет до6–7 значащих цифр.
–38
Число double занимает 8 байт, поэтому мантисса занимает
52 бита, апорядок— 11 байт. Область значений составляет
примерно от1.7*10
–308
до1.7*10
+308
. Точность представления
составляет до15 значащих цифр.
Числа long double занимают 10 байт. Поэтому мантисса
занимает 68 бит, апорядок— 15 байт. Область значений чисел составляет примерно от3.4*10
–4932
до1.1*10
+4932
. Точность
представления чисел составляет около 20 значащих цифр.
3.2. Объявление переменных
Каждая переменная должна имеет свой идентификатор
с указанием типа переменной и её описателя. Что касается
типа переменной, тоон может быть указан один раз (или несколько раз), азаним следуют все переменные этого типа,
разделённые запятыми. Нокаждая переменная должна иметь
свой описатель.
Если переменная простая, то она неимеет специального
описателя. Формат объявления:
Тип переменных идентификаторы переменных.
Перечисляемые идентификаторы отделяются друг отдруга запятыми, аперечисление заканчивается точкой сзапятой
(конец оператора). Пример: int I, j, k, l, m, n; Здесь объявлено
— 18 —

6 простых переменных целого типа. Воператорах программы
используются только их идентификаторы.
Если переменная является массивом, то вслед заиденти-
фикатором вквадратных скобках указывается длина массива
вединицах типа переменной. Например, char s [15] означает, что переменная под идентификатором s предназначена
для хранения до15 символов. Другой пример: double ac [24],
это означает, что переменная под идентификатором ac может
хранить 24 числа типа double. Массивы переменных могут
быть многоразмерными, для каждой размерности вквадратных скобках указывается длина размерности. Например, указание double abc [5] [20] означает, что переменная abc типа
double является двумерной матрицей, где 5 строк по20 чисел
встроке. Аналогично организуется описание идругих многоразмерных массивов. В самой программе при обращении
к конкретной переменной из массива после идентификатора в квадратных скобках указываются конкретные номера
вданном массиве, например, abc [i] [k] означает, что измассива abc следует выбрать k-й элемент изi-ой строки. Вэтом
примере переменная i может принимать значения 0,1,2,3 и4,
апеременная k тоже может принимать значения от0 до 19.
То есть счёт переменных в квадратных скобках начинается с нулевого значения. Однако компилятор любой массив
перерабатывает в одномерный массив, длиной равный произведению размерностей в квадратных скобках описателя
переменной. Каждый элемент ввыше приведённом примере
рассчитывается поправилу 5*i+k., исходя изописания типа
abc [5] [20]. При попытке обратиться к элементу массива
сномером выше, чем вописателе, часто компилятор невыда-
— 19 —

ёт ошибку, аобращается кэлементу, следующему заданным
массивом. Поэтому нужно быть внимательным при выборе
размерностей и выборе элементов изэтого массива. Расчёт
будет выполнен неправильно, аошибку врасчётах вэтом случае может оказаться весьма трудно отыскать. Следует также
указать, что массив не может состоять изидентификаторов
функций.
Структура— это сложная составная переменная, включающая всебя переменные разного типа исразными описателями. Описание структуры производится в несколько
строк:
Struct < имя структуры >
{
Тип <идентификатор>< описатель>
........
Тип <идентификатор>< описатель>
} идентификатор структуры.
Имя структуры может быть любым, кроме базовых. Имя
структуры имеет смысл типа обычных переменных. В допускается, что одна изструктур может неиметь имени, компилятор воспринимает эту структуру с именем, состоящим
изпробельного символа. При обращении кэлементу структуры указывается идентификатор структуры, за ним точка, азаней идентификатор переменной изэтой структуры.
Если описатель идентификатора вструктуре — массив, то,
как обычно, вквадратных скобках указываются номера элементов. Если описывается массив структур, торазмерность
массива указывается в квадратных скобках после идентификатора структуры. А при обращении кэлементам струк-
— 20 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
