Лабораторный практикум
.pdfМинистерство образования и науки Российской Федерации
Национальный исследовательский университет «МИЭТ»
_____________________________________________________
Н.Ю. Соколова
Практикум по программированию на языке С++ в среде разработки программ
MS Visual Studio 2015
Часть 1
Утверждено редакционно-издательским советом университета
Москва 2017
3
Лабораторная работа № 1
Знакомство со средой разработки программ
MS Visual Studio 2015.
Программирование линейных алгоритмов
Цель работы: изучение возможности программирования линейных алгоритмов; получение практических навыков программирования линейных алгоритмов в среде MS Visual Studio 2015.
Теоретические сведения
Структура программы. Программа, написанная на языке С++, представляет собой набор программных блоков - функций. Обязательно наличие хотя бы одной функции, называемой основной, имеющей имя main. В общем виде программу на языке С++ можно представить из двух частей. В первой части программы содержатся директивы препроцессору (указания препроцессору), одна из которых представлена ниже. Использование директивы #include означает, что необходимо подключить заголовочный файл (header), в котором содержатся прототипы функций, применяемые в программе. В примере, рассмотренном ниже, заголовочный файл <iostream> содержит прототипы функций, обеспечивающие ввод и вывод данных из стандартного потока вводавывода. Вторая часть программы представляет собой основную функцию main. Перед именем main указывается тип возвращаемого функцией значения, в данном примере это 0. В круглых скобках могут быть указаны параметры командной строки (здесь функция не имеет параметров). Каждая программа или функция содержит набор данных и инструкций, которые выполняют определенные действия над этими данными. Все это вместе называется телом программы, которое заключается в фигурные скобки { }.
Например:
//Раздел директив препроцессору: #include <iostream>
int main( )// заголовок основной функции
4
{
// Тело программы
return 0;// возврат значения основной функции
}
Данные в языке С++. Программа, написанная на любом языке программирования, выполняет действия над данными. Данные в процессе выполнения программы могут не изменять своего значения, такие данные называют константами. Данные, которые меняют значения в процессе выполнения программы, называют переменными. Любые данные (константы, переменные) могут быть целого, вещественного, символьного, логического (булевского) и других типов. С понятием типа данных связан размер памяти, выделяемый для хранения значений переменных, диапазон принимаемых значений, а также набор операций, применяемых над данными. В табл.1 приведены некоторые стандартные типы данных.
|
|
|
Таблица 1 |
|
|
Стандартные типы данных |
|||
|
|
|
|
|
Тип |
Обозначение |
Раз- |
Диапазон значений |
|
|
в языке С++ |
мер, |
|
|
|
|
биты |
|
|
Целый |
int |
16 |
–32768...32767 |
|
long int |
32 |
–2147483648...2147483647 |
||
|
||||
Вещественный |
float |
32 |
3,4Е-38...3,4Е+38 |
|
double |
64 |
1,7Е-308...1,7Е +308 |
||
|
||||
Символьный |
char |
8 |
–127...127 или 0...255 |
|
wchar_t |
16 |
065535 |
||
|
||||
Логический |
bool |
- |
true или false |
|
Бестиповый |
void |
- |
- |
Используемые в программе имена называют идентификаторами. Имя - идентификатор представляет собой набор латинских символов, цифр и знака подчеркивания, причем первым символом имени должна быть латинская буква или знак подчеркивания «_». Например, имена r, gamma, v4_0 являются идентификаторами языка С++. Длина имени не ограничена.
Константы в языке С++ описываются с помощью ключевого слова const:
const тип идентификатор=значение или вычисляемое выражение;
5
Например:
const double pi=3.14;// константа вещественного типа const int n=5; // константа целого типа
Объявить переменную можно в любом месте программы:
тип идентификатор;
Например:
int a,gamma;
или
double s=0.0,f;
В последнем примере при объявлении переменных s присвоено начальное значение 0.0.
Ввод данных с клавиатуры. Ввод данных с клавиатуры осуществляется с помощью оператора потокового ввода:
сin>>переменная;
Знак >> указывает направление потока. В данном случае в переменную будет занесено значение, вводимое с клавиатуры. Например, cin>>gamma;
Прототип функции cin находится в заголовочном файле iostream, поэтому необходимо использовать директиву препроцессора #include <iostream>. Кроме того, если в среде разработки программ Visual Studio 2015 вы хотите использовать сокращенное имя cin, а не полное std::cin (в среде разработки программ Visual Studio 2015 необходимо использовать полное имя), то после директив препроцессору следует написать: using namespace std; (использование стандартного пространства имен).
Вывод данных. Вывести данные можно, используя оператор потокового вывода cout:
cout<< ”строка символов или переменная”;
Например:
cout<<”результат=”<<gamma<<endl;
6
Такая запись означает, что на экран будет выведена строка символов ”результат=”, далее - значение переменной gamma, и курсор перейдет на новую строку, поскольку используется оператор endl.
Как и для оператора cin, при использовании cout необходимо включить директиву препроцессору #include <iostream> и using namespace std;
Оператор присваивания. Как правило, линейный алгоритм представляет собой инструкции, обеспечивающие ввод данных, вычисление значений и вывод этих значений на экран. Для присваивания вычисляемых значений переменной служит оператор присваивания «=». Напри-
мер: gamma=3–4+a;
В данном примере сначала будет вычислено значение арифметического выражения 3–4+a, а затем полученный результат будет занесен в ячейку памяти, связанную с переменной gamma.
Для вычисления арифметических значений в языке С++ используются следующие операции.
Арифметическая операция |
Обозначение в языке С++ |
Сложение |
+ |
Вычитание |
– |
Умножение |
* |
Деление |
/ |
Вычисление остатка от деления од- |
% |
ного целого на другое |
|
Компилятор вычисляет выражение последовательно слева направо. Операции *, /, % имеют более высокий приоритет вычислений, чем операции + и – . Это означает, что сначала будут получены результаты операций умножения или деления, а затем найдена сумма и разность. Для изменения последовательности вычислений используются скобки
( ). Например, арифметическое выражение |
a 4 |
на языке С++ должно |
b 5 |
быть записано так: (a + 4)/(b – 5). Если бы не использовались скобки, т.е. если записать a + 4/b – 5, то сначала выполнится деление 4 на b, затем к а прибавится результат деления и после этого из полученной суммы отнимется 5, что соответствует следующему арифметическому вы-
ражению: a b4 5 , которое отличается от исходного.
7
Кроме арифметических операций, в записи выражений могут применяться стандартные математические функции языка С++. Для их использования необходимо применить директиву препроцессору #include <math.h>. Некоторые из математических функций приведены в табл.2. Вычисление математической функции имеет наивысший приоритет. Полный список приоритетов операций в языке С++ приведен в приложении 1.
Таблица 2
Математические функции языка С++
Математическая функция |
С++ |
|||
sin a |
sin(a) |
|||
cos a |
cos(a) |
|||
tg a |
tan(a) |
|||
arctg a |
atan(a) |
|||
ln a |
log(a) |
|||
ex |
exp(a) |
|||
xp |
pow(x, p) |
|||
|x| |
fabs(x) |
|||
abs(x) |
||||
|
|
|
||
|
|
|
sqrt(x) |
|
|
x |
|||
|
|
Программирование линейных алгоритмов. Все действия в ли-
нейном алгоритме выполняются последовательно одно за другим.
Примеры программирования линейных алгоритмов
Пример 1. Разработать программу вычисления площади круга и длины окружности радиусом R.
Алгоритм решения данной задачи представлен на рис.1.
Решение. Введем значение радиуса с клавиатуры, вычислим площадь круга S и длину окружности L. Полученные значения выведем на экран.
8
Пуск
Ввод R
S = πR2
L= 2 πR
S, L
Останов
Рис.1. Схема алгоритма нахождения длины окружности и площади круга
Приведем текст программы с комментариями (//):
1#include <iostream>
2#include <math.h>
3 |
using namespace std;// использование |
|
4 |
//пространства имен |
std для cout, //cin, |
5 |
endl |
|
6 |
const double Pi=3.14; |
// число пи |
7int main()
8{
9setlocale(LC_CTYPE,"Russian");
10 |
double |
R, |
// радиус |
11 |
S, |
|
// площадь |
12 |
L; |
|
// длина |
13// вывод на экран строки
14cout<<"Введите R>";
15cin>>R; // ввод значения радиуса
16// вычисление длины окружности
17L=2*Pi*R;
18// вычисление площади круга
19S=Pi*pow(R,2);
20// вывод результатов на экран
9
21cout<<"Длина окружности L="<<L<<"\nПлощадь
22круга S="<<S<<endl;
23return 0;
24}
По я сн е н ия к пр о гр ам м е . 1-я и 2-я строки - директивы препроцессору о необходимости подключения заголовочных файлов. В 6-й строке объявляется константа для числа π. 7-я строка - заголовок основной функции. 9-я строка - установка режима, чтобы при выводе данных на экран можно было использовать русские буквы.
Приведем другой вариант решения данной задачи:
#include <iostream> #include <math.h>
using namespace std; // использование
//пространства имен std для cout, cin, endl const double Pi=3.14; // число пи
int main()
{
setlocale(LC_CTYPE,"Russian");
double R; |
// радиус |
// вывод на экран строки |
|
cout<<"Введите R>"; |
|
cin>>R; |
// ввод значения радиуса |
double L=2*Pi*R;// вычисление длины окружности //вычисление площади круга
double S=Pi*pow(R,2);
// вывод результатов:
cout<<"Длина окружности L="<<L<<"\nПлощадь круга S="<<S<<endl;
return 0;
}
В данном варианте при объявлении переменных S и L вычисляются их значения по соответствующим формулам.
Пример 2. Написать программу для вычисления
|
|
|
|
|
y |
tg2 ln ab2 a2 sin2 e2x 5 . |
|
Текст программы: |
|
|
|
#include <iostream> |
|||
#include <math.h> |
|
|
|
using |
namespace std; |
int main()
10
{
setlocale(LC_CTYPE,"Russian"); double a,b,x,y; cout<<"a>";cin>>a; // Ввод а cout<<"b>";cin>>b; // Ввод b cout<<"x>";cin>>x; // Ввод x
y=sqrt((pow(tan(log(a*b*b)),2))+a*a*
pow(sin(exp(2*x+5)),2));
cout<<"y="<<y<<endl; return 0;
}
По я сн е н ия к пр о гр ам м е . В данной программе сначала вводятся с клавиатуры значения переменных a, b, x, после чего по заданной в условии примера формуле вычисляется значение переменной y и выводится на экран.
Логические операции и операции отношений. Для вычисления значений переменных логического (булевского) типа используются операции отношений и логические операции. Операции отношений представлены в табл.3.
|
Таблица 3 |
|
Операции отношений |
|
|
|
|
|
Операция отношения |
Обозначение |
|
|
в языке С++ |
|
Меньше чем |
< |
|
Меньше чем или равно |
<= |
|
Больше чем |
> |
|
Больше чем или равно |
>= |
|
Равно |
= = |
|
Не равно |
!= |
|
Следует обратить внимание, что операция отношения «равно» обозначается двумя знаками равенства. Если использовать один знак «=», то он будет обозначать операцию присваивания.
Логические операции представлены в табл.4.
11
|
|
|
|
|
Таблица 4 |
|
Логические операции |
|
|
||
|
|
|
|
||
|
Логическая операция |
|
Обозначение в языке С++ |
||
|
И |
|
|
&& |
|
|
ИЛИ |
|
|
|| |
|
|
НЕ |
|
|
! |
|
|
Приведем примеры записи операций отношений и логических опе- |
||||
раций. |
|
|
|
|
|
|
Математическое выражение |
R2 (x x )2 |
( y y )2 |
на языке |
|
|
|
0 |
0 |
|
С++ запишется так: R*R>=pow(x – x0,2)+pow(y – y0,2), а система урав-
|
|
|
|
|
|
y 3 |
|
||
|
|
|
|
|
нений |
y 4 x |
на языке С++ будет иметь вид |
||
|
|
x |
|
|
|
y |
|
||
|
|
|
|
|
|
|
3 |
|
|
(y<=3)&&(y<=4 – x)&&(y>=x/3.0).
Пример 3. Имеется следующее утверждение: «точка с координатами (x, y) принадлежит заштрихованной области» (рис.2). Определить, истинно или ложно это утверждение. Если истинно, то вывести на экран 1, если ложно, то 0.
y |
R = 4 |
3
0 |
x |
5
Рис.2. Иллюстрация к примеру 3
Решение. Для того чтобы определить, попадает ли точка в заштрихованную область, используем уравнение окружности с центром в точке
(x0, y0): R2 = ( x – x0)2 + (y – y0)2 . Если точка попадает, то неравенство R2 ≥ (x – x0)2 + (y – y0)2 должно быть истинно.
12