Краткие теоретические сведения. Краткие теоретические сведения
СОДЕРЖАНИЕ
ВВЕДЕНИЕ.. 9
Лабораторная работа № 1. 10
Краткие теоретические сведения. 10
Структура программы. 10
Константы и переменные. 12
Операции. 13
Выражения. 15
Ввод и вывод. 16
Функция вывода. 16
Функция ввода. 16
Ввод и вывод в Си++. 17
Постановка задачи. 17
Методические указания. 21
Содержание отчета. 21
Контрольные вопросы.. 22
Лабораторная работа № 2. 23
Краткие теоретические сведения. 23
Цикл с предусловием.. 25
Цикл с постусловием.. 26
Цикл с параметром.. 26
Операторы передачи управления. 27
Постановка задачи. 28
Варианты.. 29
Содержание отчета. 42
Пример выполнения задания. 42
Условие задания. 42
Алгоритм решения задачи в виде блок-схемы.. 43
Алгоритм решения задачи в виде псевдокода. 44
Программа решения задачи. 44
Результаты работы программы.. 44
Контрольные вопросы.. 45
Лабораторная работа № 3. 46
Краткие теоретические сведения. 46
Постановка задачи. 48
Варианты.. 48
Методические указания. 53
Вычисление функции. 53
Содержание отчета. 53
Лабораторная работа № 4. 54
Краткие теоретические сведения. 54
Определение массива в Си/Си++. 54
Перебор массива по одному элементу. 55
Формирование псевдодинамических массивов. 55
Использование датчика случайных чисел для формирования массива. 56
Перебор массива по два элемента. 57
Варианты.. 57
Методические указания. 62
Содержание отчета. 62
Контрольные вопросы.. 62
Пример выполнения лабораторной работы.. 63
Вариант. 63
Выполнение работы.. 63
Дополнительные задания. 65
Одномерные массивы.. 65
Двумерные массивы.. 70
Одномерные и двумерные массивы.. 74
Лабораторная работа № 5. 81
Краткие теоретические сведения. 81
Определение количества элементов массива в программе. 83
Постановка задачи. 83
Варианты.. 83
Содержание отчета. 87
Контрольные вопросы. 88
Лабораторная работа № 6. 89
Краткие теоретические сведения. 89
Формирование динамических массивов с использованием операций new и delete. 90
Постановка задачи. 92
Порядок выполнения работы.. 92
Варианты.. 92
Содержание отчета. 95
Контрольные вопросы. 96
Лабораторная работа № 7. 97
Краткие теоретические сведения. 97
Постановка задачи. 101
Варианты.. 102
Содержание отчета. 104
Контрольные вопросы.. 104
Лабораторная работа № 8. 105
Краткое теоритическое введение. 105
Инициализация структур. 106
Работа со структурами. 107
Присваивание структур. 107
Доступ к элементам структур. 107
Указатели на структуры.. 108
Постановка задачи. 108
Варианты.. 108
Содержание отчета. 116
Контрольные вопросы. 116
Самостоятельная работа № 1. 118
Краткое теоретическое введение. 118
Постановка задачи. 120
Варианты заданий. 120
Содержание отчета. 121
Пример выполнения задания. 121
Постановка задачи. 122
Распечатка исходных данных и результатов выполнения программы. 123
Лабораторная работа № 9. 124
Краткое теоретическое введение. 124
Постановка задачи. 126
Варианты.. 126
Порядок выполнения работы. 130
Содержание отчета. 130
Контрольные вопросы.. 130
Лабораторная работа № 10. 131
Краткие теоретические сведения. 131
Постановка задачи. 132
Варианты.. 132
Содержание отчета. 137
Контрольные вопросы.. 137
Лабораторная работа № 11. 138
Краткие теоретические сведения. 138
Понятие класса. 138
Указатель this. 142
Конструктор. 143
Деструктор. 146
Указатели на компоненты-функции. 147
Порядок выполнения работы. 148
Методические указания. 148
Содержание отчета. 150
Контрольные вопросы.. 150
Варианты.. 151
Лабораторная работа № 12. 156
Краткие теоретические сведения. 156
Бинарные и унарные Операции. 159
Предопределенные значения операций. 160
Операции и определяемые пользователем типы.. 161
Определяемое преобразование типа. 162
Конструкторы.. 163
Перегрузка операций new и delete. 164
Перегрузка операции приведения типа. 165
Перегрузка операции вызова функции. 165
Перегрузка операции индексирования. 166
Порядок выполнения работы. 166
Варианты задания. 166
Методические указания. 169
Содержание отчета. 170
Контрольные вопросы.. 170
Лабораторная работа № 13. 172
Краткие теоретические сведения. 172
Указатель this. 173
Наследование. 174
Конструкторы и деструкторы производных классов. 175
Виртуальные функции. 175
Абстрактные классы.. 177
Порядок выполнения работы. 179
Варианты заданий. 179
Методические указания. 180
Содержание отчета. 180
Контрольные вопросы. 181
Лабораторная работа № 14. 182
Краткие теоретические сведения. 182
Основные свойства параметров шаблона функции. 182
Шаблон класса. 183
Основные свойства шаблонов классов. 183
Компонентные функции. 185
Порядок выполнения работы. 185
Варианты заданий. 186
Содержание отчета. 187
Контрольные вопросы.. 188
Лабораторная работа № 15. 189
Краткие теоретические сведения. 189
Пример шаблона потокового класса. 190
Потоковые классы в С++. 190
Схема иерархии. 190
Базовые потоки ввода-вывода. 191
Форматирование. 193
Манипуляторы.. 194
Определение пользовательских манипуляторов. 195
Файловый ввод-вывод. 196
Порядок выполнения работы. 198
Методические указания. 198
Содержание отчета. 199
Пояснения к программам. 200
Контрольные вопросы. 200
Литература. 201
ВВЕДЕНИЕ
Настоящее пособие предназначено для изучения основ алгоритмизации и программирования на стандартном языке Си и Си++. Ориентация сделана как на изложение синтаксиса и семантики конструкций языка, так и на их практическое использование при решении типовых задач программирования при проведении лабораторных и практических занятий.
Лабораторная работа № 1
"ПРОСТЕЙШИЕ ВЫЧИСЛЕНИЯ"
Цель:Знакомство со средой программирования, создание, отладка и выполнение простой программы, содержащей ввод/вывод информации и простейшие вычисления.
Краткие теоретические сведения
Язык Си создан в 1972 г. Деннисом Ритчи при разработке ОС Unix. Он проектировался как инструмент системного программирования с ориентацией на разработку хорошо структурированных программ. Таким образом он сочетает в себе, с одной стороны, средства языка программирования высокого уровня: описание типов данных, операторы for, while, if и т. д. , а , с другой стороны, содержит средства языка типа Ассемблер : регистровые переменные, адресную арифметику, возможность работы с полями бит и т. д.
Структура программы.
Программа на языке Си имеет следующую структуру:
#директивы препроцессора
. . . . . . . . .
#директивы препроцессора
функция а ( )
операторы
функция в ( )
операторы
void main ( ) //функция, с которой начинается выполнение программы
операторы
описания
присваивания
функция
пустой оператор
составной
выбора
циклов
перехода
Директивы препроцессора - управляют преобразованием текста программы до ее компиляции. Исходная программа, подготовленная на языке Си в виде текстового файла проходит 3 этапа обработки:
препроцессорное преобразование текста;
компиляция;
компоновка (редактирование связей или сборка).
После этих 3 этапов формируется исполняемый машинный код программы.
Задача препроцессора - преобразование текста программы до ее компиляции. Правила препроцессорной обработки определяет программист с помощью директив препроцессора. Директива начинается с #. Например,
#define - указывает правила замены в тексте.
#define ZERO 0.0
Означает , что каждое использование в программе имени ZERO будет заменяться на 0.0.
#include< имя заголовочного файла> - предназначена для включения в текст программы текста из каталога «Заголовочных файлов», поставляемых вместе со стандартными библиотеками. Каждая библиотечная функция Си имеет соответствующее описание в одном из заголовочных файлов. Список заголовочных файлов определен стандартом языка. Употребление директивы include не подключает соответствующую стандартную библиотеку, а только позволяют вставить в текст программы описания из указанного заголовочного файла. Подключение кодов библиотеки осуществляется на этапе компоновки, т. е. после компиляции. Хотя в заголовочных файлах содержатся все описания стандартных функций, в код программы включаются только те функции, которые используются в программе.
После выполнения препроцессорной обработки в тексте программы не остается ни одной препроцессорной директивы. Программа представляет собой набор описаний и определений, и состоит из набора функций. Среди этих функций всегда должна быть функция с именем main. Без нее программа не может быть выполнена. Перед именем функции помещаются сведения о типе возвращаемого функцией значения ( тип результата). Если функция ничего не возвращает, то указывается тип void: void main ( ). Каждая функция, в том числе и main должна иметь набор параметров, он может быть пустым, тогда в скобках указывается (void).
За заголовком функции размещается тело функции. Тело функции - это последовательность определений, описаний и исполняемых операторов, заключенных в фигурные скобки. Каждое определение, описание или оператор заканчивается точкой с запятой.
Определения - вводят объекты (объект - это именованная область памяти, частный случай объекта - переменная), необходимые для представления в программе обрабатываемых данных. Примером являются
int y = 10 ; //именованная константа
float x ; //переменная
Описания - уведомляют компилятор о свойствах и именах объектов и функций, описанных в других частях программы.
Операторы - определяют действия программы на каждом шаге ее исполнения.
Константы и переменные
Константа - это значение, которое не может быть изменено. Синтаксис языка определяет 5 типов констант:
символы;
константы перечисляемого типа;
вещественные числа;
целые числа;
нулевой указатель (NULL).
Переменные можно изменять. При задании значения переменной в соответствующую ей область памяти помещается код этого значения. Доступ к значению возможен через имя переменной, а доступ к участку памяти - по его адресу. Каждая переменная перед использованием в программе должна быть определена, т. е. ей должна быть выделена память. Размер участка памяти, выделяемой для переменной и интерпретация содержимого зависят от типа, указанного в определении переменной. Простейшая форма определения переменных:
тип список_имен_переменных;
В соответствии с синтаксисом языка переменные автоматической памяти после определения по умолчанию имеют неопределенные значения. Переменным можно присваивать начальные значения, явно указывая их в определениях:
тип имя_переменной = начальное_значение;
Этот прием называется инициализацией.
Примеры:
float pi = 3.14 , cc=1.3456;
unsigned int year = 1999;
Операции
Унарные:
& | получение адреса операнда |
* | обращение по адресу (разыменование) |
- | унарный минус, меняет знак арифметического операнда |
~ | поразрядное инвертирование внутреннего двоичного кода (побитовое отрицание) |
! | логическое отрицание (НЕ). В качестве логических значений используется 0 - ложь и не 0 - истина, отрицанием 0 будет 1, отрицанием любого ненулевого числа будет 0. |
++ | увеличение на единицу: префиксная операция - увеличивает операнд до его использования, постфиксная операция увеличивает операнд после его использования. |
- - | уменьшение на единицу: префиксная операция - уменьшает операнд до его использования, постфиксная операция уменьшает операнд после его использования. |
sizeof | вычисление размера (в байтах) для объекта того типа, который имеет операнд |
Бинарные операции.
Аддитивные:
+ | бинарный плюс (сложение арифметических операндов) |
- | бинарный минус (вычитание арифметических операндов) |
Мультипликативные:
* | умножение операндов арифметического типа |
/ | деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление) |
% | получение остатка от деления целочисленных операндов |
Операции сдвига (определены только для целочисленных операндов).
Формат выражения с операцией сдвига:
операнд_левый операция_сдвига операнд_правый
<< | сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого операнда |
>> | сдвиг вправо битового представления значения правого целочисленного операнда на количество разрядов, равное значению правого операнда |
Поразрядные операции:
& | поразрядная конъюнкция (И) битовых представлений значений целочисленных операндов |
| | поразрядная дизъюнкция (ИЛИ) битовых представлений значений целочисленных операндов |
^ | поразрядное исключающее ИЛИ битовых представлений значений целочисленных операндов |
Операции сравнения:
< | меньше, чем |
> | больше, чем |
<= | меньше или равно |
>= | больше или равно |
== | равно |
!= | не равно |
Логические бинарные операции:
&& | конъюнкция (И) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(1) |
|| | дизъюнкция (ИЛИ) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(1) |
Условная операция.
В отличие от унарных и бинарных операций в ней используется три операнда.
Выражение1 ? Выражение2 : Выражение3;
Первым вычисляется значение выражения1. Если оно истинно, то вычисляется значение выражения2, которое становится результатом. Если при вычислении выражения1 получится 0, то в качестве результата берется значение выражения3.
Например:
x<0 ? -x : x ; //вычисляется абсолютное значение x.
Операция явного (преобразования) приведения типа.
Существует две формы: каноническая и функциональная:
(имя_типа) операнд
имя_типа (операнд)
Приоритеты операций.
Ранг | Операции |
( ) [ ] -> . | |
! ~ - ++ -- & * (тип) sizeof тип( ) | |
* / % (мультипликативные бинарные) | |
+ - (аддитивные бинарные) | |
<< >> (поразрядного сдвига) | |
< > <= >= (отношения) | |
== != (отношения) | |
& (поразрядная конъюнкция «И») | |
^ (поразрядное исключающее «ИЛИ») | |
| (поразрядная дизъюнкция «ИЛИ») | |
&& (конъюнкция «И») | |
|| (дизъюнкция «ИЛИ») | |
?: (условная операция) | |
= *= /= %= -= &= ^= |= <<= >>= (операция присваивания) | |
, (операция запятая) |
Выражения
Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение состоит из одного или нескольких операндов, символов операций и ограничителей, в качестве которых чаще всего выступают квадратные скобки. Если выражение формирует целое или вещественное число, то это арифметическое выражение. В арифметических выражениях допустимы операции: + - * / %.
Отношение - это пара арифметических выражений, объединенных знаком операции отношения. Логический тип в Си отсутствует, поэтому принято, что отношение имеет ненулевое значение, если оно истинно и 0, если оно ложно.
Ввод и вывод
Ввод и вывод в стандартном Си. Обмен данными с внешним миром программа на стандартном Си реализует с помощью библиотеки функций ввода-вывода
#include <stdoi.h>
Функция вывода
printf ( <форматная строка>,<список аргументов>);
<форматная строка> - строка символов, заключенных в кавычки, которая показывает, как должны быть напечатаны аргументы. Например:
printf ( “Значение числа Пи равно %f\n”, pi);
Форматная строка может содержать
символы печатаемые текстуально;
спецификации преобразования
управляющие символы.
Каждому аргументу соответствует своя спецификация преобразования:
%d - десятичное целое число;
%f - число с плавающей точкой;
%c - символ;
%s - строка.
\n - управляющий символ новая строка.
Функция ввода
scanf ( <форматная строка>,<список аргументов>);
В качестве аргументов используются указатели. Например:
scanf(“ %d%f ”, &x,&y);
Ввод и вывод в Си++
Используется библиотечный файл iostream.h, в котором определены стандартные потоки ввода данных от клавиатуры cin и вывода данных на экран дисплея cout, а также соответствующие операции
<< - операция записи данных в поток;
>> - операция чтения данных из потока.
Например:
#include <iostream.h>;
. . . . . . . . .
cout << “\nВведите количество элементов: ”;
cin >> n;
Постановка задачи
Задание 1.В соответствии с вариантом задания вычислить:
a) высоты треугольников по формулам:
где - периметр треугольника.
b) медианы треугольников по формулам
,
,
.
c)биссектрисы треугольников по формулам
,
,
.
Стороны треугольников и пункты задания приведены в таблице.
Таблица 1.
№ вар. | ||||||||
a | 14,65 | 9,61 | 8,35 | 5,05 | 12,1 | 9,04 | 11,2 | 5,2 |
b | 19,93 | 10,64 | 10,6 | 3,3 | 8,82 | 5,67 | 10,83 | 8,13 |
c | 12,86 | 9,7 | 8,65 | 5,73 | 10,21 | 6,12 | 9,31 | 7,71 |
Пункт зад. | a) | b) | c) | a) | b) | c) | a) | b) |
№ вар. | ||||||||
a | 7,54 | 2,25 | 0,267 | 0,05 | 7,38 | 31,43 | 2,57 | |
b | 8,49 | 2,99 | 0,173 | 0,04 | 6,43 | 24,93 | 2,31 | |
c | 7,2 | 3,51 | 0,098 | 0,07 | 5,89 | 19,7 | 2,006 | |
Пункт зад. | c) | a) | b) | c) | a) | b) | c) |
Задание 2.Вычислить значение функции y и z по формулам при различных вещественных типах данных (float и double). Параметр x вводится с клавиатуры. Вычисления следует выполнять с использованием промежуточных переменных. Сравнить и объяснить полученные результаты.
Вариант 1.
;
Вариант 2.
;
Вариант 3.
;
Вариант 4.
;
Вариант 5.
;
Вариант 6.
;
Вариант 7.
;
Вариант 8.
;
Вариант 9.
;
Вариант 10.
;
Вариант 11.
;
Вариант 12.
;
Вариант 13.
;
Вариант 14.
.
Вариант 15.
Методические указания
1. Для ввода и вывода данных использовать операции >> и << и стандартные потоки cin и cout.
2. Для вычисления степени можно использовать функцию pow(x,y), для вычисления квадратного корня функцию sqrt(x) из библиотечного файла math.h.
3. При выполнении задания необходимо использовать вспомогательные переменные для хранения промежуточных результатов.
Например: c=pow(a,3);d=3*a*a*b;e=3*a*b*b;f=pow(b,3);
Содержание отчета
1. Постановка задачи.
2. Программа решения задания1.
3. Результаты работы программы для данных типа float.
4. Результаты работы программы для данных типа double.
5. Объяснение результатов.
6. Программа решения задания 2.
7. Результаты работы программы.
8. Объяснение результатов.
Контрольные вопросы
9. Основные типы данных?
10. Ввод и вывод в С.
11. Ввод и вывод в С++.
12. Понятие приоритета операций.
13. Бинарные и унарные операции в С/С++.
14. Тернарные операции в С/С++.
15. Функция sizeof().
Лабораторная работа № 2
"ОСНОВНЫЕ ОПЕРАТОРЫ ЯЗЫКА С/С++”
Цель:Получение навыков в выборе и использовании операторов Си/Си++; знакомство с процессами выбора и итераций.