Содержание:
Алгоритм работы при создании C++-проекта в Visual Studio
1. New Project: Создание проекта.
- Пункт меню File -> New -> Project (Файл -> Создать -> Проект).
- В открывшемся окне в разделе Project Types (Установленные) найти Visual C++.
- В разделе Templates (Шаблоны) выбрать Win32 Console Application (Консольное приложение Win32).
- Указать имя нового «решения» (Solution Name) и имя проекта (Name).
- Сохранить проект на локальном диске в легко доступном месте (например, D:\Projects).
- Можно снять галочку Create folder for solution (Создать каталог для решения), чтобы не множить каталоги без необходимости.
- В следующем диалоговом окне щелкнуть Далее и затем выбрать Application Settings (Дополнительные параметры) -> Empty Project (Пустой проект). Убрать галочку с пункта Проверки жизненного цикла…
2. Add files: Добавление файлов.
Правый клик на проекте в окне Solution Explorer (Обозреватель решений) — пункт Add (Добавить) — пункт Create New Item (Создать элемент) или Add existing Item (Существующий элемент). Для этого и любого другого проекта понадобится как минимум один файл с точкой входа в программу — функцией main.
3. Exclude files: Исключение файлов.
Сначала удобно создать один проект и добавлять в него по одному файлу с решением каждой отдельной задачи. Однако при этом возникает проблема: в нескольких файлах проекта присутствует функция main, что противоречит правилам C++. Для решения данной проблемы, необходимо «исключать» файлы из проекта (правый клик на файле, Exclude from project (Исключить)). При этом файлы исчезнут из окна проекта, однако сохранятся в каталоге проекта на диске.
Типы переменных
- C++ — это строго типизированный язык программирования.
- В C++ существует два вида переменных — переменные примитивного типа или переменные пользовательского типа.
- Примитивные
- Пользовательские
int
, (4) целые числаchar
, (1) символыbool
, (1) логический (true или false)float
, (4) вещественные числаdouble
, (8) вещественные двойной точностиvoid
, отсутствие занченияshort int
(2) // или shortunsigned int
(4) // или unsignedunsigned char
(1) // bytestd::string
, строка (последовательность символов)std::vector
, динамический массив
То есть типы делятся на:
Примитивные типы
Их 6 в C++:
и еще:
Пользовательские типы
Два наиболее часто используемых:
Структура программы в C++
В программе C++ program есть точка входа — это функция int main()
По соглашению функция возвращает 0, если программа выполнена успешно и не ноль — при наличии ошибок.
Пример:
int main() { int i= 4; i = i + 2; char c = 'a'; std::cout << i << " " << c << std::endl; // вывод return 0; } |
C++ стандартная библиотека (std)
Стандартная библиотека (std
) предоставляет часто используемую функциональность и возможность использования некоторых структур данных.
Стандартная библиотека C++ состоит из множества внутренних библиотек которые могут быть подключены к любой программе (#included).
Так, директива (заголовок) iostream
включает операции по вводу и выводу в файл и консоль:
#include <iostream> int main() { std::cout << "Hello, world!" << std::endl; system("pause"); return 0; } |
Вся функциональность стандартной библиотеки являются частью пространства имен std
. Если какая-то функциональность из пространства имен используется часто, то она также может быть подключена, с помощью оператора using
:
#include <iostream> using std::cout; using std::endl; int main() { cout << "Hello, world!" << endl; system("pause"); return 0; } |
или импортирование самого пространства имен std
:
#include <iostream> using namespace std; int main() { cout << "Hello, world!" << endl; system("pause"); return 0; } |
C++ синтаксис
double d { 3.14 }; auto s { "C++" }; int i { 3.7 }; // error! char c { 128 }; // error! bool b { -1 }; // error! int j { true }; // OK, j == 1 |
При присваивании вещественного числа целочисленной переменной, дробная часть будет отброшена
int i = 3.14; // i == 3 |
char c = 128; // warning: constant value truncation |
bool b = -1; // true – warning: truncation from "int" to "bool" |
C++
|
PascalABC.NET
|
Блок видимости переменных
Блок кода, определенный скобками { }
, создает внутренний стэк сверху текущего стэка памяти. Благодаря чему переменные внутри блока «спрятаны». Т.о. область видимости переменных и их жизненный цикл определяется данным блоком. Переменные, определенные внутри блока, существуют, пока существует блок.
#include <iostream> int main() { // Внешняя область: int x = 2; std::cout << "Значение x во внешней области (должно быть 2): " << x << std::endl; // Создается внутренний блок и переменная в нем с именем "x". { int x = 3; int y = 4; std::cout << "Значение x во внутреннем блоке (должно быть 3): " << x << std::endl; std::cout << "Значение y во внутреннем блоке (должно быть 4): " << y << std::endl; } // Внутренний блок закрылся, внутренние переменные x и y исчезли. std::cout << "Значение x во внешней области (должно быть 2): " << x << std::endl; // К переменной y здесь уже обращаться нельзя! return 0; } |
Условные операторы
Оператор if может иметь свой внутренний блок, обозначенный фигурными скобками { }
. Тогда «время жизни» условного оператора определяется временем жизни данного блока:
#include <iostream> using namespace std; int main() { int x = 2; cout << "x во внешней области видимости (= 2): " << x << endl; if (true) { int x = 3; cout << "x во внутреннем блоке (= 3): " << x << endl; } cout << "x из внешней видимости (= 2): " << x << endl; return 0; } |
if (condition) { // если true } else { // если false } |
Цепочка условий:
if (condition1) { } else if (condition2) { } else if (condition3) { } else { // если все условия ложны } |
Syntax:
[логическое условие] ? [оператор если условие true] : [оператор если условие false]
// Так как (5<10) = true, будет извлечен оператор, находящийся после двоеточия, то есть <code>1</code>. int x = 5 < 10 ? 1 : 2; // x = 1 |
Syntax:
switch (проверяемая переменная) { case значение1: // что-то выполняется break; case значение2: // что-то выполняется break; case значение3: // что-то выполняется break; … default: // что-то выполняется если ни одно из условий не было истинным } |
Циклы
В с++ есть несколько видов циклов, которые позволяют выполнить повторяющиеся действия.
Цикл for
Цикл for
состоит из трех компонентов: инициализация счетчика цикла, условие для счетчика, шаг изменения счетчика. Синтаксис:
Синтаксис:
for (переменная=начальное значение; условие; приращение значения) { оператор1; оператор2; }Пример:
for (int i=1; i<=10; i++) { cout << i << endl; }
#include <iostream> using namespace std; int main() { // инициализация "x" во внешней области видимости int x = -1; // for (int x = 0; x <= 2; x++) { cout << "[Inside the loop] x is now: " << x << endl; // 0 .. 1 .. 2 } // В цикле for позволяет счетчик цикла объявляется в заголовке цикла, // т.о. счетчик будет принадлежать внутренней области блока: for (x = 0; x <= 2; x++) { cout << "[внутри цикла] x : " << x << endl; } return 0; } |
Цикл С++ While
Цикл с предусловием. Пока условие истинно, выполняются операторы тела цикла.
Синтаксис:
while (условие) { оператор1; оператор2; … }Для выхода из цикла используется оператор
break;
Цикл do-while
синтаксис:
do { тело цикла } while (условие) |
Лабораторные работы
Выполнение:
-
Часть 1:
- Создайте новый проект с названием MyFirstProject (алгоритм создания проекта см. выше).
- В окне Обозреватель решений выполните правый клик на папке Файлы исходного кода и выберите пункт Добавить -> Создать элемент -> Файл С++ (cpp). В поле Имя файла введите main.cpp. Щелкните Добавить
- В первой строке файла добавим директиву include для подключения внешних файлов-библиотек:
- Далее подключим глобальные пространства имен:
- Добавьте главную функцию main (){} и вставьте в нее инструкцию вывода в консоль слов «Привет мир!»
- чтобы консольное окно не исчезало сразу, добавим паузу:
- Откомпилируйте и запустите проект. Посмотрите результат.
#include <iostream> |
using std::cout; using std::cin; using std::endl; |
int main(){ cout<< "Hello World!"; } |
операторы вывода:
cout<< "Hello World!";или вывод значения переменной:
cout << n;
int main(){ cout<< "Hello World!"; system("pause"); } |
- Для ввода данных применяется стандартный потоковый объект cin, который использует операцию >>. Справа от этого знака находится переменная, принимающая вводимую информацию.
- Для вывода данных применяется стандартный потоковый объект cout, который использует операцию <<. Справа от этого знака находится литерал или переменная, значение которой выводится.
- Использование объектов cin и cout возможно, потому что в программе подключен файл iostream
Выполнить: Создайте консольное приложение для ввода числа, увеличения его на единицу и выводу результата в консоль.
Примерный вывод:
Введите число: 4 Результат: 5
[file nameL1Lab1.cpp
]
✍ Алгоритм:
- Откройте Microsoft Visual Studio. Выберите в меню Файл -> Новый проект. В секции Тип проекта выберите C++ и затем Win32 Консольное приложение.
- В окне Обозреватель решений найдите папку Файлы источники щелкните правой кнопкой мыши, чтобы добавить новый файл Даобавить -> New Item. Мы собираемся создать новый
.cpp
файл. Назовите егоL1lab1.cpp
. - Добавьте следующий код в созданный файл:
- Далее введите код функции
Main
: - В функции
main
добавьте объявление переменнойx
с типом integer (целое число): - Запросите ввести число:
- Используйте библиотеку std для сохранения введенного значения в переменной
x
: - Увеличим
x
на единицу: - Выведите результат в консоль:
- Обычно функция main должна возвращать 0. Добавьте код в самом конце данной функции:
- Запустите приложение. Консольное окно быстро пропадает. Необходимо его задержать на экране
- Добавьте для этого паузу:
- Запустите приложение снова.
- Для того чтобы постоянно не добавлять область имен
std
, импортируем в проект некоторые из ее функций. Добавьте следующий код в самое начало кода проекта, в область заголовков: - Теперь можно убрать префикс
std
перед выводомcout
и вводомcin
данных: - Запустите приложение.
- Вместо того чтобы выводить конкретные функции библиотеки
std
, можно импортировать саму библиотеку. Для этого необходимо добавить в область заголовков: - Запустите проект снова.
#include <iostream> |
iostream
содержит функции ввода/вывода в файлы или консоль.int main() { // … }
main
является точкой входа программы на C++. Здесь начинается компиляция проектаДля того, чтобы редактор воспринимал кириллицу, добавьте в функцию main строку:
setlocale(LC_ALL, ""); |
int x; |
std::cout << "Введите число: ";
...
std::cin >> x;
...
x++; |
std::cout << "Result: " << x << std::endl;
endl
выполняет переход на новую строку.… system("pause"); return 0; }
Импортирование функциональности из библиотеки std:
using std::cout; using std::cin; using std::endl;
std
.Если какая-то функция библиотеки используется в проекте достаточно часто, то имеет смысл импортировать ее в глобальное пространство
cout << "Введите число: "; … cin >> x; … cout << "Результат: " << x << endl;
Импортирование пространства имен std:
using namespace std;
Выполнить: У пользователя запрашивается ввод оценки (1, 2, 3, 4 или 5). Необходимо вывести комментарий к введенной оценке: очень плохо — 1, плохо — 2, удовлетворительно — 3, хорошо — 4, отлично — 5. Словесная характеристика оценки должна сохраняться в строковой переменной characteristic
.
Замечание 1: Чтобы использовать строковую переменную нужно подключить библиотеку:
#include <string> … std::string characteristic; |
Замечание 2: Используйте синтаксис цепочки условных конструкций if
:
if (mark == 1) { … } else if (...) // condition 2 { … } else if (...) // condition 3 { … } else { … } |
Ожидаемый вывод:
Введите оценку: 2 Комментарий к оценке: плохо
[имя файла L1Task1.cpp
]
Реализуйте программу, спрашивающую у ученика его отметку по информатике и реагирующую на нее подходящим текстом.
Используйте для проверки значения введенной переменной оператор switch:
switch (идентификатор переменной) { case значение1: оператор1; break; case значение2: оператор2; break; … default: оператор n; } |
[имя файла L1Task2.cpp
]
Выполнить: Попросите пользователя ввести число от 1 до 3 — размер порции кофе (1=маленький, 2=средний, 3=большой). Выведите соответствующую цену (1 — 100 рублей, 2 — 150 рублей, 3 — 200 рублей). Используйте условный оператор if
.
Ожидаемый вывод:
Размер чашки: 1=маленький 2=средний 3=большой Введите вариант: 2 Результат: оплатите 150 рублей
Размер чашки: 1=маленький 2=средний 3=большой Введите вариант: 5 Результат: неверный выбор.
[имя файла L1Task3.cpp
]
Выполнить: Выполните предыдущее задание, используя конструкцию switch
.
Ожидаемый вывод:
Размер чашки: 1=маленький 2=средний 3=большой Введите вариант: 2 Результат: оплатите 150 рублей
Размер чашки: 1=маленький 2=средний 3=большой Введите вариант: 5 Результат: неверный выбор.
[имя файла L1Task4.cpp
]
Выполнить: Выведите последовательность: -3 0 3 6 9 12 15 18 21 24
. Выполните задание, используя цикл FOR
с шагом 3.
Замечание: Синтаксис для задания шага цикла:
for ([инициализация счетчика]; [условие]; [итератор])
в качестве итератора следует указать счетчик +=3
Ожидаемый вывод:
Последовательность: -3 0 3 6 9 12 15 18 21 24
[имя файла L1Task5.cpp
]
Выполнить: Выведите последовательность: 1 2 3 4 . . . 99 100 99 . . . 3 2 1
.
Указание 1: Следует использовать два цикла for
: один цикл для последовательности 1 2 3 4 . . . 99 100
, второй — для последовательности 99 98 . . . 3 2 1
с шагом i—).
Ожидаемый вывод:
Последовательность: 1 2 3 4 5 . . . 99 100 99 . . . 4 3 2 1
[имя файла L1Task6.cpp
]
Выполнить: Вводятся 10 целых чисел. Выведите количество положительных и отрицательных среди них.
Указание 1: Создайте цикл for
для ввода чисел и их проверки. Используете две переменные-счетчика.
Ожидаемый вывод:
1 -5 -12 2 3 9 -1 9 5 -8 => counter_positive = 6, counter_negative = 4
[имя файла L1Task7.cpp
]
Выполнить: Посчитайте произведение двухзначных четных чисел в интервале [10;20] (10 * 12 * 14 * 16 * 18 * 20
). Используйте цикл while
.
Замечание: Для подсчета произведения используйте переменную product
с начальным значением product = 1
.
Ожидаемый вывод:
10 * 12 * 14 * 16 * 18 * 20 = 9676800
[имя файла L1Task8.cpp
]
Выполнить: Выведите последовательность 15 12 9 6 3 0
(от 15 до 0 с шагом = -3).
Замечание: Выполните задание дважды в одном и том же проекте: сначала с циклом while
, а затем с циклом do..while
.
Ожидаемый вывод:
while: 15 12 9 6 3 0 do-while: 15 12 9 6 3 0
[имя файла L1Task9.cpp
]
Выполнить: Дана последовательность целых чисел (вводятся с клавиатуры), последний элемент которой — число 0. Найти сумму всех положительных элементов этой последовательности и количество её отрицательных элементов. Организовать функцию для выполнения задания.
Указание:
В подобных задачах следует использовать идиому «бесконечный цикл с выходом из середины». В коде программы это означает:
while(1>0) { if (...) break; } |
[имя файла L1Task10.cpp
]
Указания: задания следует сохранить в файле с именем задания, и обязательно в коде вставить комментарий с постановкой задачи.
BEGIN
- Begin12. Даны катеты прямоугольного треугольника a и b. Найти его гипотенузу c и периметр P:
c = (a2 + b2)1/2, P = a + b + c.
Примерный вывод: << a=4.90 << b=9.90 results: c=11.05 P=25.85
- Begin17. Даны три точки A, B, C на числовой оси. Найти длины отрезков AC и BC и их сумму.
Примерный вывод: << A=-3.80 << B=3.40 << C=0.50 results: AC=4.30 BC=2.90 AC+BC=7.20
- Begin23. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в B, B — в C, C — в A, и вывести новые значения переменных A, B, C.
Примерный вывод: << A=2.47 << B=1.41 << C=9.50 results: A=9.50 B=2.47 C=1.41
- Begin27. Дано число A. Вычислить A8, используя вспомогательную переменную и три операции умножения. Для этого последовательно находить A2, A4, A8. Вывести все найденные степени числа A.
Примерный вывод: << A=3.20 results: A2=10.24 A4=104.86 A8=1095.12
- Begin28. Дано число A. Вычислить A15, используя две вспомогательные переменные и пять операций умножения. Для этого последовательно находить A2, A3, A5, A10, A15. Вывести все найденные степени числа A.
Примерный вывод: << A=1.57 results: A2=2.46 A3=3.87 A5=9.54 A10=90.99 A15=867.95
- Begin40. Найти решение системы линейных уравнений вида:
A1·x + B1·y = C1, A2·x + B2·y = C2,
заданной своими коэффициентами A1, B1, C1, A2, B2, C2, если известно, что данная система имеет единственное решение. Воспользоваться формулами:
x = (C1·B2 − C2·B1)/D, y = (A1·C2 − A2·C1)/D, где D = A1·B2 − A2·B1
Примерный вывод: << A1=-3.00 << B1=-2.00 << C1=4.00 << A2=-1.00 << B2=-4.00 << C2=-2.00 results: x = -2.00 y = 1.00
INTEGER
- Integer7. Дано двузначное число. Найти сумму и произведение его цифр.
Примерный вывод: << 47 results: sum = 11 product = 28
- Integer9. Дано трехзначное число. Используя одну операцию деления нацело, вывести первую цифру данного числа (сотни).
Примерный вывод: << 188 results: 1
- Integer10. Дано трехзначное число. Вывести вначале его последнюю цифру (единицы), а затем — его среднюю цифру (десятки).
Примерный вывод: << 916 results: единицы 6, десятки 1
- Integer11. Дано трехзначное число. Найти сумму и произведение его цифр.
Примерный вывод: << 363 results: sum 12, product 54
- Integer12. Дано трехзначное число. Вывести число, полученное при прочтении исходного числа справа налево.
Примерный вывод: << 263 results: 362
- Integer13. Дано трехзначное число. В нем зачеркнули первую слева цифру и приписали ее справа. Вывести полученное число.
Примерный вывод: << 124 results: 241
BOOLEAN
- Boolean4. Даны два целых числа: A, B. Проверить истинность высказывания: «Справедливы неравенства A > 2 и B ≤ 3».
Примерный вывод: << A = 1 B = 2 results: false
- Boolean5. Даны два целых числа: A, B. Проверить истинность высказывания: «Справедливы неравенства A ≥ 0 или B < −2».
Примерный вывод: << A = 0 B = -3 results: true
- Boolean6. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Справедливо двойное неравенство A < B < C».
Примерный вывод: << A = 50 B = 66 c = 73 results: true
- Boolean7. Даны три целых числа: A, B, C. Проверить истинность высказывания: «Число B находится между числами A и C».
- Boolean17. Дано целое положительное число. Проверить истинность высказывания: «Данное число является нечетным трехзначным».
- Boolean18. Проверить истинность высказывания: «Среди трех данных целых чисел есть хотя бы одна пара совпадающих».
Примерный вывод: << -1 -5 3 results: false
IF
- If4. Даны три целых числа. Найти количество положительных чисел в исходном наборе.
Примерный вывод: << -10 -7 -11 results: 0
- If6. Даны два числа. Вывести большее из них.
- If13. Даны три числа. Найти среднее из них (т. е. число, расположенное между наименьшим и наибольшим).
- If15. Даны три числа. Найти сумму двух наибольших из них.
- If24. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения:
f(x) = 2·sin(x), если x > 0, 6 − x, если x ≤ 0.
Примерный вывод: << x = 6.05 results: -0.46
- If26. Для данного вещественного x найти значение следующей функции f, принимающей вещественные значения:
−x, если x ≤ 0, f(x) = x2, если 0 < x < 2, 4, если x ≥ 2.
Примерный вывод: << x = 1.05 results: 1.10
CASE
- Case6. Единицы длины пронумерованы следующим образом: 1 — дециметр, 2 — километр, 3 — метр, 4 — миллиметр, 5 — сантиметр. Дан номер единицы длины (целое число в диапазоне 1–5) и длина отрезка в этих единицах (вещественное число). Найти длину отрезка в метрах.
Примерный вывод: << дм =3.15 results: м = 0.315
- Case12. Элементы окружности пронумерованы следующим образом: 1 — радиус R, 2 — диаметр D = 2·R, 3 — длина L = 2·π·R, 4 — площадь круга S = π·R2. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке). В качестве значения π использовать 3.14.
Примерный вывод: << 2 D = 0.79 results: R = 0.40 L = 2.48 S = 0.49
- Case15. Мастям игральных карт присвоены порядковые номера: 1 — пики, 2 — трефы, 3 — бубны, 4 — червы. Достоинству карт, старших десятки, присвоены номера: 11 — валет, 12 — дама, 13 — король, 14 — туз. Даны два целых числа: N — достоинство (6 ≤ N ≤ 14) и M — масть карты (1 ≤ M ≤ 4). Вывести название соответствующей карты вида «шестерка бубен», «дама червей», «туз треф» и т. п.
Примерный вывод: << Достоинство N = 9, Масть M = 3 results: "девятка бубен"
FOR
- For10. Дано целое число N (> 0). Найти сумму
1 + 1/2 + 1/3 + … + 1/N
(вещественное число).
Примерный вывод: << N = 11 results: 3.019877
- For12. Дано целое число N (> 0). Найти произведение
1.1 · 1.2 · 1.3 · …
(N сомножителей).
Примерный вывод: << N = 6 results: 5.765760
- For13. Дано целое число N (> 0). Найти значение выражения
1.1 − 1.2 + 1.3 − …
(N слагаемых, знаки чередуются). Условный оператор не использовать.
Примерный вывод: << N = 8 results: -0.40
- For22. Дано вещественное число X и целое число N (> 0). Найти значение выражения
1 + X + X2/(2!) + … + XN/(N!)
(N! = 1·2·…·N). Полученное число является приближенным значением функции exp в точке X.
Примерный вывод: << X = -1.10767556 N = 5 results: 0.32811651
- For35. Дано целое число N (> 2). Последовательность целых чисел AK определяется следующим образом:
A1 = 1, A2 = 2, A3 = 3, AK = AK−1 + AK−2 − 2·AK−3, K = 4, 5, … .
Вывести элементы A1, A2, …, AN.
Примерный вывод: << N = 11 results: 1 2 3 3 2 -1 -5 -10 -13 -13 -6
WHILE
- While4. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести true, если не является — вывести false.
Примерный вывод: << N = 86 results: false
- While7. Дано целое число N (> 0). Найти наименьшее целое положительное число K, квадрат которого превосходит N: K2 > N. Функцию извлечения квадратного корня не использовать.
Примерный вывод: << N = 81 results: K = 10
- While10. Дано целое число N (> 1). Найти наибольшее целое число K, при котором выполняется неравенство 3K < N.
Примерный вывод: << N = 729 results: K = 5
- While17. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).
Примерный вывод: << N = 6772 results: 2 7 7 6
- While18. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, найти количество и сумму его цифр.
Примерный вывод: << N = 2325 results: 4 sum=12
- While21. Дано целое число N (> 0). С помощью операций деления нацело и взятия остатка от деления определить, имеются ли в записи числа N нечетные цифры. Если имеются, то вывести true, если нет — вывести false.
Примерный вывод: << N = 10101 results: true