- •Лекция 1. Знакомимся с языком С++
- •1.1. Первая программа на С++
- •1.2. Неформальное введение в С++
- •1.3. Средства разработки программ в ОС Linux
- •1.3.1. Использование компилятора командной строки для создания консольных приложений
- •1.3.2. Создание консольных приложений в среде Anjuta
- •Лекция 2. Общие сведения о языке С++
- •2.1. Алфавит языка
- •2.2. Данные в языке С++
- •2.2.1. Типы данных
- •2.2.2. Символьный тип
- •2.2.3. Целочисленный тип
- •2.2.4. Вещественный тип
- •2.2.5. Логический тип
- •2.2.6. Тип void
- •2.3. Переменные в языке С++
- •2.4. Константы в языке С++
- •2.5. Операции и выражения
- •2.5.1. Операции присваивания
- •2.5.2. Арифметические операции
- •2.5.3. Логические операции
- •2.5.4. Операции отношения
- •2.5.5. Условная операция
- •2.5.6. Операция преобразования типа
- •2.5.7. Операция определения размера
- •2.6. Стандартные функции
- •2.7. Структура программы
- •2.8. Ввод и вывод данных
- •2.8.2. Объектно-ориентированные средства ввода-вывода.
- •Лекция 3. Операторы управления
- •3.1. Условный оператор
- •3.2. Оператор варианта
- •3.3. Операторы цикла
- •3.3.1. Оператор цикла с предусловием
- •3.3.2. Оператор цикла с постусловием
- •3.3.3. Оператор цикла с параметром
- •3.3.4. Операторы передачи управления
- •3.4. Решение задач с использованием циклов
- •Лекция №4. Использование функций при программировании на С/С++
- •4.1. Общие сведения о функциях
- •4.3. Рекурсивные функции в С/С++
- •4.5. Перегрузка и шаблоны функций
- •Лекция 5. Обработка массивов в языке Си++
- •5.1. Ввод элементов массива
- •5.3.1 Алгоритм вычисления суммы элементов массива
- •5.3.2 Алгоритм вычисления произведения элементов массива
- •5.3.3. Поиск максимального элемента и его номера
- •5.3.4. Алгоритм удаления элемента из массива
- •5.3.5. Упорядочение элементов массива
- •5.3.6. Запись положительных элементов массива A в массив B
- •5.3.7. Вставка
- •5.4.2. Операции * и & при работе с указателями
- •5.4.4. Арифметические операции над адресами
- •5.4.5. Использование адресов и указателей при работе с массивами. Динамические массивы.
- •5.5. Примеры программ
- •Лекция 6. ОБРАБОТКА МАТРИЦ В С++
- •6.1. Блок-схемы основных алгоритмов обработки матриц
- •6.2.ДИНАМИЧЕСКИЕ МАТРИЦЫ
- •Лекция 7. Решение задач линейной алгебры с использованием динамических матриц и функций
- •7.1. Решение систем линейных алгебраических уравнений методом Гаусса
- •7.2.Вычисление обратной матрицы методом Гаусса
- •7.3. Вычисление определителя методом Гаусса
- •Лекция 8.Организация ввода-вывода в C++
- •8.1. Форматированный ввод-вывод в C++
- •8.1.1. Использование флагов форматного ввода-вывода
- •8.1.2. Использование флагов форматного ввода-вывода
- •8.2. Операции с файлами в С++
- •8.2.1. Операции с текстовыми файлами
- •Работа с текстовыми файлами с помощью файловых указателей
- •Работа с текстовыми файлами с помощью файловых потоков
- •Запись информации в текстовый файл
- •Чтение информации из текстового файла
- •8.2.2. Обработка двоичных файлов
- •Лекция 9. Строки и структуры в С++
- •9.1. Строки с С++
- •Динамические структуры
- •10.1. Общие сведения о классах
- •10.2. Открытые и закрытые члены класса
- •10.3. Использование конструкторов
- •Также как и другие типы, классы могут объединяться в массивы.
С их помощью можно выполнять ввод-вывод данных, работать с математическими функциями, преобразовывать данные, распределять память и многое другое. Например,
описание стандартных математических функций находится в заголовочном файле math.h. Общую структуру программы на языке С++ можно записать следующим образом:
директивы процессора
описание глобальных переменных тип_результата main(параметры)
{
операторы главной функции
}
тип_результата имя1(параметры1)
{
операторы1;
}
тип_результата имя2(параметры2)
{
операторы2;
}
...................................................
тип_результата имяN(параметрыN)
{
операторыN;
}
2.8. Ввод и вывод данных
Ввод-вывод данных в языке С++ осуществляется либо с помощью функций ввода-вывода в стиле С, либо с использованием библиотеки классов С++. Преимущество объектов С++ в
том, что они легче в использовании, особенно если ввод-вывод достаточно простой. Функции ввода-вывода унаследованные от С более громоздкие, но подходят для задач с форматированным выводом данных.
2.8.1. Функции вводавывода
Функция
printf(строка форматов, список выводимых переменных)
выполняет форматированный вывод переменных, указанных в списке, в соответствии со строкой форматов.
Функция
scanf(строка форматов, список адресов вводимых переменных)
выполняет ввод переменных, адреса которых указанны в списке, в соответствии со строкой форматов.
Строка форматов содержит символы, которые будут выводиться на экран или запрашиваться с клавиатуры и так называемые спецификации. Спецификации это строки, которые
начинаются символом % и выполняют управление форматированием:
% флаг ширина . точность модификатор тип
Параметры флаг, ширина, точность и модификатор в спецификациях могут отсутствовать. Значения параметров спецификаций приведены в табл. 2.7.
|
Таблица 2.7. Символы управления |
||
Параметр |
Назначение |
|
|
|
Флаги |
|
|
-Выравнивание числа влево. Правая сторона дополняется пробелами. По умолчанию выравнивание вправо.
Параметр |
Назначение |
+Перед числом выводится знак «+» или «-»
Пробел |
Перед положительным числом выводится пробел, |
|
перед отрицательным «-» |
#Выводится код системы счисления: 0 - перед восьмеричным числом, 0х (0Х) перед шестнадцатеричным числом.
Ширина
nШирина поля вывода. Если n позиций недостаточно, то поле вывода расширяется до минимально необходимого. Незаполненные позиции заполняются пробелами.
0n |
То же, что и n, но незаполненные позиции |
|
заполняются нулями. |
|
Точность |
ничего |
Точность по умолчанию |
nДля типов e, E, f выводить n знаков после десятичной точки
|
|
|
|
Модификатор |
|
h |
Для d, i, o, u, x, X тип short int. |
|
l |
Для d, i, o, u, x, X тип long int. |
|
|
Тип |
|
сПри вводе символьный тип char, при выводе один байт.
|
|
|
|
|
|
|
d |
Десятичное int со знаком. |
|
|
|
|
|
i |
Десятичное int со знаком. |
|
|
|
|
|
o |
Восьмеричное int unsigned. |
|
|
|
|
|
u |
Десятичное int unsigned. |
|
|
|
|
|
x, X |
Шестнадцатеричное |
int |
unsigned, |
при |
х |
|
|
используются символы a-f, при Х - A-F. |
|
|
|
||
f |
Значение со знаком вида [-]dddd.dddd. |
|
|
|
||
e |
Значение со знаком вида [-]d.dddde[+|-]ddd. |
|
|
|
||
E |
Значение со знаком вида [-]d.ddddE[+|-]ddd. |
|
|
|
gЗначение со знаком типа e или f в зависимости от значения и точности.
GЗначение со знаком типа e или F в зависимости от значения и точности.
s |
Строка символов. |
Кроме того, строка форматов может содержать некоторые специальные символы, которые приведены в табл. 2.8.
Символ |
Таблица 2.8. Специальные символы |
Назначение |
|
\b |
Сдвиг текущей позиции влево. |
\n |
Перевод строки. |
\r |
Перевод в начало строки, не переходя на новую строку. |
\t |
Горизонтальная табуляция. |
\' |
Символ одинарной кавычки. |
\'' |
Символ двойной кавычки. |
\? |
Символ ?. |
Первой строкой программы, в которой будут применяться функции ввода-вывода языка С, должна быть директива #include <stdio.h>. Заголовочный файл stdio.h содержит описание
функций ввода-вывода.
Рассмотрим работу функций на примере следующей задачи.
ЗАДАЧА 2.1. Зная a, b, c длины сторон треугольника ,вычислить площадь Sи периметр P этого треугольника.
Входные данные: a, b, c. Выходные данные: S, P.
Для вычисления площади применим формулу Герона: S= r r−a r−b r−c , где r -
полупериметр.
Далее приведены две программы для решения данной задачи и результаты их работы. Сравните работу функций printf и scanf в этих программах.
//ЗАДАЧА 2.1. Вариант первый
#include <stdio.h> |
|
#include <math.h> |
|
int main() |
|
{ |
//Описание переменных. |
float a,b,c,S,r; |
//В операторах scanf для |
вычисления адреса |
//переменной применяется |
операция &. |
printf("a="); //Вывод на |
экран символов a=. |
scanf("%f",&a); |
//Запись в |
переменную а |
|
printf("b="); |
//значениия введенного с клавиатуры. |
||
//Вывод на |
экран символов b=. |
||
scanf("%f",&b); |
//Запись в |
переменную b значениия |
|
printf("c="); |
//введенного с клавиатуры. |
||
//Вывод на |
экран символов c= |
||
scanf("%f",&c); |
//Запись в |
переменную c значениия |
|
r=(a+b+c)/2; |
//введенного с клавиатуры. |
||
//Вычисление полупериметра. |
|||
S=sqrt(r*(r-a)*(r-b)*(r-c)); |
//Вычисление площади треугольника. |
//Вывод символов S=, значения S и символа табуляции \t. //Спецификация %5.2f означает, что будет выведено вещественное число, //под которое отводится 5 знаков, причем 2 из них после точки. printf("S=%5.2f \t",S);
//Вывод символов p=, значения выражения 2*r //и символа окончания строки \n. printf("p=%5.2f \n",2*r);
//Оператор printf("S=%5.2f \t p=%5.2f \n",S,2*r); //выдаст тот же результат.
return 0;}
//ЗАДАЧА 2.1. Вариант второй |
|
|
#include <stdio.h> |
|
|
#include <math.h> |
|
|
int main() |
|
|
{ |
|
|
float a,b,c,S,r; |
//Вывод на экран строки символов. |
|
printf("Vvedite a, b, c \n"); |
||
scanf("%f%f%f",&a,&b,&c); |
//Ввод значений. |
|
r=(a+b+c)/2; |
|
|
S=sqrt(r*(r-a)*(r-b)*(r-c)); |
|
//Вывод на экран результатов. |
printf("S=%5.2f \t p=%5.2f \n",S,2*r); |
||
return 0; |
|
|
} |
|
|
2.8.2. Объектно-ориентированные средства ввода-вывода.
Описание объектов для управления вводом-выводом содержится в заголовочном файле iostream.h. При подключении этого файла с помощью директивы #include <iostream.h> в
программе автоматически создаются объекты-потоки4 cin для ввода с клавиатуры и cout для вывода на экран, а так же операции помещения в поток << и чтения из потока >>.
Итак, с помощью объекта cin и операции >> можно присвоить значение любой переменной. Например, если переменная i описана как целочисленная, то команда cin>> i; означает, что в переменную i будет записано некое целое число, введенное с клавиатуры. Если нужно ввести несколько переменных, следует написать cin>>x>>y>>z;.
Объект cout и операция << позволяют вывести на экран значение любой переменной или текст. Текст необходимо заключать в двойные кавычки, кроме того, допустимо применение специальных символов \t и \n. Запись cout<<i; означает вывод на экран значения переменной i. А команда cout<<x<<''\t''<<y; выведет на экран значения переменных x и y разделенные символом табуляции.
Рассмотрим следующую задачу.
ЗАДАЧА 2.2. Известны плотность ρ, высота h и радиус основания R цилиндрического
слитка, полученного в металлургической лаборатории. Найти объем V, массу m и площадь S основания слитка.
Входные данные: ρ, h, R. Выходные данные: S, V, m.
Учитывая, что S=2πR, V=πR2h и m=ρV составим текст программы:
#include "stdafx.h" |
|
#include <iostream> |
|
using namespace std; |
//Определение константы. |
#define pi 3.14159 |
|
int main() |
//Описание переменных. |
{double R,h,r,S,V,m; |
|
cout<<"R="; |
//Вывод на экран символов R=. |
cin>>R; |
//Ввод значения переменной R. |
cout<<"h="; |
//Вывод на экран символов h=. |
cin>>h; |
//Ввод значения переменной h. |
cout<<"r="; |
//Вывод на экран символов r=. |
cin>>r; |
//Ввод значения переменной r. |
S=2*pi*R; |
//Расчет площади. |
V=pi*R*R*h; |
//Вычисление объема. |
m=r*V; |
//Определение массы. |
cout<<"S="<<S; //Вывод на экран символов S= и значения переменной S.
cout<<"\n V="<<V; |
//Вывод на |
экран с |
новой |
строки V= |
и значения |
V. |
cout<<"\n m="<<m; |
//Вывод на |
экран с |
новой |
строки m= |
и значения |
m. |
return 0; |
|
|
|
|
|
|
} |
|
|
|
|
|
|
4 Поток - виртуальный канал связи, создаваемый в программе для передачи данных.