Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в среде Visual C++ 6. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
ограничиться шестью символами или меньше. Прописные истрочные одной буквы считаются разными символами. На­пример, идентификаторы 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++ необходимо надругой строке перед символами поставить знак начала комментария (//), иначе компилятор воспримет продолжение комментария как очередную строку программы со всеми вытекающими последствиями.
При необходимости с помощью команд препроцессора
для ключевых слов давать другие имена, например, при на­личии макроопределения типа #dene 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 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]