- •Предисловие
- •Введение
- •Введение в программирование
- •1.1. Предисловие к курсу
- •1.2. Идеология языка
- •1.3. Обзор среды Microsoft Developer Studio
- •1.4. Жизненный цикл программного обеспечения
- •1.5. Общая структура программы
- •1.6. Директивы препроцессора
- •1.7. Построение исполняемого файла
- •1.8. Строительные блоки программы
- •Контрольные вопросы
- •Типы данных. Переменные. Массивы. Операции и Указатели
- •Стандартные типы и размеры данных
- •2.1.1. Объявление переменных
- •Управляющие символьные константы
- •2.2. Объявление указателя
- •2.2.1. Операции разыменования и взятия адреса
- •2.2.2. Указатели на указатели
- •2.2.3. Арифметические операции с указателями
- •2.3. Массивы
- •2.3.1. Инициализация массивов
- •2.3.2 Динамические массивы
- •2.3.3. Методы доступа к элементам массивов
- •2.3.4. Массивы указателей
- •2.4. Строки
- •2.5. Операции
- •2.5.1. Арифметические операции
- •Арифметические операции
- •2.5.2 Операции сравнения и логические операции
- •Операции сравнения и логические операции
- •2.5.3. Побитовые операции
- •Побитовые операции
- •Контрольные вопросы
- •3.1. Базовые операторы
- •3.1.1. Оператор выражение
- •3.2.2. Оператор switch
- •3.3.4. Оператор goto
- •3.4. Операторы цикла
- •3.4.1. Оператор for
- •3.4.2. Оператор while
- •3.4.3. Оператор do..While
- •Контрольные вопросы
- •Стандартный ввод/вывод. Работа с файлами.
- •4.1. Роль стандартного ввода/вывода
- •4.1.1. Основные функции стандартного ввода/вывода
- •4.2. Понятие файла
- •4.2.1. Строение файлов
- •4.2.2. Порядок работы с файлом
- •4.2.3. Обзор библиотечных функций с для работы с файлами
- •4.3. Программные конструкции при работе с файлами
- •4.3.1. Открытие/закрытие файла
- •4.3.2. Цикл посимвольного чтения содержимого файла
- •4.3.3. Цикл построчного чтения содержимого файла
- •Контрольные вопросы
- •Функция. Пользовательские типы данных.
- •5.1. Понятие функции
- •5.1.1. Определение функции
- •5.1.2. Формальные параметры
- •5.1.3. Тип возвращаемого значения
- •5.1.4. Тело функции
- •5.1.5. Фактические параметры
- •5.1.6. Рекурсивные вызовы
- •5.1.7. Передача параметров
- •5.1.8. Библиотеки стандартных функций
- •5.2. Пользовательские типы данных.
- •5.2.1. Ключевое слово typedef
- •5.2.2. Перечислимый тип данных
- •5.2.3. Понятие структуры
- •5.2.4. Указатели на структурный объект
- •Контрольные вопросы
- •Работа с динамической памятью. Динамические структуры данных
- •6.1. Работа с динамической памятью
- •6.1.1. Статическое и динамическое распределение памяти
- •6.1.2. Основные принципы динамического распределения
- •6.1.3. Способы работы с динамической памятью
- •6.2. Динамические структуры данных
- •6.2.1. Стек
- •6.2.2.Линейный список
- •Контрольные вопросы
- •Объектно-ориентированное программирование
- •7.1. Критерии качества декомпозиции проекта
- •7.2. Новые концепции программирования
- •7.3. Достоинства ооп
- •7.4. Объекты и классы в ооп
- •7.4.1. Определение класса
- •7.4.2. Использование класса
- •7.4.3. Вложенные классы
- •Контрольные вопросы
- •Конструкторы и Перегрузка операций.
- •8.1. Перегрузка операций
- •8.1.1. Перегрузка операций внешними функциями
- •8.1.2. Перегрузка операций методами класса
- •8.2. Конструкторы и деструктор
- •8.2.1. Конструкторы и параметры
- •Контрольные вопросы
- •9.1. Простое открытое наследование
- •9.1.1 Конструкторы и деструкторы при наследовании
- •9.1.2. Поля и методы при наследовании
- •9.1.3. Вложенные классы и наследование
- •9.1.4. Закрытое наследование
- •9.1.5. Виртуальные функции
- •9.1.6. Чистые виртуальные функции и абстрактные классы
- •9.3. Основы программирования под Windows
- •9.3.1. Типы данных в Windows
- •9.4. Cреда Microsoft Developer Studio
- •9.4.1. Библиотека mfc
- •9.4.2. Архитектура приложения
- •9.4.3. Каркас приложения
- •9.4.4. Проект приложения
- •Контрольные вопросы
- •Заключение
- •Список Литературы
3.1.1. Оператор выражение
Выражение – это последовательность операндов, операций и символов – разделителей.
Любое выражение, которое заканчивается точкой с запятой, является оператором. Выполнение оператора выражение заключается в вычислении выражения.
Примеры:
++ i;
Этот оператор представляет выражение, которое увеличивает значение переменной i на единицу.
a=cos(b*5);
Этот оператор представляет выражение, включающее в себя операции присваивания, умножения и вызова функции.
fun(x,y);
Этот оператор представляет выражение, состоящее из вызова функции.
3.1.2. Пустой оператор
Пустой оператор состоит только из точки с запятой ";". При выполнении этого оператора ничего не происходит.
3.1.3. Составной оператор
Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки { }. В конце составного оператора точка с запятой не ставится. Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.
3.2. Условные операторы
3.2.1. Оператор if
Формат оператора следующий:
if (выражение) оператор 1;
else оператор 2;
Выполнение оператора if начинается с вычисления выражения. Далее выполнение осуществляется по следующей схеме:
- если выражение истинно (т.е. отлично от 0), то выполняется оператор 1;
- если выражение ложно (т.е. равно 0), то выполняется оператор 2;
- если выражение ложно и отсутствует оператор 2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
Следующий фрагмент иллюстрирует использование оператора if:
# include <iostream.h>
void main()
{
float a, b, c;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
if (a= =0)
{
x=-c/b;
cout<<"otvet:= "<<x<<"\n";
}
else
if (b==0)
if (c<0)
{
x1=sqrt(-c/a);
x2=-sqrt(-c/a);
cout<<"otvet x1:= "<<x1<<"\n";
cout<<"otvet x2:= "<<x2<<"\n";
}
else
{
cout<<"net reshenia"<<"\n";
}
}
Вложенным называется оператор if, который находится внутри другого оператора if или else. Вложенные операторы if встречаются довольно часто. Во вложенном условном операторе раздел else всегда связан с ближайшим оператором if, находящимся с ним в одном блоке и не связан с другим оператором else. Формат оператора следующий:
if (i)
{
if(j) оператор 1;
if(k) оператор2; /* данный if */
else оператор3; /* связан с данным оператором else */
}
else оператор4; /* связан с оператором if (i) */
Последний раздел else связан не с оператором if(j), который находится в другом блоке, а с оператором if (i). Внутренний раздел else связан с оператором if(k), потому что этот оператор if является ближайшим.
3.2.2. Оператор switch
Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:
switch (выражение)
{
[объявление];
:
[ case константное-выражение1]: [список-операторов1];
[ case константное-выражение2]: [список-операторов2];
:
[ default: [список операторов]];
}
Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимым в языке C/C++, значение которого должно быть целым. Так как константное выражение вычисляется во время трансляции, оно не может содержать переменные или вызовы функций. Обычно в качестве константного выражения используются целые или символьные константы.
Все константные выражения в операторе switch должны быть уникальны. Кроме операторов, помеченных ключевым словом case, может быть, но обязательно один, фрагмент, помеченный ключевым словом default. Список операторов может быть пустым либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки. Схема выполнения оператора switch следующая:
- вычисляется выражение в круглых скобках;
- вычисленные значения последовательно сравниваются с константными выражениями, следующими за ключевыми словами case;
- если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
- если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.
Для того, чтобы выполнить одни и те же действия для различных значений выражения, можно пометить один и тот же оператор несколькими ключевыми словами case. Следующий фрагмент иллюстрирует использование оператора switch:
void main()
{
char k;
int key;
do
{
cout <<"Make your select, please!"\n";
cin >> k;
switch (k)
{
case '1': array ();key=1;break;
case '2': kvadrat ();key=1;break;
default: key=0;
}
}
while(key= =1);
}
Операторы switch могут быть вложены друг в друга, даже если константы разделов case внешнего и внутреннего операторов switch совпадают.
3.3. Операторы перехода
В языке С/С++ предусмотрены четыре оператора безусловного перехода: return, goto, break, continue. Операторы return и goto можно применять в любом месте программы, в то время как операторы break и continue связаны с операторами циклов. Кроме того, break можно применять внутри оператора switch.
3.3.1. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным. Фрагмент, иллюстрирующий использование оператора break, представлен в предыдущем примере.
3.3.2. Оператор continue
Оператор continue, как и оператор break, используется только внутри операторов цикла, но в отличие от него выполнение программы продолжается не с оператора, следующего за прерванным оператором, а с начала прерванного оператора. Оператор continue, как и оператор break, прерывает самый внутренний из объемлющих его циклов.
3.3.3. Оператор return
Оператор return завершает выполнение функции, в которой он задан, и возвращает управление в вызывающую функцию, в точку, непосредственно следующую за вызовом.
Функция main передает управление операционной системе.
Формат оператора:
return (выражение);
Значение выражения, если оно задано, возвращается в вызывающую функцию в качестве значения вызываемой функции. Если выражение опущено, то возвращаемое значение не определено. Выражение может быть заключено в круглые скобки, хотя их наличие не обязательно.
Если в какой-либо функции отсутствует оператор return, то передача управления в вызывающую функцию происходит после выполнения последнего оператора вызываемой функции. При этом возвращаемое значение не определено. Если функция не должна иметь возвращаемого значения, то ее нужно объявлять с типом void. Таким образом, использование оператора return необходимо либо для немедленного выхода из функции, либо для передачи возвращаемого значения. Пример:
int sum (int a, int b)
{
return (a+b);
}
Функция sum имеет два формальных параметра a и b типа int и возвращает значение типа int, о чем говорит описатель, стоящий перед именем функции. Возвращаемое оператором return значение равно сумме фактических параметров.