
- •220300 - Системы автоматизированного проектирования
- •Состав языка и принцип работы компилятора языка высокого уровня
- •Идентификаторы
- •Альтернативный ввод-вывод в стиле с
- •Константы
- •Манипуляторы
- •Преобразования типов
- •Арифметические операции
- •Функции стандартной библиотеки
- •Операции отношения и логические операции
- •Базовые конструкции структурного программирования
- •Цикл с параметром (for)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Рекомендации по программированию циклов
- •Ветвления
- •Условный оператор if
- •Вложенные конструкции
- •Проблемы соответствия if и else во вложенных ветвлениях
- •Условная операция
- •Оператор switch
- •Операторы передачи управления
- •Контрольная работа
- •Массивы
- •Сортировка массива методом выбора
- •Сортировка массива методом пузырька
- •Многомерные массивы
- •Операции со строками
- •Функции
- •Void starline(); // объявление функции (прототип)
- •Передача аргументов в функцию по значению
- •Void charline(char sim, int n); // объявление функции (прототип)
- •Возвращение функцией значения
- •Передача аргументов по ссылке
- •Возвращение значения по ссылке
- •Перегруженные функции
- •Переменные и функции
- •Передача массивов в функции
- •Указатели
- •Указатели и массивы
- •Указатели и функции
- •Указатели и строки
- •Динамический массив и динамическое выделение памяти
- •Ввод/вывод
- •Форматированный ввод/вывод
- •Конструкторы и методы
- •Двоичный ввод/вывод. Бинарные файлы
- •Двунаправленный ввод/вывод
- •Функции стандартной библиотеки для работы с файлами или ввод/вывод в стиле с
Идентификаторы
Идентификатор - это имя программного объекта (переменной, функции). При именовании переменной или функции могут использоваться латинские буквы, цифры и знак подчёркивания. Прописные и строчные буквы различаются, например А1 и а1 – два различных имени. Первым символом идентификатора может быть буква или знак подчёркивания, но не цифра. Пробелы внутри имён не допускаются. Приведём пример двух основных традиций именования переменных. Одной из них является так называемая венгерская запись, по которой каждое слово, составляющее идентификатор, начинается с прописной буквы, например, MaxDlina. Другая традиция – разделять слова, составляющие имя, знаками подчёркивания: max_dlina.
Идентификатор создаётся на этапе объявления переменной, функции и т.п. При выборе идентификатора необходимо иметь в виду следующее:
идентификатор не должен совпадать с ключевыми (зарезервированными) словами и именами используемых стандартных объектов языка;
не рекомендуется начинать идентификаторы с символа подчёркивания, поскольку они могут совпасть с именами системных функций или переменных.
Типы данных в С++
Основное предназначение любой программы заключается во вводе данных, их обработке и выводе. Данные различного типа хранятся и обрабатываются по разному. Тип данных определяет:
внутреннее представление данных в памяти компьютера;
множество значений, которые могут принимать величины этого типа;
операции и функции, которые можно применять к величинам этого типа.
Обязательное описание типа данных позволяет компилятору производить проверку допустимости различных конструкций программы. Все типы языка С++ можно разделить на основные и составные. В языке С++ определено шесть основных (стандартных) типов данных для представления целых величин (int), вещественных (float; double – с двойной точностью), символьных (char; wchar_t - расширенный) и логических величин (bool). На основе этих основных типов данных программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.
Существует четыре спецификатора, уточняющих внутреннее представление и диапазон значений стандартных типов:
short (короткий);
long (длинный);
signed (знаковый) – по умолчанию все целочисленные типы считаются знаковыми, т.е. этот спецификатор можно опускать;
unsigned (беззнаковый).
Рассмотрим диапазон значений стандартных типов данных для 32-разрядного процессора (см. табл.).
Название типа |
Диапазон значений |
Точность |
Размер (байт) |
bool |
false и true |
нет |
1 |
char |
-128 … 127 |
нет |
1 |
unsigned char |
0 … 255 |
нет |
1 |
short int |
-32 768 … 32767 |
нет |
2 |
unsigned short int |
0 … 65 535 |
нет |
2 |
int |
-2 147 483 648 … 2 147 483 647 |
нет |
4 |
unsigned int |
0 … 4 294 967 295 |
нет |
4 |
float |
3.4е-38 … 3.4е+38 (3.4×1038) |
7 |
4 |
double |
1.7е-308 … 1.7е+308 |
15 |
8 |
Необходимо иметь ввиду, что размер типа int не определяется стандартом, а зависит от компьютера и компилятора, например, на 16-разрядном процессоре под тип int отводится 2 байта, а на 32-разрядном – 4 байта.
Кроме перечисленных типов данных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции и т.п.
Структура программы на языке С++
Программа на языке С++ состоит из функций, описаний и директив препроцессора. По крайней мере, даже самая маленькая программа должна иметь одну функцию main(), называемую главной функцией. Выполнение любой программы (консольной) начинается с первого оператора главной функции. Синтаксис функции имеет следующий формат:
тип_возвращаемого_значения ( параметры ) {
оператор; // комментарий в стиле С++
…
оператор; /* комментарий в стиле С */
}
Как видно из этого примера, функция состоит из операторов, которые являются указаниями компьютеру выполнить определённые программистом действия. Все операторы завершаются точкой с запятой (;).
Комментарии служат для предоставления более расширенной информации человеку, читающему код. Компилятор игнорирует всё, что помечено в программе как комментарий, поэтому комментарии никак не влияют на ход исполнения программы. Для пояснений рекомендуется использовать комментарии типа //, а для временного исключения блоков кода при отладке рекомендуется применять комментарии типа "скобки" /* */.
Рассмотрим в качестве примера линейную программу, которая переводит температуру в градусах по Фаренгейту в градусы Цельсия по формуле:
С = 5/9 (F - 32) , где С – температура по Цельсию, F – по Фаренгейту.
#include <iostream.h> // 0) директива препроцессора
#include <conio.h>
using namespace std;
//---------------------------------------------------------------------------
int main() { // 1) заголовок главной функции
float c, f; // 2) описание переменных
cout << "Vvedite temp. po Fahrengeitu: "; // 3) оператор вывода на экран
cin >> f; // 4) оператор ввода и присвоения значения переменной f
c = 5. * (f - 32) / 9 ; // 5) оператор-выражение
cout << "Temp. po Celsiu ravna " << c << endl; // 6)
cout << "\nPress any key to exit:";
getch();
return 0; // 7)
}
В начале программы записана директива препроцессора. Препроцессором называется предварительная фаза компиляции, то есть перевода программы с языка С++ на машинный язык. Директивами называются инструкции препроцессора. Таким образом, с помощью этой директивы к исходному тексту программы подключается заголовочный файл iostream.h, который содержит описания элементов стандартной библиотеки, необходимых для выполнения ввода-вывода в стиле С++ (вывод на экран cout<< и ввод с клавиатуры cin>>).
В стандартной библиотеке С++ существует множество заголовочных файлов. Использование тех или иных стандартных функций требует их включения в программу. В современном С++ заголовочные файлы не имеют расширения, но те файлы, которые были унаследованы от языка С, имеют расширение (*.h). Во избежание путаницы рекомендуется всегда указывать имя заголовочного файла с расширением (актуально для С++ Builder 5).
В заголовочном файле не должно быть определений функций и данных. Заголовочные файлы могут содержать:
определение типов, констант, встроенных функций, шаблонов, перечислений;
объявления функций, данных, имён, шаблонов;
директивы препроцессора.
В операторе 2 определены две переменные для хранения в памяти двух значений: температуру по Фаренгейту и по Цельсию. При описании любой переменной нужно указывать её тип, чтобы компилятор знал, сколько выделить места в памяти, как интерпретировать её внутреннее представление, а также какие действия можно будет выполнять с этой величиной. Необходимо помнить, что для действий с целыми и вещественными величинами компилятором формируются различные наборы машинных команд.
В операторе 3 выполняется вывод на экран приглашения ввести значение температуры по Фаренгейту. С помощью оператора 4 происходит считывание введённого числа и передача его переменной f. В процессе ввода число преобразуется из последовательности символов, набранных на клавиатуре, во внутреннее представление вещественного числа и помещается в ячейку памяти, зарезервированную для переменной f (при её объявлении в операторе 2).
В операторе 5 вычисляется выражение, записанное справа от операции присваивания (=), и результат присваивается переменной c, т.е. заносится в отведённую этой переменной ячейку памяти ("присваивание – это передача данных налево"). Порядок вычисления выражения определяется приоритетом операций, принятым в математике.
7-ой оператор return 0; является указанием главной функции возвратить значение 0 (всё в порядке) компилятору или ОС. Можно и иначе записать главную функцию (в стиле С): void main(void) { … }.
Создание консольных приложений в ИСР Borland C++ Builder
В этом семестре мы будем разрабатывать программы, как консольные приложения, т.е. программы без визуального интерфейса и выполняющиеся в сессии MS-DOS. Для создания консольного приложения в C++ Builder вам необходимо выполнить следующую цепочку команд: File/New/Other/Console Wizard. Появится диалоговое окно, в котором убедитесь, что выбран С++ и установлен флажок Console Application. Остальные флажки должны быть сняты!
С помощью вставки в конец программы функции getch(), программа не исчезнет с экрана, а будет ожидать нажатия какой-либо клавиши. Функции getch() требуется заголовочный файл conio.h .
При использования русского алфавита появляются проблемы, связанные с неправильным отображением русских букв. Это вызвано тем, что в ОС MS-DOS для кодировки используется стандарт ASCII, являющийся международным только в первой половине кодов (от 0 до 127), а для второй половины таблицы ASCII используется альтернативная кодировка ГОСТ. В Windows же используется стандарт ANSII, в первой половине совпадающий с ASCII, а во второй половине отличающийся от российского стандарта.