<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://acm.khpnets.info/w39/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Spiritum</id>
	<title>Олимпиадное программирование в УлГТУ - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://acm.khpnets.info/w39/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Spiritum"/>
	<link rel="alternate" type="text/html" href="https://acm.khpnets.info/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Spiritum"/>
	<updated>2026-05-13T11:36:18Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%93%D1%80%D0%B0%D0%B1%D0%BB%D0%B8&amp;diff=2359</id>
		<title>Грабли</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%93%D1%80%D0%B0%D0%B1%D0%BB%D0%B8&amp;diff=2359"/>
		<updated>2019-05-01T18:08:27Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ввод и вывод ==&lt;br /&gt;
&lt;br /&gt;
=== cin/cout работает медленнее scanf/printf ===&lt;br /&gt;
* [http://codeforces.ru/blog/entry/562 Codeforces &amp;amp;mdash; Ввод/вывод в C++]&lt;br /&gt;
* [http://codeforces.ru/blog/entry/5217 Codeforces &amp;amp;mdash; Снова про ввод/вывод в C++]&lt;br /&gt;
* [http://habrahabr.ru/post/246257/ Habrahabr &amp;amp;mdash; Насколько медленны iostreams?]&lt;br /&gt;
&lt;br /&gt;
=== endl сбрасывает буфер вывода после перевода строки ===&lt;br /&gt;
* [http://codeforces.ru/contest/417/submission/6392130 #6392130] vs [http://codeforces.ru/contest/417/submission/10923857 #10923857]&lt;br /&gt;
&lt;br /&gt;
=== Различные компиляторы по-разному округляют вещественные числа с последним дробным разрядом 5 ===&lt;br /&gt;
* [http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ exploringbinary.com — Inconsistent Rounding of Printed Floating-Point Numbers]&lt;br /&gt;
* [http://ideone.com/I8kEuE ideone.com/I8kEuE]&lt;br /&gt;
&lt;br /&gt;
=== Аккуратнее с %lld и %I64d: %lld предпочтительнее ===&lt;br /&gt;
* %lld некорректно работает в очень древних Visual C++, а также в GNU C++ (MinGW) под Windows XP (&#039;&#039;&#039;например, на acmp.ru&#039;&#039;&#039;).&lt;br /&gt;
* [http://ideone.com/kJ37fO %I64d некорректно работает в GNU C++ под Linux] (то есть почти везде).&lt;br /&gt;
* Codeforces: [http://codeforces.com/blog/entry/6727 1], [http://codeforces.com/blog/entry/7912 2]&lt;br /&gt;
* [http://discuss.codechef.com/questions/31014/difference-between-i64d-lld CodeChef]&lt;br /&gt;
&lt;br /&gt;
== Вещественные числа ==&lt;br /&gt;
&lt;br /&gt;
=== Вещественные числа нужно использовать с осторожностью; функции &amp;lt;math.h&amp;gt; работают с вещественными числами ===&lt;br /&gt;
* [http://ideone.com/yBUC04 ideone.com/yBUC04]&lt;br /&gt;
* [http://ideone.com/4wnPS0 ideone.com/4wnPS0]&lt;br /&gt;
* [http://isocpp.org/wiki/faq/newbie#floating-point-arith isocpp.org &amp;amp;mdash; Why doesn’t my floating-point comparison work?]&lt;br /&gt;
* Макконнелл С. Совершенный код / С. Макконнелл. &amp;amp;mdash; М.: Русская редакция, 2010. &amp;amp;mdash; 896 с. &amp;amp;mdash; П. 12.3. &amp;amp;laquo;Числа с плавающей запятой&amp;amp;raquo;, с. 286&lt;br /&gt;
* [http://codeforces.ru/blog/entry/17584 Codeforces &amp;amp;mdash; Weird bug with pow?]&lt;br /&gt;
* [http://codeforces.ru/blog/entry/6344 Codeforces &amp;amp;mdash; Работа с вещественными числами]&lt;br /&gt;
&lt;br /&gt;
=== Если не хватает точности double ===&lt;br /&gt;
# Меняем все double на long double;&lt;br /&gt;
# Меняем все вызовы cstdio (scanf/printf) на вызовы iostream (cin/cout);&lt;br /&gt;
# Добавляем l ко всем функциям cmath (sqrt -&amp;gt; sqrtl, atan2 -&amp;gt; atan2l);&lt;br /&gt;
# Сдаём под g++.&lt;br /&gt;
* [http://codeforces.com/contest/598/submission/14750380 #14750380] vs [http://codeforces.com/contest/598/submission/14750383 #14750383]&lt;br /&gt;
* [http://codeforces.com/contest/600/submission/14750408 #14750408] vs [http://codeforces.com/contest/600/submission/14750411 #14750411]&lt;br /&gt;
&lt;br /&gt;
== Особенности функций ==&lt;br /&gt;
&lt;br /&gt;
=== Метод .size() у контейнеров STL возвращает беззнаковое число ===&lt;br /&gt;
* [http://codeforces.ru/blog/entry/15782 Codeforces &amp;amp;mdash; Problem with GNU C++ compiler]&lt;br /&gt;
* [http://codeforces.ru/contest/385/submission/5789899 #5789899] vs [http://codeforces.ru/contest/385/submission/5798105 #5798105]&lt;br /&gt;
&lt;br /&gt;
=== В &amp;lt;ctype.h&amp;gt; функции классификации символов (такие как isupper()) могут возвращать не только 0 и 1 ===&lt;br /&gt;
* [http://ideone.com/GUKcBa ideone.com/GUKcBa]&lt;br /&gt;
&lt;br /&gt;
== Разное ==&lt;br /&gt;
&lt;br /&gt;
=== В &amp;lt;math.h&amp;gt; Visual C++ уже заняты глобальные имена j0, j1, jn, y0, y1, yn ===&lt;br /&gt;
* [http://acm.timus.ru/help.aspx?topic=cpp Timus &amp;amp;mdash; Как писать решения на C/C++] (Раздел &amp;amp;laquo;Особенности компилятора по сравнению с другими 32-битными компиляторами C/C++&amp;amp;raquo;)&lt;br /&gt;
&lt;br /&gt;
== Приоритетная очередь работает быстрее, чем сет ==&lt;br /&gt;
* Несмотря на равную асимптотику, приоритетная очередь имеет много меньшую константу, чем сет. Поэтому некоторые задачи можно сдать только с приоритетной очередью.&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%93%D1%80%D0%B0%D0%B1%D0%BB%D0%B8&amp;diff=2358</id>
		<title>Грабли</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%93%D1%80%D0%B0%D0%B1%D0%BB%D0%B8&amp;diff=2358"/>
		<updated>2019-05-01T18:07:49Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ввод и вывод ==&lt;br /&gt;
&lt;br /&gt;
=== cin/cout работает медленнее scanf/printf ===&lt;br /&gt;
* [http://codeforces.ru/blog/entry/562 Codeforces &amp;amp;mdash; Ввод/вывод в C++]&lt;br /&gt;
* [http://codeforces.ru/blog/entry/5217 Codeforces &amp;amp;mdash; Снова про ввод/вывод в C++]&lt;br /&gt;
* [http://habrahabr.ru/post/246257/ Habrahabr &amp;amp;mdash; Насколько медленны iostreams?]&lt;br /&gt;
&lt;br /&gt;
=== endl сбрасывает буфер вывода после перевода строки ===&lt;br /&gt;
* [http://codeforces.ru/contest/417/submission/6392130 #6392130] vs [http://codeforces.ru/contest/417/submission/10923857 #10923857]&lt;br /&gt;
&lt;br /&gt;
=== Различные компиляторы по-разному округляют вещественные числа с последним дробным разрядом 5 ===&lt;br /&gt;
* [http://www.exploringbinary.com/inconsistent-rounding-of-printed-floating-point-numbers/ exploringbinary.com — Inconsistent Rounding of Printed Floating-Point Numbers]&lt;br /&gt;
* [http://ideone.com/I8kEuE ideone.com/I8kEuE]&lt;br /&gt;
&lt;br /&gt;
=== Аккуратнее с %lld и %I64d: %lld предпочтительнее ===&lt;br /&gt;
* %lld некорректно работает в очень древних Visual C++, а также в GNU C++ (MinGW) под Windows XP (&#039;&#039;&#039;например, на acmp.ru&#039;&#039;&#039;).&lt;br /&gt;
* [http://ideone.com/kJ37fO %I64d некорректно работает в GNU C++ под Linux] (то есть почти везде).&lt;br /&gt;
* Codeforces: [http://codeforces.com/blog/entry/6727 1], [http://codeforces.com/blog/entry/7912 2]&lt;br /&gt;
* [http://discuss.codechef.com/questions/31014/difference-between-i64d-lld CodeChef]&lt;br /&gt;
&lt;br /&gt;
== Вещественные числа ==&lt;br /&gt;
&lt;br /&gt;
=== Вещественные числа нужно использовать с осторожностью; функции &amp;lt;math.h&amp;gt; работают с вещественными числами ===&lt;br /&gt;
* [http://ideone.com/yBUC04 ideone.com/yBUC04]&lt;br /&gt;
* [http://ideone.com/4wnPS0 ideone.com/4wnPS0]&lt;br /&gt;
* [http://isocpp.org/wiki/faq/newbie#floating-point-arith isocpp.org &amp;amp;mdash; Why doesn’t my floating-point comparison work?]&lt;br /&gt;
* Макконнелл С. Совершенный код / С. Макконнелл. &amp;amp;mdash; М.: Русская редакция, 2010. &amp;amp;mdash; 896 с. &amp;amp;mdash; П. 12.3. &amp;amp;laquo;Числа с плавающей запятой&amp;amp;raquo;, с. 286&lt;br /&gt;
* [http://codeforces.ru/blog/entry/17584 Codeforces &amp;amp;mdash; Weird bug with pow?]&lt;br /&gt;
* [http://codeforces.ru/blog/entry/6344 Codeforces &amp;amp;mdash; Работа с вещественными числами]&lt;br /&gt;
&lt;br /&gt;
=== Если не хватает точности double ===&lt;br /&gt;
# Меняем все double на long double;&lt;br /&gt;
# Меняем все вызовы cstdio (scanf/printf) на вызовы iostream (cin/cout);&lt;br /&gt;
# Добавляем l ко всем функциям cmath (sqrt -&amp;gt; sqrtl, atan2 -&amp;gt; atan2l);&lt;br /&gt;
# Сдаём под g++.&lt;br /&gt;
* [http://codeforces.com/contest/598/submission/14750380 #14750380] vs [http://codeforces.com/contest/598/submission/14750383 #14750383]&lt;br /&gt;
* [http://codeforces.com/contest/600/submission/14750408 #14750408] vs [http://codeforces.com/contest/600/submission/14750411 #14750411]&lt;br /&gt;
&lt;br /&gt;
== Особенности функций ==&lt;br /&gt;
&lt;br /&gt;
=== Метод .size() у контейнеров STL возвращает беззнаковое число ===&lt;br /&gt;
* [http://codeforces.ru/blog/entry/15782 Codeforces &amp;amp;mdash; Problem with GNU C++ compiler]&lt;br /&gt;
* [http://codeforces.ru/contest/385/submission/5789899 #5789899] vs [http://codeforces.ru/contest/385/submission/5798105 #5798105]&lt;br /&gt;
&lt;br /&gt;
=== В &amp;lt;ctype.h&amp;gt; функции классификации символов (такие как isupper()) могут возвращать не только 0 и 1 ===&lt;br /&gt;
* [http://ideone.com/GUKcBa ideone.com/GUKcBa]&lt;br /&gt;
&lt;br /&gt;
== Разное ==&lt;br /&gt;
&lt;br /&gt;
=== В &amp;lt;math.h&amp;gt; Visual C++ уже заняты глобальные имена j0, j1, jn, y0, y1, yn ===&lt;br /&gt;
* [http://acm.timus.ru/help.aspx?topic=cpp Timus &amp;amp;mdash; Как писать решения на C/C++] (Раздел &amp;amp;laquo;Особенности компилятора по сравнению с другими 32-битными компиляторами C/C++&amp;amp;raquo;)&lt;br /&gt;
&lt;br /&gt;
== Приоритетная очередь работает быстрее чем сет ==&lt;br /&gt;
* Несмотря на равную асимптотику, приоритетная очередь имеет много меньшую константу, чем сет. Поэтому некоторые задачи можно сдать только с приоритетной очередью.&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2357</id>
		<title>Основы программирования на C++</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2357"/>
		<updated>2019-05-01T17:00:32Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка к работе ==&lt;br /&gt;
&lt;br /&gt;
=== Установка среды разработки ===&lt;br /&gt;
* [http://www.visualstudio.com/ru/thank-you-downloading-visual-studio/?sku=Community&amp;amp;rel=15 Visual Studio 2017 Community] (для Windows 7 — Windows 10)&lt;br /&gt;
: Выберите только вариант «Разработка классических приложений на C++»&lt;br /&gt;
* [http://download.microsoft.com/download/1/D/9/1D9A6C0E-FC89-43EE-9658-B9F0E3A76983/vc_web.exe Visual Studio 2010] (для Windows XP, но также &#039;&#039;&#039;&amp;lt;span style=&#039;color:red;&#039;&amp;gt;рекомендуется, если вы не хотите выкачивать большие установочные файлы&amp;lt;/span&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Создание проекта в Visual Studio ===&lt;br /&gt;
Создаём проект:&lt;br /&gt;
&lt;br /&gt;
Меню Файл (File) → Создать (New) → Проект... (Project...) → слева выбираем Visual C++ → справа выбираем Пустой проект (Empty Project) → вводим имя проекта → OK.&lt;br /&gt;
&lt;br /&gt;
Добавляем в проект новый файл:&lt;br /&gt;
&lt;br /&gt;
Меню Проект (Project) → Добавить новый элемент... (Add New Item...) → Файл C++ (C++ File) → вводим имя файла → Добавить (Add).&lt;br /&gt;
&lt;br /&gt;
=== Решение проблем ===&lt;br /&gt;
* &#039;&#039;&#039;Visual Studio не позволяет мне использовать scanf&#039;&#039;&#039;&lt;br /&gt;
: Меню Проект (Project) → Свойства (Properties) → C/C++ → Проверки SDL (SDL Checks) → выбрать значение Нет (No) → OK.&lt;br /&gt;
: Другой способ: скопировать в начало программы строку &amp;lt;tt&amp;gt;#define _CRT_SECURE_NO_WARNINGS&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;При запуске появляется окно Следующий проект устарел. Выполнить его сборку? (This project is out of date. Would you like to build it?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Да (Yes).&lt;br /&gt;
* &#039;&#039;&#039;Если программа содержит ошибки, при запуске появляется окно Возникли ошибки сборки. Продолжить и запустить последний успешно построенный вариант? (There were build errors. Would you like to continue and run the last successful build?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Нет (No).&lt;br /&gt;
* &#039;&#039;&#039;Где посмотреть, какие у меня ошибки?&#039;&#039;&#039;&lt;br /&gt;
: Меню Вид (View) → Список ошибок (Error List). В более старых версиях: View → Other Windows → Error List.&lt;br /&gt;
&lt;br /&gt;
== Вспомогательные материалы к занятиям ==&lt;br /&gt;
=== Введение. Переменные. Ввод-вывод ===&lt;br /&gt;
==== Минимальная программа на C++ ====&lt;br /&gt;
 int main() {&lt;br /&gt;
     &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
В любой программе всегда должна быть функция main. Фигурные скобки обозначают начало и конец функции, все команды записываются внутри.&lt;br /&gt;
&lt;br /&gt;
До функции main, в самом начале файла, обычно указываются директивы #include (например #include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==== Использование переменных ====&lt;br /&gt;
&lt;br /&gt;
Чтобы добавить в программу переменную, укажите её тип, название и, если необходимо, начальное значение.&lt;br /&gt;
&lt;br /&gt;
 int radius = 100;                           //целое число radius со значением 100&lt;br /&gt;
 double circleArea = 3.14 * radius * radius; //дробное число circleArea, значение вычисляется по формуле&lt;br /&gt;
&lt;br /&gt;
Переменные могут менять своё значение:&lt;br /&gt;
&lt;br /&gt;
 radius = radius * 2; //радиус увеличился в 2 раза&lt;br /&gt;
&lt;br /&gt;
Часто используемые типы данных:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| int || целые числа || от -2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;-1 (примерно от -2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; до 2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;) || 4 байта&lt;br /&gt;
|-&lt;br /&gt;
| long long || большие целые числа || от -2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt;-1 (примерно от -9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt; до 9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt;) || 8 байт&lt;br /&gt;
|-&lt;br /&gt;
| double || дробные числа || точность 15-16 десятичных цифр || 8 байт&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Вывод при помощи функции printf ====&lt;br /&gt;
&lt;br /&gt;
Функция printf используется для печати на экране. Для использования printf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
printf выводит только то, что указано в кавычках. Для вывода перевода строки используется специальный символ \n.&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;Hello World!\n&amp;quot;);     //выводит Hello World!&lt;br /&gt;
 printf(&amp;quot;My name\nis Vasya.&amp;quot;); //выводит My name, а затем на новой строке is Vasya.&lt;br /&gt;
&lt;br /&gt;
printf может выводить переменные и значения выражений, но для этого в строке с кавычками нужно указать места («окошечки»), куда следует подставлять значения. Места указываются при помощи спецификаторов.&lt;br /&gt;
&lt;br /&gt;
 int salary = 100;&lt;br /&gt;
 printf(&amp;quot;Your salary is %d $.\n&amp;quot;, salary);               //выводит Your salary is 100 $.&lt;br /&gt;
 printf(&amp;quot;Next year you&#039;ll have %.2lf $.&amp;quot;, salary * 1.5); //выводит Next year you&#039;ll have 150.00 $.&lt;br /&gt;
&lt;br /&gt;
Часто используемые спецификаторы:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| %d || int&lt;br /&gt;
|-&lt;br /&gt;
| %lld || long long &lt;br /&gt;
|-&lt;br /&gt;
| %lf || double&lt;br /&gt;
|-&lt;br /&gt;
| %.Xlf || double, X знаков после точки (например, %.2lf — 2 знака после точки)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
printf может выводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;P:%d S:%d&amp;quot;, 2 * (3 + 4), 3 * 4); //выводит P:14 S:12&lt;br /&gt;
&lt;br /&gt;
==== Ввод при помощи функции scanf ====&lt;br /&gt;
&lt;br /&gt;
Функция scanf используется для ввода с клавиатуры. Для использования scanf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
scanf похож на printf, но перед каждой переменной следует ставить амперсанд &amp;amp;:&lt;br /&gt;
&lt;br /&gt;
 int age;&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;age); //значение переменной age вводится с клавиатуры&lt;br /&gt;
&lt;br /&gt;
scanf может вводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 int time;&lt;br /&gt;
 double speed;&lt;br /&gt;
 scanf(&amp;quot;%d%lf&amp;quot;, &amp;amp;time, &amp;amp;speed); //значения переменных time и speed вводятся с клавиатуры&lt;br /&gt;
&lt;br /&gt;
=== Условия ===&lt;br /&gt;
&lt;br /&gt;
==== Простые условия ====&lt;br /&gt;
Конструкция if позволяет выполнять в программе различные действия в зависимости от условий.&lt;br /&gt;
&lt;br /&gt;
 if (password == 12345) {        //если значение переменной password равняется 12345,&lt;br /&gt;
     printf(&amp;quot;Welcome!&amp;quot;);         //вывести Welcome!&lt;br /&gt;
 } else {                        //в противном случае&lt;br /&gt;
     printf(&amp;quot;Access denied!&amp;quot;);   //вывести Access denied!&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Если ветка else не используется, её можно не писать:&lt;br /&gt;
&lt;br /&gt;
 if (lives &amp;lt;= 0) {               //если количество жизней меньше или равно нулю,&lt;br /&gt;
     printf(&amp;quot;Game over!&amp;quot;);       //вывести Game over!&lt;br /&gt;
 }                               //иначе ничего не делать&lt;br /&gt;
&lt;br /&gt;
Можно скомбинировать несколько условий при помощи else if:&lt;br /&gt;
&lt;br /&gt;
 if (mark == 5) {&lt;br /&gt;
     printf(&amp;quot;Excellent!&amp;quot;);&lt;br /&gt;
 } else if (mark == 4) {&lt;br /&gt;
     printf(&amp;quot;Good!&amp;quot;);&lt;br /&gt;
 } else if (mark == 3) {&lt;br /&gt;
     printf(&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
 } else {&lt;br /&gt;
     printf(&amp;quot;Bad&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операции сравнения ====&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;/tt&amp;gt; || меньше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;=&amp;lt;/tt&amp;gt; || меньше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; || больше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;=&amp;lt;/tt&amp;gt; || больше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; || равно (не путать с &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;!=&amp;lt;/tt&amp;gt; || не равно&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Условия со связками И, ИЛИ ====&lt;br /&gt;
&lt;br /&gt;
Связка И (&amp;amp;&amp;amp;) позволяет проверить, что &#039;&#039;&#039;обе&#039;&#039;&#039; части условия &#039;&#039;&#039;одновременно&#039;&#039;&#039; являются истинными:&lt;br /&gt;
&lt;br /&gt;
 if (20 &amp;lt;= age &amp;amp;&amp;amp; age &amp;lt;= 30)  //если возраст от 20 до 30 лет включительно&lt;br /&gt;
&lt;br /&gt;
Связка ИЛИ (||) позволяет проверить, что &#039;&#039;&#039;хотя бы одна&#039;&#039;&#039; из частей условия является истинной:&lt;br /&gt;
&lt;br /&gt;
 if (age &amp;lt; 20 || 30 &amp;lt; age)    //если возраст меньше 20 или больше 30 лет&lt;br /&gt;
&lt;br /&gt;
==== Поиск максимума или минимума ====&lt;br /&gt;
&lt;br /&gt;
Чтобы найти наибольшее из значений нескольких переменных, следует сделать следующие шаги:&lt;br /&gt;
&lt;br /&gt;
* Создать новую переменную, в которой в итоге будет находиться значение максимума, и положить туда значение первой переменной;&lt;br /&gt;
* Сравнить максимум со второй переменной, и если вторая переменная больше, положить в максимум значение второй переменной;&lt;br /&gt;
* Сравнить максимум с третьей переменной, и если третья переменная больше, положить в максимум значение третьей переменной;&lt;br /&gt;
* Повторить для оставшихся переменных.&lt;br /&gt;
&lt;br /&gt;
 int maxValue = a;&lt;br /&gt;
 if (b &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = b;&lt;br /&gt;
 }&lt;br /&gt;
 if (c &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = c;&lt;br /&gt;
 }&lt;br /&gt;
 if (d &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = d;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Минимум определяется аналогичным образом (знаки &amp;gt; следует изменить на &amp;lt;).&lt;br /&gt;
&lt;br /&gt;
=== Циклы ===&lt;br /&gt;
==== Цикл while ====&lt;br /&gt;
Циклы — это конструкции языка C++, позволяющие несколько раз выполнять однотипные действия.&lt;br /&gt;
&lt;br /&gt;
Общий вид цикла while:&lt;br /&gt;
&lt;br /&gt;
 while (&amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Перед началом цикла будет выполнена проверка, является ли &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; истинным. Если это так, то выполняются действия, указанные внутри цикла (пока всё очень похоже на if). Однако, в отличие от if, при достижении закрывающей скобки цикла while мы перемещаемся обратно на его начало, где вновь будет проверено &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;, и если оно всё ещё истинно, то снова выполняются действия внутри цикла, и так далее. Это продолжается до тех пор, пока &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; не перестанет быть истинным (или пока не встретится оператор break; см. далее).&lt;br /&gt;
&lt;br /&gt;
Цикл while удобно использовать тогда, когда заранее неизвестно, сколько именно повторов требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 //В банке лежит n рублей, каждый месяц сумма увеличивается на 10%.&lt;br /&gt;
 //Сколько месяцев потребуется, чтобы скопить миллион рублей?&lt;br /&gt;
 int money = n, months = 0; //изначально денег в банке - n, прошло месяцев - 0&lt;br /&gt;
 while (money &amp;lt; 1000000) {  //пока не накопится миллион или больше,&lt;br /&gt;
     money *= 1.1;          //сумма увеличивается на 10% (дробная часть отбрасывается)&lt;br /&gt;
     months++;              //количество месяцев увеличивается на 1&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда money будет больше или равно миллиону&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, months);      //выводим количество прошедших месяцев&lt;br /&gt;
&lt;br /&gt;
 //поиск минимального делителя (большего единицы) числа n&lt;br /&gt;
 int divisor = 2;           //считаем, что минимальный делитель — это двойка&lt;br /&gt;
 while (n % divisor != 0) { //пока n не делится на divisor,&lt;br /&gt;
     n++;                   //увеличиваем divisor&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда n будет делиться на divisor&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, divisor);     //выводим полученный делитель&lt;br /&gt;
&lt;br /&gt;
==== Цикл for ====&lt;br /&gt;
Цикл for удобно использовать тогда, когда количество повторений известно заранее.&lt;br /&gt;
&lt;br /&gt;
Пусть, например, нужно вывести числа от 0 до 9. Это можно сделать при помощи цикла while:&lt;br /&gt;
&lt;br /&gt;
 int i = 0;&lt;br /&gt;
 while (i &amp;lt; 10) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
     i++;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Однако гораздо проще в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Запись цикла for всегда состоит из трёх частей, разделённых точками с запятой (именно точками с запятой, это важно!):&lt;br /&gt;
&lt;br /&gt;
 for (&amp;lt;span style=&#039;color:red&#039;&amp;gt;&amp;amp;lt;инициализация&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:green&#039;&amp;gt;&amp;amp;lt;изменение&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Как правило, внутри цикла for используется некоторая переменная (счётчик). &amp;lt;span style=&#039;color:red&#039;&amp;gt;Первая часть&amp;lt;/span&amp;gt; отвечает за создание счётчика и запись в него начального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:orange&#039;&amp;gt;Вторая часть&amp;lt;/span&amp;gt; содержит условие, при истинности которого цикл продолжает работу (оно имеет точно такой же смысл, как условие в скобках у while). Как правило, здесь проверяется, что счётчик ещё не дошёл до некоторого финального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:green&#039;&amp;gt;Третья часть&amp;lt;/span&amp;gt; показывает, как должен изменяться счётчик от итерации к итерации.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 5; i &amp;lt;= 15; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 5 6 7 8 9 10 11 12 13 14 15&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 30; i &amp;gt;= 20; i--) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 30 29 28 27 26 25 24 23 22 21 20&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt;= 40; i += 5) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 0 5 10 15 20 25 30 35 40&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 1; i &amp;lt; 100; i *= 3) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 1 3 9 27 81 243 729&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операторы break и continue ====&lt;br /&gt;
&lt;br /&gt;
Оператор break досрочно завершает цикл while или for (если при выполнении программы мы встречаем break, мы сразу же перемещаемся за конец цикла):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         break;                 //прервать цикл&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3&lt;br /&gt;
&lt;br /&gt;
Оператор continue досрочно переходит к следующей итерации цикла while или for (если при выполнении программы мы встречаем continue, мы сразу же перемещаемся к началу цикла; если есть счётчик, то он будет изменён):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         continue;              //перейти к следующей итерации&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3 5 6 7 9&lt;br /&gt;
&lt;br /&gt;
=== Массивы ===&lt;br /&gt;
&lt;br /&gt;
==== Объявление и использование массивов ====&lt;br /&gt;
&lt;br /&gt;
Массив — несколько переменных одного типа, имеющих общее имя и различные индексы. Для обращения к ячейке массива требуется написать имя массива, а затем — индекс ячейки в квадратных скобках.&lt;br /&gt;
&lt;br /&gt;
 int x; //одна переменная типа int, 4 байта&lt;br /&gt;
 int a[5]; //массив из 5 ячеек типа int, 20 байт&lt;br /&gt;
&lt;br /&gt;
Ячейки массива имеют индексы от 0 до (SIZE - 1), где SIZE — размер массива.&lt;br /&gt;
&lt;br /&gt;
 int a[10]; //объявлены 10 ячеек: a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]&lt;br /&gt;
 int b[100]; //объявлены 100 ячеек: от a[0] до a[99]&lt;br /&gt;
&lt;br /&gt;
С ячейками массива можно работать как с обычными переменными:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 a[0] = 100;&lt;br /&gt;
 a[1] = a[0] * 2;&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, a[1]); //вывод: 200&lt;br /&gt;
&lt;br /&gt;
При создании массива можно сразу задать ячейкам начальные значения (как и в случае с отдельными переменными). Если этого не сделать, массив изначально будет содержать случайные значения (мусор).&lt;br /&gt;
&lt;br /&gt;
 int x;                      //x — отдельная переменная, содержит случайное значение (мусор)&lt;br /&gt;
 int y = 100;                //y — отдельная переменная, содержит значение 100&lt;br /&gt;
 int a[3];                   //a — массив из 3 ячеек, которые содержат случайные значения (мусор)&lt;br /&gt;
 int b[3] = {100, 200, 300}; //b — массив из 3 ячеек, которые содержат значения 100, 200 и 300&lt;br /&gt;
&lt;br /&gt;
==== Считывание и вывод массивов ====&lt;br /&gt;
&lt;br /&gt;
Если определён массив из 5 ячеек, и значения ячеек вводятся с клавиатуры, можно использовать 5 операций scanf:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[0]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[1]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[2]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[3]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[4]);&lt;br /&gt;
&lt;br /&gt;
Но проще и правильнее в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Часто в задачах размер массива неизвестен заранее, и его также нужно вводить с клавиатуры. В этом случае нужно объявить массив на такое количество ячеек, которого заведомо хватит во всех случаях (как правило, узнать это количество можно из ограничений в разделе «Входные данные»), а затем сделать отдельную переменную size и использовать её.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 int size;                          //объявляем переменную для фактического размера массива&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;size);                //считываем размер массива&lt;br /&gt;
 &lt;br /&gt;
 int a[100010];                     //объявляем массив такой величины, чтобы его хватило для всех тестов&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {   //считываем столько ячеек массива, сколько указано в size&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом выполняется вывод ячеек массива на печать:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Символы и строки ===&lt;br /&gt;
==== Символы в языке С ====&lt;br /&gt;
Язык С использует [http://ru.wikipedia.org/wiki/ASCII кодировочную таблицу ASCII], в которой различным знакам сопоставлены коды от 0 до 127. В языке C &#039;&#039;&#039;отсутствует отдельный тип для хранения символов&#039;&#039;&#039;, а &#039;&#039;&#039;маленькие целые числа (от 0 до 127) всегда могут интерпретироваться как символы и наоборот&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для хранения кодов удобно использовать 8-битный целый тип char (может представлять целые числа от -128 до 127, чего как раз хватает для кодов символов).&lt;br /&gt;
&lt;br /&gt;
 char a = 33;       //a - это число 33, или, что то же самое, код символа &#039;!&#039;&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, a); //вывод: 33&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, a); //вывод: !&lt;br /&gt;
 &lt;br /&gt;
 char b = &#039;@&#039;;      //b - это код символа &#039;@&#039;, или, что то же самое, число 64&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, b); //вывод: 64&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, b); //вывод: @&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод символов ====&lt;br /&gt;
&lt;br /&gt;
Если в программе нужно использовать символьную константу, она заключается в &#039;&#039;&#039;одинарные&#039;&#039;&#039; кавычки.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;$&#039;; //в переменную x записывается код знака доллара - 36&lt;br /&gt;
&lt;br /&gt;
Для ввода одного символа используют scanf() со спецификатором %с.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Важно: спецификаторы %d и %lf при вводе игнорируют пробелы, переводы строки и т. п. Если в программе записано scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «12    34», то a и b будут считаны правильно (a == 12, b == 34).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Однако %c может считывать пробелы и переводы строк. Если в программе записано scanf(&amp;quot;%c%c&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «X   Y», то в b будет записан пробел (a == &#039;X&#039;, b == &#039; &#039;).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Если этого нужно избежать, перед %c нужно ставить пробел. Это указание для scanf: пропустить все пробельные символы (если они есть) и прочитать первый непробельный.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 char x;&lt;br /&gt;
 scanf(&amp;quot; %c&amp;quot;, &amp;amp;x);&lt;br /&gt;
&lt;br /&gt;
Для вывода одного символа используется printf() со спецификатором %c. Если нужно вывести не символ, а его код, следует использовать спецификатор %d.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;?&#039;&lt;br /&gt;
 printf(&amp;quot;Code of %c is %d&amp;quot;); //выведет Code of ? is 63&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия с символами ====&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить, является ли символ цифрой, можно использовать тот факт, что коды символов от &#039;0&#039; до &#039;9&#039; в таблице ASCII расположены последовательно. Следовательно, если символ — цифра, то его код должен находиться между &#039;0&#039; и &#039;9&#039;.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;0&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;9&#039;) //проверка, является ли x цифрой&lt;br /&gt;
&lt;br /&gt;
Аналогично производятся проверки, является ли символ строчной (заглавной) латинской буквой.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;a&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;z&#039;) //проверка, является ли x строчной буквой&lt;br /&gt;
&lt;br /&gt;
 if (&#039;A&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;Z&#039;) //проверка, является ли x заглавной буквой&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать из строчной буквы заглавную, нужно добавить к коду строчной буквы смещение до блока заглавных букв (то есть дистанцию от символа &#039;a&#039; до символа &#039;A&#039;)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;A&#039; - &#039;a&#039;); //преобразование строчной буквы в заглавную (x должен быть строчной буквой!)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;a&#039; - &#039;A&#039;); //преобразование заглавной буквы в строчную (x должен быть заглавной буквой!)&lt;br /&gt;
&lt;br /&gt;
Работу с символами облегчает библиотека &amp;amp;lt;ctype.h&amp;amp;gt;, которая содержит множество удобных функций:&lt;br /&gt;
* isdigit(x) — проверка, является ли x цифрой ( &amp;lt;tt&amp;gt;if (isdigit(x))&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* islower(x) — проверка, является ли x строчной буквой&lt;br /&gt;
* isupper(x) — проверка, является ли x заглавной буквой&lt;br /&gt;
* isalpha(x) — проверка, является ли x буквой&lt;br /&gt;
* tolower(x) — возвращает строчную букву, соответствующую x ( &amp;lt;tt&amp;gt;x = tolower(x);&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* toupper(x) — возвращает заглавную букву, соответствующую x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Строки в языке C ====&lt;br /&gt;
&lt;br /&gt;
Строки — это массивы символов.&lt;br /&gt;
&lt;br /&gt;
 char name[6] = &amp;quot;Vasya&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для обозначения конца строки используется специальный символ — завершающий ноль (&#039;\n&#039;, ASCII-код 0). Поэтому &#039;&#039;&#039;для хранения строки из N символов требуется массив из не менее чем (N + 1) ячеек&#039;&#039;&#039; (например, для строки &amp;quot;Vasya&amp;quot; нужно не менее 6 ячеек).&lt;br /&gt;
&lt;br /&gt;
Если завершающий ноль будет утерян, строку не получится обработать стандартными функциями (например, print).&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод строк ====&lt;br /&gt;
&lt;br /&gt;
Строковые константы записываются в &#039;&#039;&#039;двойных&#039;&#039;&#039; кавычках.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;до пробела&#039;&#039;&#039; используется scanf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%s&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;целиком (до перевода строки)&#039;&#039;&#039; используется scanf() со спецификатором %[^\n].&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%[^\n]&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily Pupkin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для вывода строк используется printf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 printf(&amp;quot;Welcome to %s&amp;quot;, city); //выведет Welcome to Ulyanovsk&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия со строками ====&lt;br /&gt;
&lt;br /&gt;
Для обхода всех символов строки используется цикл for, продолжающийся до тех пор, пока текущим символом не окажется завершающий ноль.&lt;br /&gt;
&lt;br /&gt;
 char s[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 for (int i = 0; s[i] != 0; i++) {&lt;br /&gt;
     printf(&amp;quot;%c &amp;quot;, s[i]);           //выведет U l y a n o v s k&lt;br /&gt;
 }&lt;br /&gt;
Полезные функции для работы со строками содержатся в заголовочном файле [http://www.cplusplus.com/reference/cstring/ &amp;lt;string.h&amp;gt;]. Наиболее часто используемые из них:&lt;br /&gt;
* strlen(s) — возвращает длину строки s (без учёта завершающего нуля);&lt;br /&gt;
* strcpy(s1, s2) — копирует строку s2 в s1 (аналог несуществующей операции s1 = s2);&lt;br /&gt;
* strcat(s1, s2) — дописывает строку s2 к s1 (аналог несуществующей операции s1 += s2);&lt;br /&gt;
* strcmp(s1, s2) — возвращает 0, если строки s1 и s2 равны, отрицательное число, если s1 лексикографически меньше s2, либо положительное число, если s2 лексикографически больше s2 (аналог несуществующих операций s1 == s2, s1 &amp;lt; s2, s1 &amp;gt; s2);&lt;br /&gt;
* strchr(s, x) — возвращает указатель на первое вхождение символа x в строку s либо 0, если x не содержится в s. Чтобы получить индекс символа x в строке s, нужно записать &amp;lt;tt&amp;gt;int index = strchr(s, x) - s;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* strstr(s1, s2) — возвращает указатель на первое вхождение строки s2 в строку s1 либо 0, если s2 не содержится в s1. Чтобы получить индекс строки s2 в строке s1, нужно записать &amp;lt;tt&amp;gt;int index = strstr(s1, s2x) - s1;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Строки в стиле C++ ====&lt;br /&gt;
В языке C++ для хранения строк используется специальный тип string. Чтобы получить к нему доступ, нужно подключить заголовочный файл [http://www.cplusplus.com/reference/string/ &amp;lt;string&amp;gt;] (не путать со &amp;lt;string.h&amp;gt;!) и пространство имён std.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     string s = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Строки типа string нельзя вводить при помощи scanf. Для ввода следует использовать одну из двух возможностей:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     char buffer[100];&lt;br /&gt;
     scanf(&amp;quot; %s&amp;quot;, &amp;amp;buffer);&lt;br /&gt;
     string s = buffer;&lt;br /&gt;
 }&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; |&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     string s;&lt;br /&gt;
     cin &amp;gt;&amp;gt; s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для вывода строки типа string с помощью printf необходимо предварительно вызвать у строки метод .c_str(), возвращающий аналог строки в старом стиле.&lt;br /&gt;
&lt;br /&gt;
 string s = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
 printf(&amp;quot;%s&amp;quot;, s.c_str());&lt;br /&gt;
&lt;br /&gt;
Возможности строк типа string:&lt;br /&gt;
&lt;br /&gt;
* Индексация отдельных символов через квадратные скобки, как у массивов;&lt;br /&gt;
* Получение размера строки вызовом метода .size();&lt;br /&gt;
* Присваивание строк оператором =;&lt;br /&gt;
* Конкатенация строк операторами + и +=;&lt;br /&gt;
* Сравнение строк операторами ==, !=, &amp;lt;, &amp;gt;;&lt;br /&gt;
* Поиск символов и подстрок в строке вызовом метода .find() (возвращает индекс вхождения либо -1, если вхождение не найдено);&lt;br /&gt;
* Получение подстрок вызовом метода .substr().&lt;br /&gt;
&lt;br /&gt;
=== Функции ===&lt;br /&gt;
==== Определение функций ====&lt;br /&gt;
Определение функции в языке C++ имеет следующий вид (количество параметров может быть иным):&lt;br /&gt;
&lt;br /&gt;
 типВозвращаемогоЗначения имяФункции(типПараметра1 имяПараметра1, типПараметра2 имяПараметра2) {&lt;br /&gt;
     &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Для возврата значения из функции используется ключевое слово return. При достижении строки с return функция немедленно завершается, а в место её вызова подставляется значение, записанное справа от return.&lt;br /&gt;
&lt;br /&gt;
Пример: функции, вычисляющие площадь различных геометрических фигур:&lt;br /&gt;
&lt;br /&gt;
 double rectangleArea(double width, double height) {&lt;br /&gt;
     return width * height;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double triangleArea(double a, double b, double c) {&lt;br /&gt;
     double p = (a + b + c) / 2;&lt;br /&gt;
     return sqrt(p * (p - a) * (p - b) * (p - c));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double circleArea(double radius) {&lt;br /&gt;
     double pi = acos(-1.0);&lt;br /&gt;
     return pi * radius * radius;&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
Вызвать функцию может любая другая функция, расположенная ниже:&lt;br /&gt;
&lt;br /&gt;
 double segmentLength(double ax, double ay, double dx, double by) {&lt;br /&gt;
     double dx = ax - bx;&lt;br /&gt;
     double dy = ay - by;&lt;br /&gt;
     return sqrt(dx * dx + dy * dy);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 double triangleArea(double ax, double ay, double dx, double by, double cx, double cy) {&lt;br /&gt;
     double ab = segmentLength(ax, ay, bx, by);&lt;br /&gt;
     double ac = segmentLength(ax, ay, cx, cy);&lt;br /&gt;
     double bc = segmentLength(bx, by, cx, cy);&lt;br /&gt;
     double p = (ab + ac + bc) / 2;&lt;br /&gt;
     return sqrt(p * (p - ab) * (p - ac) * (p - bc));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     printf(&amp;quot;%lf&amp;quot;, triangleArea(0, 0, 10, 0, 0, 10));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Функция может не иметь возвращаемого значения. Для обозначения такой функции используется ключевое слово void.&lt;br /&gt;
&lt;br /&gt;
 //функция, n раз выводящая символ c&lt;br /&gt;
 void repeatSymbol(char c, int n) {&lt;br /&gt;
     for (int i = 0; i &amp;lt; n; i++)&lt;br /&gt;
         printf(&amp;quot;%c&amp;quot;, c);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Передача параметров в функцию ====&lt;br /&gt;
&lt;br /&gt;
По умолчанию используется передача параметров по значению. Её особенности:&lt;br /&gt;
&lt;br /&gt;
* Внутри функции создаются &#039;&#039;&#039;копии&#039;&#039;&#039; переданных переменных;&lt;br /&gt;
* Изменения, произошедшие с параметрами внутри функции, &#039;&#039;&#039;не сохранятся&#039;&#039;&#039; вне функции.&lt;br /&gt;
&lt;br /&gt;
 void swap(int a, int b) {&lt;br /&gt;
     int t = a;&lt;br /&gt;
     a = b;&lt;br /&gt;
     b = t;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     int x = 10, y = 20;&lt;br /&gt;
     swap(x, y);&lt;br /&gt;
     printf(&amp;quot;x=%d y=%d&amp;quot;); //будет выведено x=10 y=20&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Старый способ сохранения сделанных внутри функции изменений — передача по указателю (вместо самих переменных передаются их адреса, см. функцию scanf).&lt;br /&gt;
&lt;br /&gt;
Современный способ сохранения сделанных внутри функции изменений — передача по ссылке.&lt;br /&gt;
&lt;br /&gt;
Добавление знака &amp;amp; перед именем параметра означает передачу по ссылке. Её особенности:&lt;br /&gt;
&lt;br /&gt;
* Внутри функции используются &#039;&#039;&#039;непосредственно сами&#039;&#039;&#039; переданные переменные;&lt;br /&gt;
* Изменения, произошедшие с параметрами внутри функции, &#039;&#039;&#039;сохранятся&#039;&#039;&#039; вне функции;&lt;br /&gt;
* По ссылке невозможно передать константы.&lt;br /&gt;
&lt;br /&gt;
 void swap(int &amp;amp;a, int &amp;amp;b) {&lt;br /&gt;
     int t = a;&lt;br /&gt;
     a = b;&lt;br /&gt;
     b = t;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     int x = 10, y = 20;&lt;br /&gt;
     swap(x, y);&lt;br /&gt;
     printf(&amp;quot;x=%d y=%d&amp;quot;); //будет выведено x=20 y=10&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Массивы всегда передаются по ссылке. При передаче массива в функцию он теряет возможность узнать свой размер, поэтому часто вместе с массивом передаётся количество элементов в нём.&lt;br /&gt;
&lt;br /&gt;
 int sum(int a[], int size) {&lt;br /&gt;
     int res = 0;&lt;br /&gt;
     for (int i = 0; i &amp;lt; size; i++)&lt;br /&gt;
         res += a[i];&lt;br /&gt;
     return res;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2356</id>
		<title>Основы программирования на C++</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2356"/>
		<updated>2019-05-01T16:57:30Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка к работе ==&lt;br /&gt;
&lt;br /&gt;
=== Установка среды разработки ===&lt;br /&gt;
* [http://www.visualstudio.com/ru/thank-you-downloading-visual-studio/?sku=Community&amp;amp;rel=15 Visual Studio 2017 Community] (для Windows 7 — Windows 10)&lt;br /&gt;
: Выберите только вариант «Разработка классических приложений на C++»&lt;br /&gt;
* [http://download.microsoft.com/download/1/D/9/1D9A6C0E-FC89-43EE-9658-B9F0E3A76983/vc_web.exe Visual Studio 2010] (для Windows XP, но также &#039;&#039;&#039;&amp;lt;span style=&#039;color:red;&#039;&amp;gt;рекомендуется, если вы не хотите выкачивать большие установочные файлы&amp;lt;/span&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Создание проекта в Visual Studio ===&lt;br /&gt;
Создаём проект:&lt;br /&gt;
&lt;br /&gt;
Меню Файл (File) → Создать (New) → Проект... (Project...) → слева выбираем Visual C++ → справа выбираем Пустой проект (Empty Project) → вводим имя проекта → OK.&lt;br /&gt;
&lt;br /&gt;
Добавляем в проект новый файл:&lt;br /&gt;
&lt;br /&gt;
Меню Проект (Project) → Добавить новый элемент... (Add New Item...) → Файл C++ (C++ File) → вводим имя файла → Добавить (Add).&lt;br /&gt;
&lt;br /&gt;
=== Решение проблем ===&lt;br /&gt;
* &#039;&#039;&#039;Visual Studio не позволяет мне использовать scanf&#039;&#039;&#039;&lt;br /&gt;
: Меню Проект (Project) → Свойства (Properties) → C/C++ → Проверки SDL (SDL Checks) → выбрать значение Нет (No) → OK.&lt;br /&gt;
: Другой способ: скопировать в начало программы строку &amp;lt;tt&amp;gt;#define _CRT_SECURE_NO_WARNINGS&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;При запуске появляется окно Следующий проект устарел. Выполнить его сборку? (This project is out of date. Would you like to build it?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Да (Yes).&lt;br /&gt;
* &#039;&#039;&#039;Если программа содержит ошибки, при запуске появляется окно Возникли ошибки сборки. Продолжить и запустить последний успешно построенный вариант? (There were build errors. Would you like to continue and run the last successful build?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Нет (No).&lt;br /&gt;
* &#039;&#039;&#039;Где посмотреть, какие у меня ошибки?&#039;&#039;&#039;&lt;br /&gt;
: Меню Вид (View) → Список ошибок (Error List). В более старых версиях: View → Other Windows → Error List.&lt;br /&gt;
&lt;br /&gt;
== Вспомогательные материалы к занятиям ==&lt;br /&gt;
=== Введение. Переменные. Ввод-вывод ===&lt;br /&gt;
==== Минимальная программа на C++ ====&lt;br /&gt;
 int main() {&lt;br /&gt;
     &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
В любой программе всегда должна быть функция main. Фигурные скобки обозначают начало и конец функции, все команды записываются внутри.&lt;br /&gt;
&lt;br /&gt;
До функции main, в самом начале файла, обычно указываются директивы #include (например #include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==== Использование переменных ====&lt;br /&gt;
&lt;br /&gt;
Чтобы добавить в программу переменную, укажите её тип, название и, если необходимо, начальное значение.&lt;br /&gt;
&lt;br /&gt;
 int radius = 100;                           //целое число radius со значением 100&lt;br /&gt;
 double circleArea = 3.14 * radius * radius; //дробное число circleArea, значение вычисляется по формуле&lt;br /&gt;
&lt;br /&gt;
Переменные могут менять своё значение:&lt;br /&gt;
&lt;br /&gt;
 radius = radius * 2; //радиус увеличился в 2 раза&lt;br /&gt;
&lt;br /&gt;
Часто используемые типы данных:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| int || целые числа || от -2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;-1 (примерно от -2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; до 2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;) || 4 байта&lt;br /&gt;
|-&lt;br /&gt;
| long long || большие целые числа || от -2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt;-1 (примерно от -9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt; до 9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt;) || 8 байт&lt;br /&gt;
|-&lt;br /&gt;
| double || дробные числа || точность 15-16 десятичных цифр || 8 байт&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Вывод при помощи функции printf ====&lt;br /&gt;
&lt;br /&gt;
Функция printf используется для печати на экране. Для использования printf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
printf выводит только то, что указано в кавычках. Для вывода перевода строки используется специальный символ \n.&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;Hello World!\n&amp;quot;);     //выводит Hello World!&lt;br /&gt;
 printf(&amp;quot;My name\nis Vasya.&amp;quot;); //выводит My name, а затем на новой строке is Vasya.&lt;br /&gt;
&lt;br /&gt;
printf может выводить переменные и значения выражений, но для этого в строке с кавычками нужно указать места («окошечки»), куда следует подставлять значения. Места указываются при помощи спецификаторов.&lt;br /&gt;
&lt;br /&gt;
 int salary = 100;&lt;br /&gt;
 printf(&amp;quot;Your salary is %d $.\n&amp;quot;, salary);               //выводит Your salary is 100 $.&lt;br /&gt;
 printf(&amp;quot;Next year you&#039;ll have %.2lf $.&amp;quot;, salary * 1.5); //выводит Next year you&#039;ll have 150.00 $.&lt;br /&gt;
&lt;br /&gt;
Часто используемые спецификаторы:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| %d || int&lt;br /&gt;
|-&lt;br /&gt;
| %lld || long long &lt;br /&gt;
|-&lt;br /&gt;
| %lf || double&lt;br /&gt;
|-&lt;br /&gt;
| %.Xlf || double, X знаков после точки (например, %.2lf — 2 знака после точки)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
printf может выводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;P:%d S:%d&amp;quot;, 2 * (3 + 4), 3 * 4); //выводит P:14 S:12&lt;br /&gt;
&lt;br /&gt;
==== Ввод при помощи функции scanf ====&lt;br /&gt;
&lt;br /&gt;
Функция scanf используется для ввода с клавиатуры. Для использования scanf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
scanf похож на printf, но перед каждой переменной следует ставить амперсанд &amp;amp;:&lt;br /&gt;
&lt;br /&gt;
 int age;&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;age); //значение переменной age вводится с клавиатуры&lt;br /&gt;
&lt;br /&gt;
scanf может вводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 int time;&lt;br /&gt;
 double speed;&lt;br /&gt;
 scanf(&amp;quot;%d%lf&amp;quot;, &amp;amp;time, &amp;amp;speed); //значения переменных time и speed вводятся с клавиатуры&lt;br /&gt;
&lt;br /&gt;
=== Условия ===&lt;br /&gt;
&lt;br /&gt;
==== Простые условия ====&lt;br /&gt;
Конструкция if позволяет выполнять в программе различные действия в зависимости от условий.&lt;br /&gt;
&lt;br /&gt;
 if (password == 12345) {        //если значение переменной password равняется 12345,&lt;br /&gt;
     printf(&amp;quot;Welcome!&amp;quot;);         //вывести Welcome!&lt;br /&gt;
 } else {                        //в противном случае&lt;br /&gt;
     printf(&amp;quot;Access denied!&amp;quot;);   //вывести Access denied!&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Если ветка else не используется, её можно не писать:&lt;br /&gt;
&lt;br /&gt;
 if (lives &amp;lt;= 0) {               //если количество жизней меньше или равно нулю,&lt;br /&gt;
     printf(&amp;quot;Game over!&amp;quot;);       //вывести Game over!&lt;br /&gt;
 }                               //иначе ничего не делать&lt;br /&gt;
&lt;br /&gt;
Можно скомбинировать несколько условий при помощи else if:&lt;br /&gt;
&lt;br /&gt;
 if (mark == 5) {&lt;br /&gt;
     printf(&amp;quot;Excellent!&amp;quot;);&lt;br /&gt;
 } else if (mark == 4) {&lt;br /&gt;
     printf(&amp;quot;Good!&amp;quot;);&lt;br /&gt;
 } else if (mark == 3) {&lt;br /&gt;
     printf(&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
 } else {&lt;br /&gt;
     printf(&amp;quot;Bad&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операции сравнения ====&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;/tt&amp;gt; || меньше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;=&amp;lt;/tt&amp;gt; || меньше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; || больше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;=&amp;lt;/tt&amp;gt; || больше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; || равно (не путать с &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;!=&amp;lt;/tt&amp;gt; || не равно&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Условия со связками И, ИЛИ ====&lt;br /&gt;
&lt;br /&gt;
Связка И (&amp;amp;&amp;amp;) позволяет проверить, что &#039;&#039;&#039;обе&#039;&#039;&#039; части условия &#039;&#039;&#039;одновременно&#039;&#039;&#039; являются истинными:&lt;br /&gt;
&lt;br /&gt;
 if (20 &amp;lt;= age &amp;amp;&amp;amp; age &amp;lt;= 30)  //если возраст от 20 до 30 лет включительно&lt;br /&gt;
&lt;br /&gt;
Связка ИЛИ (||) позволяет проверить, что &#039;&#039;&#039;хотя бы одна&#039;&#039;&#039; из частей условия является истинной:&lt;br /&gt;
&lt;br /&gt;
 if (age &amp;lt; 20 || 30 &amp;lt; age)    //если возраст меньше 20 или больше 30 лет&lt;br /&gt;
&lt;br /&gt;
==== Поиск максимума или минимума ====&lt;br /&gt;
&lt;br /&gt;
Чтобы найти наибольшее из значений нескольких переменных, следует сделать следующие шаги:&lt;br /&gt;
&lt;br /&gt;
* Создать новую переменную, в которой в итоге будет находиться значение максимума, и положить туда значение первой переменной;&lt;br /&gt;
* Сравнить максимум со второй переменной, и если вторая переменная больше, положить в максимум значение второй переменной;&lt;br /&gt;
* Сравнить максимум с третьей переменной, и если третья переменная больше, положить в максимум значение третьей переменной;&lt;br /&gt;
* Повторить для оставшихся переменных.&lt;br /&gt;
&lt;br /&gt;
 int maxValue = a;&lt;br /&gt;
 if (b &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = b;&lt;br /&gt;
 }&lt;br /&gt;
 if (c &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = c;&lt;br /&gt;
 }&lt;br /&gt;
 if (d &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = d;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Минимум определяется аналогичным образом (знаки &amp;gt; следует изменить на &amp;lt;).&lt;br /&gt;
&lt;br /&gt;
=== Циклы ===&lt;br /&gt;
==== Цикл while ====&lt;br /&gt;
Циклы — это конструкции языка C++, позволяющие несколько раз выполнять однотипные действия.&lt;br /&gt;
&lt;br /&gt;
Общий вид цикла while:&lt;br /&gt;
&lt;br /&gt;
 while (&amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Перед началом цикла будет выполнена проверка, является ли &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; истинным. Если это так, то выполняются действия, указанные внутри цикла (пока всё очень похоже на if). Однако, в отличие от if, при достижении закрывающей скобки цикла while мы перемещаемся обратно на его начало, где вновь будет проверено &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;, и если оно всё ещё истинно, то снова выполняются действия внутри цикла, и так далее. Это продолжается до тех пор, пока &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; не перестанет быть истинным (или пока не встретится оператор break; см. далее).&lt;br /&gt;
&lt;br /&gt;
Цикл while удобно использовать тогда, когда заранее неизвестно, сколько именно повторов требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 //В банке лежит n рублей, каждый месяц сумма увеличивается на 10%.&lt;br /&gt;
 //Сколько месяцев потребуется, чтобы скопить миллион рублей?&lt;br /&gt;
 int money = n, months = 0; //изначально денег в банке - n, прошло месяцев - 0&lt;br /&gt;
 while (money &amp;lt; 1000000) {  //пока не накопится миллион или больше,&lt;br /&gt;
     money *= 1.1;          //сумма увеличивается на 10% (дробная часть отбрасывается)&lt;br /&gt;
     months++;              //количество месяцев увеличивается на 1&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда money будет больше или равно миллиону&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, months);      //выводим количество прошедших месяцев&lt;br /&gt;
&lt;br /&gt;
 //поиск минимального делителя (большего единицы) числа n&lt;br /&gt;
 int divisor = 2;           //считаем, что минимальный делитель — это двойка&lt;br /&gt;
 while (n % divisor != 0) { //пока n не делится на divisor,&lt;br /&gt;
     n++;                   //увеличиваем divisor&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда n будет делиться на divisor&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, divisor);     //выводим полученный делитель&lt;br /&gt;
&lt;br /&gt;
==== Цикл for ====&lt;br /&gt;
Цикл for удобно использовать тогда, когда количество повторений известно заранее.&lt;br /&gt;
&lt;br /&gt;
Пусть, например, нужно вывести числа от 0 до 9. Это можно сделать при помощи цикла while:&lt;br /&gt;
&lt;br /&gt;
 int i = 0;&lt;br /&gt;
 while (i &amp;lt; 10) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
     i++;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Однако гораздо проще в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Запись цикла for всегда состоит из трёх частей, разделённых точками с запятой (именно точками с запятой, это важно!):&lt;br /&gt;
&lt;br /&gt;
 for (&amp;lt;span style=&#039;color:red&#039;&amp;gt;&amp;amp;lt;инициализация&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:green&#039;&amp;gt;&amp;amp;lt;изменение&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Как правило, внутри цикла for используется некоторая переменная (счётчик). &amp;lt;span style=&#039;color:red&#039;&amp;gt;Первая часть&amp;lt;/span&amp;gt; отвечает за создание счётчика и запись в него начального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:orange&#039;&amp;gt;Вторая часть&amp;lt;/span&amp;gt; содержит условие, при истинности которого цикл продолжает работу (оно имеет точно такой же смысл, как условие в скобках у while). Как правило, здесь проверяется, что счётчик ещё не дошёл до некоторого финального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:green&#039;&amp;gt;Третья часть&amp;lt;/span&amp;gt; показывает, как должен изменяться счётчик от итерации к итерации.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 5; i &amp;lt;= 15; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 5 6 7 8 9 10 11 12 13 14 15&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 30; i &amp;gt;= 20; i--) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 30 29 28 27 26 25 24 23 22 21 20&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt;= 40; i += 5) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 0 5 10 15 20 25 30 35 40&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 1; i &amp;lt; 100; i *= 3) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 1 3 9 27 81 243 729&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операторы break и continue ====&lt;br /&gt;
&lt;br /&gt;
Оператор break досрочно завершает цикл while или for (если при выполнении программы мы встречаем break, мы сразу же перемещаемся за конец цикла):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         break;                 //прервать цикл&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3&lt;br /&gt;
&lt;br /&gt;
Оператор continue досрочно переходит к следующей итерации цикла while или for (если при выполнении программы мы встречаем continue, мы сразу же перемещаемся к началу цикла; если есть счётчик, то он будет изменён):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         continue;              //перейти к следующей итерации&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3 5 6 7 9&lt;br /&gt;
&lt;br /&gt;
=== Массивы ===&lt;br /&gt;
&lt;br /&gt;
==== Объявление и использование массивов ====&lt;br /&gt;
&lt;br /&gt;
Массив — несколько переменных одного типа, имеющих общее имя и различные индексы. Для обращения к ячейке массива требуется написать имя массива, а затем — индекс ячейки в квадратных скобках.&lt;br /&gt;
&lt;br /&gt;
 int x; //одна переменная типа int, 4 байта&lt;br /&gt;
 int a[5]; //массив из 5 ячеек типа int, 20 байт&lt;br /&gt;
&lt;br /&gt;
Ячейки массива имеют индексы от 0 до (SIZE - 1), где SIZE — размер массива.&lt;br /&gt;
&lt;br /&gt;
 int a[10]; //объявлены 10 ячеек: a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]&lt;br /&gt;
 int b[100]; //объявлены 100 ячеек: от a[0] до a[99]&lt;br /&gt;
&lt;br /&gt;
С ячейками массива можно работать как с обычными переменными:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 a[0] = 100;&lt;br /&gt;
 a[1] = a[0] * 2;&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, a[1]); //вывод: 200&lt;br /&gt;
&lt;br /&gt;
При создании массива можно сразу задать ячейкам начальные значения (как и в случае с отдельными переменными). Если этого не сделать, массив изначально будет содержать случайные значения (мусор).&lt;br /&gt;
&lt;br /&gt;
 int x;                      //x — отдельная переменная, содержит случайное значение (мусор)&lt;br /&gt;
 int y = 100;                //y — отдельная переменная, содержит значение 100&lt;br /&gt;
 int a[3];                   //a — массив из 3 ячеек, которые содержат случайные значения (мусор)&lt;br /&gt;
 int b[3] = {100, 200, 300}; //b — массив из 3 ячеек, которые содержат значения 100, 200 и 300&lt;br /&gt;
&lt;br /&gt;
==== Считывание и вывод массивов ====&lt;br /&gt;
&lt;br /&gt;
Если определён массив из 5 ячеек, и значения ячеек вводятся с клавиатуры, можно использовать 5 операций scanf:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[0]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[1]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[2]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[3]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[4]);&lt;br /&gt;
&lt;br /&gt;
Но проще и правильнее в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Часто в задачах размер массива неизвестен заранее, и его также нужно вводить с клавиатуры. В этом случае нужно объявить массив на такое количество ячеек, которого заведомо хватит во всех случаях (как правило, узнать это количество можно из ограничений в разделе «Входные данные»), а затем сделать отдельную переменную size и использовать её.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 int size;                          //объявляем переменную для фактического размера массива&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;size);                //считываем размер массива&lt;br /&gt;
 &lt;br /&gt;
 int a[100010];                     //объявляем массив такой величины, чтобы его хватило для всех тестов&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {   //считываем столько ячеек массива, сколько указано в size&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом выполняется вывод ячеек массива на печать:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Символы и строки ===&lt;br /&gt;
==== Символы в языке С ====&lt;br /&gt;
Язык С использует [http://ru.wikipedia.org/wiki/ASCII кодировочную таблицу ASCII], в которой различным знакам сопоставлены коды от 0 до 127. В языке C &#039;&#039;&#039;отсутствует отдельный тип для хранения символов&#039;&#039;&#039;, а &#039;&#039;&#039;маленькие целые числа (от 0 до 127) всегда могут интерпретироваться как символы и наоборот&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для хранения кодов удобно использовать 8-битный целый тип char (может представлять целые числа от -128 до 127, чего как раз хватает для кодов символов).&lt;br /&gt;
&lt;br /&gt;
 char a = 33;       //a - это число 33, или, что то же самое, код символа &#039;!&#039;&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, a); //вывод: 33&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, a); //вывод: !&lt;br /&gt;
 &lt;br /&gt;
 char b = &#039;@&#039;;      //b - это код символа &#039;@&#039;, или, что то же самое, число 64&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, b); //вывод: 64&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, b); //вывод: @&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод символов ====&lt;br /&gt;
&lt;br /&gt;
Если в программе нужно использовать символьную константу, она заключается в &#039;&#039;&#039;одинарные&#039;&#039;&#039; кавычки.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;$&#039;; //в переменную x записывается код знака доллара - 36&lt;br /&gt;
&lt;br /&gt;
Для ввода одного символа используют scanf() со спецификатором %с.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Важно: спецификаторы %d и %lf при вводе игнорируют пробелы, переводы строки и т. п. Если в программе записано scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «12    34», то a и b будут считаны правильно (a == 12, b == 34).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Однако %c может считывать пробелы и переводы строк. Если в программе записано scanf(&amp;quot;%c%c&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «X   Y», то в b будет записан пробел (a == &#039;X&#039;, b == &#039; &#039;).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Если этого нужно избежать, перед %c нужно ставить пробел. Это указание для scanf: пропустить все пробельные символы (если они есть) и прочитать первый непробельный.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 char x;&lt;br /&gt;
 scanf(&amp;quot; %c&amp;quot;, &amp;amp;x);&lt;br /&gt;
&lt;br /&gt;
Для вывода одного символа используется printf() со спецификатором %c. Если нужно вывести не символ, а его код, следует использовать спецификатор %d.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;?&#039;&lt;br /&gt;
 printf(&amp;quot;Code of %c is %d&amp;quot;); //выведет Code of ? is 63&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия с символами ====&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить, является ли символ цифрой, можно использовать тот факт, что коды символов от &#039;0&#039; до &#039;9&#039; в таблице ASCII расположены последовательно. Следовательно, если символ — цифра, то его код должен находиться между &#039;0&#039; и &#039;9&#039;.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;0&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;9&#039;) //проверка, является ли x цифрой&lt;br /&gt;
&lt;br /&gt;
Аналогично производятся проверки, является ли символ строчной (заглавной) латинской буквой.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;a&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;z&#039;) //проверка, является ли x строчной буквой&lt;br /&gt;
&lt;br /&gt;
 if (&#039;A&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;Z&#039;) //проверка, является ли x заглавной буквой&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать из строчной буквы заглавную, нужно добавить к коду строчной буквы смещение до блока заглавных букв (то есть дистанцию от символа &#039;a&#039; до символа &#039;A&#039;)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;A&#039; - &#039;a&#039;); //преобразование строчной буквы в заглавную (x должен быть строчной буквой!)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;a&#039; - &#039;A&#039;); //преобразование заглавной буквы в строчную (x должен быть заглавной буквой!)&lt;br /&gt;
&lt;br /&gt;
Работу с символами облегчает библиотека &amp;amp;lt;ctype.h&amp;amp;gt;, которая содержит множество удобных функций:&lt;br /&gt;
* isdigit(x) — проверка, является ли x цифрой ( &amp;lt;tt&amp;gt;if (isdigit(x))&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* islower(x) — проверка, является ли x строчной буквой&lt;br /&gt;
* isupper(x) — проверка, является ли x заглавной буквой&lt;br /&gt;
* isalpha(x) — проверка, является ли x буквой&lt;br /&gt;
* tolower(x) — возвращает строчную букву, соответствующую x ( &amp;lt;tt&amp;gt;x = tolower(x);&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* toupper(x) — возвращает заглавную букву, соответствующую x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Строки в языке C ====&lt;br /&gt;
&lt;br /&gt;
Строки — это массивы символов.&lt;br /&gt;
&lt;br /&gt;
 char name[6] = &amp;quot;Vasya&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для обозначения конца строки используется специальный символ — завершающий ноль (&#039;\n&#039;, ASCII-код 0). Поэтому &#039;&#039;&#039;для хранения строки из N символов требуется массив из не менее чем (N + 1) ячеек&#039;&#039;&#039; (например, для строки &amp;quot;Vasya&amp;quot; нужно не менее 6 ячеек).&lt;br /&gt;
&lt;br /&gt;
Если завершающий ноль будет утерян, строку не получится обработать стандартными функциями (например, print).&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод строк ====&lt;br /&gt;
&lt;br /&gt;
Строковые константы записываются в &#039;&#039;&#039;двойных&#039;&#039;&#039; кавычках.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;до пробела&#039;&#039;&#039; используется scanf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%s&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;целиком (до перевода строки)&#039;&#039;&#039; используется scanf() со спецификатором %[^\n].&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%[^\n]&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily Pupkin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для вывода строк используется printf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 printf(&amp;quot;Welcome to %s&amp;quot;, city); //выведет Welcome to Ulyanovsk&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия со строками ====&lt;br /&gt;
&lt;br /&gt;
Для обхода всех символов строки используется цикл for, продолжающийся до тех пор, пока текущим символом не окажется завершающий ноль.&lt;br /&gt;
&lt;br /&gt;
 char s[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 for (int i = 0; s[i] != 0; i++) {&lt;br /&gt;
     printf(&amp;quot;%c &amp;quot;, s[i]);           //выведет U l y a n o v s k&lt;br /&gt;
 }&lt;br /&gt;
Полезные функции для работы со строками содержатся в заголовочном файле [http://www.cplusplus.com/reference/cstring/ &amp;lt;string.h&amp;gt;]. Наиболее часто используемые из них:&lt;br /&gt;
* strlen(s) — возвращает длину строки s (без учёта завершающего нуля);&lt;br /&gt;
* strcpy(s1, s2) — копирует строку s2 в s1 (аналог несуществующей операции s1 = s2);&lt;br /&gt;
* strcat(s1, s2) — дописывает строку s2 к s1 (аналог несуществующей операции s1 += s2);&lt;br /&gt;
* strcmp(s1, s2) — возвращает 0, если строки s1 и s2 равны, отрицательное число, если s1 лексикографически меньше s2, либо положительное число, если s2 лексикографически больше s2 (аналог несуществующих операций s1 == s2, s1 &amp;lt; s2, s1 &amp;gt; s2);&lt;br /&gt;
* strchr(s, x) — возвращает указатель на первое вхождение символа x в строку s либо 0, если x не содержится в s. Чтобы получить индекс символа x в строке s, нужно записать &amp;lt;tt&amp;gt;int index = strchr(s, x) - s;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* strstr(s1, s2) — возвращает указатель на первое вхождение строки s2 в строку s1 либо 0, если s2 не содержится в s1. Чтобы получить индекс строки s2 в строке s1, нужно записать &amp;lt;tt&amp;gt;int index = strstr(s1, s2x) - s1;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Строки в стиле C++ ====&lt;br /&gt;
В языке C++ для хранения строк используется специальный тип string. Чтобы получить к нему доступ, нужно подключить заголовочный файл [http://www.cplusplus.com/reference/string/ &amp;lt;string&amp;gt;] (не путать со &amp;lt;string.h&amp;gt;!) и пространство имён std.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     string s = &amp;quot;Hello!&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Строки типа string нельзя вводить при помощи scanf. Для ввода следует использовать одну из двух возможностей:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     char buffer[100];&lt;br /&gt;
     scanf(&amp;quot; %s&amp;quot;, &amp;amp;buffer);&lt;br /&gt;
     string s = buffer;&lt;br /&gt;
 }&lt;br /&gt;
| width=&amp;quot;10px&amp;quot; |&lt;br /&gt;
| width=&amp;quot;50%&amp;quot;  |&lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;&lt;br /&gt;
 #include &amp;lt;string&amp;gt;&lt;br /&gt;
 using namespace std;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
     string s;&lt;br /&gt;
     cin &amp;gt;&amp;gt; s;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для вывода строки типа string с помощью printf необходимо предварительно вызвать у строки метод .c_str(), возвращающий аналог строки в старом стиле.&lt;br /&gt;
&lt;br /&gt;
 string s = &amp;quot;Hello&amp;quot;;&lt;br /&gt;
 printf(&amp;quot;%s&amp;quot;, s.c_str());&lt;br /&gt;
&lt;br /&gt;
Возможности строк типа string:&lt;br /&gt;
&lt;br /&gt;
* Индексация отдельных символов через квадратные скобки, как у массивов;&lt;br /&gt;
* Получение размера строки вызовом метода .size();&lt;br /&gt;
* Присваивание строк оператором =;&lt;br /&gt;
* Конкатенация строк операторами + и +=;&lt;br /&gt;
* Сравнение строк операторами ==, !=, &amp;lt;, &amp;gt;;&lt;br /&gt;
* Поиск символов и подстрок в строке вызовом метода .find() (возвращает индекс вхождения либо -1, если вхождение не найдено);&lt;br /&gt;
* Получение подстрок вызовом метода .substr().&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9A%D0%A8_%D0%A4%D0%98%D0%A1%D0%A2._%D0%98%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=2355</id>
		<title>КШ ФИСТ. Инженерное программирование</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9A%D0%A8_%D0%A4%D0%98%D0%A1%D0%A2._%D0%98%D0%BD%D0%B6%D0%B5%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=2355"/>
		<updated>2019-05-01T16:53:53Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: Spiritum переименовал страницу КШ ФИСТ. Инженерное программирование в Основы программирования на C++&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Основы программирования на C++]]&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2354</id>
		<title>Основы программирования на C++</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2354"/>
		<updated>2019-05-01T16:53:53Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: Spiritum переименовал страницу КШ ФИСТ. Инженерное программирование в Основы программирования на C++&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка к работе ==&lt;br /&gt;
&lt;br /&gt;
=== Установка среды разработки ===&lt;br /&gt;
* [http://www.visualstudio.com/ru/thank-you-downloading-visual-studio/?sku=Community&amp;amp;rel=15 Visual Studio 2017 Community] (для Windows 7 — Windows 10)&lt;br /&gt;
: Выберите только вариант «Разработка классических приложений на C++»&lt;br /&gt;
* [http://download.microsoft.com/download/1/D/9/1D9A6C0E-FC89-43EE-9658-B9F0E3A76983/vc_web.exe Visual Studio 2010] (для Windows XP, но также &#039;&#039;&#039;&amp;lt;span style=&#039;color:red;&#039;&amp;gt;рекомендуется, если вы не хотите выкачивать большие установочные файлы&amp;lt;/span&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Создание проекта в Visual Studio ===&lt;br /&gt;
Создаём проект:&lt;br /&gt;
&lt;br /&gt;
Меню Файл (File) → Создать (New) → Проект... (Project...) → слева выбираем Visual C++ → справа выбираем Пустой проект (Empty Project) → вводим имя проекта → OK.&lt;br /&gt;
&lt;br /&gt;
Добавляем в проект новый файл:&lt;br /&gt;
&lt;br /&gt;
Меню Проект (Project) → Добавить новый элемент... (Add New Item...) → Файл C++ (C++ File) → вводим имя файла → Добавить (Add).&lt;br /&gt;
&lt;br /&gt;
=== Решение проблем ===&lt;br /&gt;
* &#039;&#039;&#039;Visual Studio не позволяет мне использовать scanf&#039;&#039;&#039;&lt;br /&gt;
: Меню Проект (Project) → Свойства (Properties) → C/C++ → Проверки SDL (SDL Checks) → выбрать значение Нет (No) → OK.&lt;br /&gt;
: Другой способ: скопировать в начало программы строку &amp;lt;tt&amp;gt;#define _CRT_SECURE_NO_WARNINGS&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;При запуске появляется окно Следующий проект устарел. Выполнить его сборку? (This project is out of date. Would you like to build it?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Да (Yes).&lt;br /&gt;
* &#039;&#039;&#039;Если программа содержит ошибки, при запуске появляется окно Возникли ошибки сборки. Продолжить и запустить последний успешно построенный вариант? (There were build errors. Would you like to continue and run the last successful build?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Нет (No).&lt;br /&gt;
* &#039;&#039;&#039;Где посмотреть, какие у меня ошибки?&#039;&#039;&#039;&lt;br /&gt;
: Меню Вид (View) → Список ошибок (Error List). В более старых версиях: View → Other Windows → Error List.&lt;br /&gt;
&lt;br /&gt;
== Вспомогательные материалы к занятиям ==&lt;br /&gt;
=== Введение. Переменные. Ввод-вывод ===&lt;br /&gt;
==== Минимальная программа на C++ ====&lt;br /&gt;
 int main() {&lt;br /&gt;
     &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
В любой программе всегда должна быть функция main. Фигурные скобки обозначают начало и конец функции, все команды записываются внутри.&lt;br /&gt;
&lt;br /&gt;
До функции main, в самом начале файла, обычно указываются директивы #include (например #include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==== Использование переменных ====&lt;br /&gt;
&lt;br /&gt;
Чтобы добавить в программу переменную, укажите её тип, название и, если необходимо, начальное значение.&lt;br /&gt;
&lt;br /&gt;
 int radius = 100;                           //целое число radius со значением 100&lt;br /&gt;
 double circleArea = 3.14 * radius * radius; //дробное число circleArea, значение вычисляется по формуле&lt;br /&gt;
&lt;br /&gt;
Переменные могут менять своё значение:&lt;br /&gt;
&lt;br /&gt;
 radius = radius * 2; //радиус увеличился в 2 раза&lt;br /&gt;
&lt;br /&gt;
Часто используемые типы данных:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| int || целые числа || от -2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;-1 (примерно от -2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; до 2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;) || 4 байта&lt;br /&gt;
|-&lt;br /&gt;
| long long || большие целые числа || от -2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt;-1 (примерно от -9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt; до 9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt;) || 8 байт&lt;br /&gt;
|-&lt;br /&gt;
| double || дробные числа || точность 15-16 десятичных цифр || 8 байт&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Вывод при помощи функции printf ====&lt;br /&gt;
&lt;br /&gt;
Функция printf используется для печати на экране. Для использования printf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
printf выводит только то, что указано в кавычках. Для вывода перевода строки используется специальный символ \n.&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;Hello World!\n&amp;quot;);     //выводит Hello World!&lt;br /&gt;
 printf(&amp;quot;My name\nis Vasya.&amp;quot;); //выводит My name, а затем на новой строке is Vasya.&lt;br /&gt;
&lt;br /&gt;
printf может выводить переменные и значения выражений, но для этого в строке с кавычками нужно указать места («окошечки»), куда следует подставлять значения. Места указываются при помощи спецификаторов.&lt;br /&gt;
&lt;br /&gt;
 int salary = 100;&lt;br /&gt;
 printf(&amp;quot;Your salary is %d $.\n&amp;quot;, salary);               //выводит Your salary is 100 $.&lt;br /&gt;
 printf(&amp;quot;Next year you&#039;ll have %.2lf $.&amp;quot;, salary * 1.5); //выводит Next year you&#039;ll have 150.00 $.&lt;br /&gt;
&lt;br /&gt;
Часто используемые спецификаторы:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| %d || int&lt;br /&gt;
|-&lt;br /&gt;
| %lld || long long &lt;br /&gt;
|-&lt;br /&gt;
| %lf || double&lt;br /&gt;
|-&lt;br /&gt;
| %.Xlf || double, X знаков после точки (например, %.2lf — 2 знака после точки)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
printf может выводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;P:%d S:%d&amp;quot;, 2 * (3 + 4), 3 * 4); //выводит P:14 S:12&lt;br /&gt;
&lt;br /&gt;
==== Ввод при помощи функции scanf ====&lt;br /&gt;
&lt;br /&gt;
Функция scanf используется для ввода с клавиатуры. Для использования scanf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
scanf похож на printf, но перед каждой переменной следует ставить амперсанд &amp;amp;:&lt;br /&gt;
&lt;br /&gt;
 int age;&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;age); //значение переменной age вводится с клавиатуры&lt;br /&gt;
&lt;br /&gt;
scanf может вводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 int time;&lt;br /&gt;
 double speed;&lt;br /&gt;
 scanf(&amp;quot;%d%lf&amp;quot;, &amp;amp;time, &amp;amp;speed); //значения переменных time и speed вводятся с клавиатуры&lt;br /&gt;
&lt;br /&gt;
=== Условия ===&lt;br /&gt;
&lt;br /&gt;
==== Простые условия ====&lt;br /&gt;
Конструкция if позволяет выполнять в программе различные действия в зависимости от условий.&lt;br /&gt;
&lt;br /&gt;
 if (password == 12345) {        //если значение переменной password равняется 12345,&lt;br /&gt;
     printf(&amp;quot;Welcome!&amp;quot;);         //вывести Welcome!&lt;br /&gt;
 } else {                        //в противном случае&lt;br /&gt;
     printf(&amp;quot;Access denied!&amp;quot;);   //вывести Access denied!&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Если ветка else не используется, её можно не писать:&lt;br /&gt;
&lt;br /&gt;
 if (lives &amp;lt;= 0) {               //если количество жизней меньше или равно нулю,&lt;br /&gt;
     printf(&amp;quot;Game over!&amp;quot;);       //вывести Game over!&lt;br /&gt;
 }                               //иначе ничего не делать&lt;br /&gt;
&lt;br /&gt;
Можно скомбинировать несколько условий при помощи else if:&lt;br /&gt;
&lt;br /&gt;
 if (mark == 5) {&lt;br /&gt;
     printf(&amp;quot;Excellent!&amp;quot;);&lt;br /&gt;
 } else if (mark == 4) {&lt;br /&gt;
     printf(&amp;quot;Good!&amp;quot;);&lt;br /&gt;
 } else if (mark == 3) {&lt;br /&gt;
     printf(&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
 } else {&lt;br /&gt;
     printf(&amp;quot;Bad&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операции сравнения ====&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;/tt&amp;gt; || меньше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;=&amp;lt;/tt&amp;gt; || меньше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; || больше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;=&amp;lt;/tt&amp;gt; || больше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; || равно (не путать с &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;!=&amp;lt;/tt&amp;gt; || не равно&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Условия со связками И, ИЛИ ====&lt;br /&gt;
&lt;br /&gt;
Связка И (&amp;amp;&amp;amp;) позволяет проверить, что &#039;&#039;&#039;обе&#039;&#039;&#039; части условия &#039;&#039;&#039;одновременно&#039;&#039;&#039; являются истинными:&lt;br /&gt;
&lt;br /&gt;
 if (20 &amp;lt;= age &amp;amp;&amp;amp; age &amp;lt;= 30)  //если возраст от 20 до 30 лет включительно&lt;br /&gt;
&lt;br /&gt;
Связка ИЛИ (||) позволяет проверить, что &#039;&#039;&#039;хотя бы одна&#039;&#039;&#039; из частей условия является истинной:&lt;br /&gt;
&lt;br /&gt;
 if (age &amp;lt; 20 || 30 &amp;lt; age)    //если возраст меньше 20 или больше 30 лет&lt;br /&gt;
&lt;br /&gt;
==== Поиск максимума или минимума ====&lt;br /&gt;
&lt;br /&gt;
Чтобы найти наибольшее из значений нескольких переменных, следует сделать следующие шаги:&lt;br /&gt;
&lt;br /&gt;
* Создать новую переменную, в которой в итоге будет находиться значение максимума, и положить туда значение первой переменной;&lt;br /&gt;
* Сравнить максимум со второй переменной, и если вторая переменная больше, положить в максимум значение второй переменной;&lt;br /&gt;
* Сравнить максимум с третьей переменной, и если третья переменная больше, положить в максимум значение третьей переменной;&lt;br /&gt;
* Повторить для оставшихся переменных.&lt;br /&gt;
&lt;br /&gt;
 int maxValue = a;&lt;br /&gt;
 if (b &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = b;&lt;br /&gt;
 }&lt;br /&gt;
 if (c &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = c;&lt;br /&gt;
 }&lt;br /&gt;
 if (d &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = d;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Минимум определяется аналогичным образом (знаки &amp;gt; следует изменить на &amp;lt;).&lt;br /&gt;
&lt;br /&gt;
=== Циклы ===&lt;br /&gt;
==== Цикл while ====&lt;br /&gt;
Циклы — это конструкции языка C++, позволяющие несколько раз выполнять однотипные действия.&lt;br /&gt;
&lt;br /&gt;
Общий вид цикла while:&lt;br /&gt;
&lt;br /&gt;
 while (&amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Перед началом цикла будет выполнена проверка, является ли &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; истинным. Если это так, то выполняются действия, указанные внутри цикла (пока всё очень похоже на if). Однако, в отличие от if, при достижении закрывающей скобки цикла while мы перемещаемся обратно на его начало, где вновь будет проверено &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;, и если оно всё ещё истинно, то снова выполняются действия внутри цикла, и так далее. Это продолжается до тех пор, пока &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; не перестанет быть истинным (или пока не встретится оператор break; см. далее).&lt;br /&gt;
&lt;br /&gt;
Цикл while удобно использовать тогда, когда заранее неизвестно, сколько именно повторов требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 //В банке лежит n рублей, каждый месяц сумма увеличивается на 10%.&lt;br /&gt;
 //Сколько месяцев потребуется, чтобы скопить миллион рублей?&lt;br /&gt;
 int money = n, months = 0; //изначально денег в банке - n, прошло месяцев - 0&lt;br /&gt;
 while (money &amp;lt; 1000000) {  //пока не накопится миллион или больше,&lt;br /&gt;
     money *= 1.1;          //сумма увеличивается на 10% (дробная часть отбрасывается)&lt;br /&gt;
     months++;              //количество месяцев увеличивается на 1&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда money будет больше или равно миллиону&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, months);      //выводим количество прошедших месяцев&lt;br /&gt;
&lt;br /&gt;
 //поиск минимального делителя (большего единицы) числа n&lt;br /&gt;
 int divisor = 2;           //считаем, что минимальный делитель — это двойка&lt;br /&gt;
 while (n % divisor != 0) { //пока n не делится на divisor,&lt;br /&gt;
     n++;                   //увеличиваем divisor&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда n будет делиться на divisor&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, divisor);     //выводим полученный делитель&lt;br /&gt;
&lt;br /&gt;
==== Цикл for ====&lt;br /&gt;
Цикл for удобно использовать тогда, когда количество повторений известно заранее.&lt;br /&gt;
&lt;br /&gt;
Пусть, например, нужно вывести числа от 0 до 9. Это можно сделать при помощи цикла while:&lt;br /&gt;
&lt;br /&gt;
 int i = 0;&lt;br /&gt;
 while (i &amp;lt; 10) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
     i++;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Однако гораздо проще в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Запись цикла for всегда состоит из трёх частей, разделённых точками с запятой (именно точками с запятой, это важно!):&lt;br /&gt;
&lt;br /&gt;
 for (&amp;lt;span style=&#039;color:red&#039;&amp;gt;&amp;amp;lt;инициализация&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:green&#039;&amp;gt;&amp;amp;lt;изменение&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Как правило, внутри цикла for используется некоторая переменная (счётчик). &amp;lt;span style=&#039;color:red&#039;&amp;gt;Первая часть&amp;lt;/span&amp;gt; отвечает за создание счётчика и запись в него начального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:orange&#039;&amp;gt;Вторая часть&amp;lt;/span&amp;gt; содержит условие, при истинности которого цикл продолжает работу (оно имеет точно такой же смысл, как условие в скобках у while). Как правило, здесь проверяется, что счётчик ещё не дошёл до некоторого финального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:green&#039;&amp;gt;Третья часть&amp;lt;/span&amp;gt; показывает, как должен изменяться счётчик от итерации к итерации.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 5; i &amp;lt;= 15; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 5 6 7 8 9 10 11 12 13 14 15&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 30; i &amp;gt;= 20; i--) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 30 29 28 27 26 25 24 23 22 21 20&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt;= 40; i += 5) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 0 5 10 15 20 25 30 35 40&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 1; i &amp;lt; 100; i *= 3) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 1 3 9 27 81 243 729&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операторы break и continue ====&lt;br /&gt;
&lt;br /&gt;
Оператор break досрочно завершает цикл while или for (если при выполнении программы мы встречаем break, мы сразу же перемещаемся за конец цикла):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         break;                 //прервать цикл&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3&lt;br /&gt;
&lt;br /&gt;
Оператор continue досрочно переходит к следующей итерации цикла while или for (если при выполнении программы мы встречаем continue, мы сразу же перемещаемся к началу цикла; если есть счётчик, то он будет изменён):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         continue;              //перейти к следующей итерации&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3 5 6 7 9&lt;br /&gt;
&lt;br /&gt;
=== Массивы ===&lt;br /&gt;
&lt;br /&gt;
==== Объявление и использование массивов ====&lt;br /&gt;
&lt;br /&gt;
Массив — несколько переменных одного типа, имеющих общее имя и различные индексы. Для обращения к ячейке массива требуется написать имя массива, а затем — индекс ячейки в квадратных скобках.&lt;br /&gt;
&lt;br /&gt;
 int x; //одна переменная типа int, 4 байта&lt;br /&gt;
 int a[5]; //массив из 5 ячеек типа int, 20 байт&lt;br /&gt;
&lt;br /&gt;
Ячейки массива имеют индексы от 0 до (SIZE - 1), где SIZE — размер массива.&lt;br /&gt;
&lt;br /&gt;
 int a[10]; //объявлены 10 ячеек: a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]&lt;br /&gt;
 int b[100]; //объявлены 100 ячеек: от a[0] до a[99]&lt;br /&gt;
&lt;br /&gt;
С ячейками массива можно работать как с обычными переменными:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 a[0] = 100;&lt;br /&gt;
 a[1] = a[0] * 2;&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, a[1]); //вывод: 200&lt;br /&gt;
&lt;br /&gt;
При создании массива можно сразу задать ячейкам начальные значения (как и в случае с отдельными переменными). Если этого не сделать, массив изначально будет содержать случайные значения (мусор).&lt;br /&gt;
&lt;br /&gt;
 int x;                      //x — отдельная переменная, содержит случайное значение (мусор)&lt;br /&gt;
 int y = 100;                //y — отдельная переменная, содержит значение 100&lt;br /&gt;
 int a[3];                   //a — массив из 3 ячеек, которые содержат случайные значения (мусор)&lt;br /&gt;
 int b[3] = {100, 200, 300}; //b — массив из 3 ячеек, которые содержат значения 100, 200 и 300&lt;br /&gt;
&lt;br /&gt;
==== Считывание и вывод массивов ====&lt;br /&gt;
&lt;br /&gt;
Если определён массив из 5 ячеек, и значения ячеек вводятся с клавиатуры, можно использовать 5 операций scanf:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[0]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[1]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[2]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[3]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[4]);&lt;br /&gt;
&lt;br /&gt;
Но проще и правильнее в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Часто в задачах размер массива неизвестен заранее, и его также нужно вводить с клавиатуры. В этом случае нужно объявить массив на такое количество ячеек, которого заведомо хватит во всех случаях (как правило, узнать это количество можно из ограничений в разделе «Входные данные»), а затем сделать отдельную переменную size и использовать её.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 int size;                          //объявляем переменную для фактического размера массива&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;size);                //считываем размер массива&lt;br /&gt;
 &lt;br /&gt;
 int a[100010];                     //объявляем массив такой величины, чтобы его хватило для всех тестов&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {   //считываем столько ячеек массива, сколько указано в size&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом выполняется вывод ячеек массива на печать:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Символы и строки ===&lt;br /&gt;
==== Символы в языке С ====&lt;br /&gt;
Язык С использует [http://ru.wikipedia.org/wiki/ASCII кодировочную таблицу ASCII], в которой различным знакам сопоставлены коды от 0 до 127. В языке C &#039;&#039;&#039;отсутствует отдельный тип для хранения символов&#039;&#039;&#039;, а &#039;&#039;&#039;маленькие целые числа (от 0 до 127) всегда могут интерпретироваться как символы и наоборот&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для хранения кодов удобно использовать 8-битный целый тип char (может представлять целые числа от -128 до 127, чего как раз хватает для кодов символов).&lt;br /&gt;
&lt;br /&gt;
 char a = 33;       //a - это число 33, или, что то же самое, код символа &#039;!&#039;&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, a); //вывод: 33&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, a); //вывод: !&lt;br /&gt;
 &lt;br /&gt;
 char b = &#039;@&#039;;      //b - это код символа &#039;@&#039;, или, что то же самое, число 64&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, b); //вывод: 64&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, b); //вывод: @&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод символов ====&lt;br /&gt;
&lt;br /&gt;
Если в программе нужно использовать символьную константу, она заключается в &#039;&#039;&#039;одинарные&#039;&#039;&#039; кавычки.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;$&#039;; //в переменную x записывается код знака доллара - 36&lt;br /&gt;
&lt;br /&gt;
Для ввода одного символа используют scanf() со спецификатором %с.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Важно: спецификаторы %d и %lf при вводе игнорируют пробелы, переводы строки и т. п. Если в программе записано scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «12    34», то a и b будут считаны правильно (a == 12, b == 34).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Однако %c может считывать пробелы и переводы строк. Если в программе записано scanf(&amp;quot;%c%c&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «X   Y», то в b будет записан пробел (a == &#039;X&#039;, b == &#039; &#039;).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Если этого нужно избежать, перед %c нужно ставить пробел. Это указание для scanf: пропустить все пробельные символы (если они есть) и прочитать первый непробельный.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 char x;&lt;br /&gt;
 scanf(&amp;quot; %c&amp;quot;, &amp;amp;x);&lt;br /&gt;
&lt;br /&gt;
Для вывода одного символа используется printf() со спецификатором %c. Если нужно вывести не символ, а его код, следует использовать спецификатор %d.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;?&#039;&lt;br /&gt;
 printf(&amp;quot;Code of %c is %d&amp;quot;); //выведет Code of ? is 63&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия с символами ====&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить, является ли символ цифрой, можно использовать тот факт, что коды символов от &#039;0&#039; до &#039;9&#039; в таблице ASCII расположены последовательно. Следовательно, если символ — цифра, то его код должен находиться между &#039;0&#039; и &#039;9&#039;.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;0&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;9&#039;) //проверка, является ли x цифрой&lt;br /&gt;
&lt;br /&gt;
Аналогично производятся проверки, является ли символ строчной (заглавной) латинской буквой.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;a&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;z&#039;) //проверка, является ли x строчной буквой&lt;br /&gt;
&lt;br /&gt;
 if (&#039;A&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;Z&#039;) //проверка, является ли x заглавной буквой&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать из строчной буквы заглавную, нужно добавить к коду строчной буквы смещение до блока заглавных букв (то есть дистанцию от символа &#039;a&#039; до символа &#039;A&#039;)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;A&#039; - &#039;a&#039;); //преобразование строчной буквы в заглавную (x должен быть строчной буквой!)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;a&#039; - &#039;A&#039;); //преобразование заглавной буквы в строчную (x должен быть заглавной буквой!)&lt;br /&gt;
&lt;br /&gt;
Работу с символами облегчает библиотека &amp;amp;lt;ctype.h&amp;amp;gt;, которая содержит множество удобных функций:&lt;br /&gt;
* isdigit(x) — проверка, является ли x цифрой ( &amp;lt;tt&amp;gt;if (isdigit(x))&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* islower(x) — проверка, является ли x строчной буквой&lt;br /&gt;
* isupper(x) — проверка, является ли x заглавной буквой&lt;br /&gt;
* isalpha(x) — проверка, является ли x буквой&lt;br /&gt;
* tolower(x) — возвращает строчную букву, соответствующую x ( &amp;lt;tt&amp;gt;x = tolower(x);&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* toupper(x) — возвращает заглавную букву, соответствующую x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Строки в языке C ====&lt;br /&gt;
&lt;br /&gt;
Строки — это массивы символов.&lt;br /&gt;
&lt;br /&gt;
 char name[6] = &amp;quot;Vasya&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для обозначения конца строки используется специальный символ — завершающий ноль (&#039;\n&#039;, ASCII-код 0). Поэтому &#039;&#039;&#039;для хранения строки из N символов требуется массив из не менее чем (N + 1) ячеек&#039;&#039;&#039; (например, для строки &amp;quot;Vasya&amp;quot; нужно не менее 6 ячеек).&lt;br /&gt;
&lt;br /&gt;
Если завершающий ноль будет утерян, строку не получится обработать стандартными функциями (например, print).&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод строк ====&lt;br /&gt;
&lt;br /&gt;
Строковые константы записываются в &#039;&#039;&#039;двойных&#039;&#039;&#039; кавычках.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;до пробела&#039;&#039;&#039; используется scanf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%s&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;целиком (до перевода строки)&#039;&#039;&#039; используется scanf() со спецификатором %[^\n].&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%[^\n]&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily Pupkin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для вывода строк используется printf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 printf(&amp;quot;Welcome to %s&amp;quot;, city); //выведет Welcome to Ulyanovsk&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия со строками ====&lt;br /&gt;
&lt;br /&gt;
Для обхода всех символов строки используется цикл for, продолжающийся до тех пор, пока текущим символом не окажется завершающий ноль.&lt;br /&gt;
&lt;br /&gt;
 char s[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 for (int i = 0; s[i] != 0; i++) {&lt;br /&gt;
     printf(&amp;quot;%c &amp;quot;, s[i]);           //выведет U l y a n o v s k&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
	<entry>
		<id>https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2353</id>
		<title>Основы программирования на C++</title>
		<link rel="alternate" type="text/html" href="https://acm.khpnets.info/w39/index.php?title=%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%B0_C%2B%2B&amp;diff=2353"/>
		<updated>2019-05-01T16:35:26Z</updated>

		<summary type="html">&lt;p&gt;Spiritum: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка к работе ==&lt;br /&gt;
&lt;br /&gt;
=== Установка среды разработки ===&lt;br /&gt;
* [http://www.visualstudio.com/ru/thank-you-downloading-visual-studio/?sku=Community&amp;amp;rel=15 Visual Studio 2017 Community] (для Windows 7 — Windows 10)&lt;br /&gt;
: Выберите только вариант «Разработка классических приложений на C++»&lt;br /&gt;
* [http://download.microsoft.com/download/1/D/9/1D9A6C0E-FC89-43EE-9658-B9F0E3A76983/vc_web.exe Visual Studio 2010] (для Windows XP, но также &#039;&#039;&#039;&amp;lt;span style=&#039;color:red;&#039;&amp;gt;рекомендуется, если вы не хотите выкачивать большие установочные файлы&amp;lt;/span&amp;gt;&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
=== Создание проекта в Visual Studio ===&lt;br /&gt;
Создаём проект:&lt;br /&gt;
&lt;br /&gt;
Меню Файл (File) → Создать (New) → Проект... (Project...) → слева выбираем Visual C++ → справа выбираем Пустой проект (Empty Project) → вводим имя проекта → OK.&lt;br /&gt;
&lt;br /&gt;
Добавляем в проект новый файл:&lt;br /&gt;
&lt;br /&gt;
Меню Проект (Project) → Добавить новый элемент... (Add New Item...) → Файл C++ (C++ File) → вводим имя файла → Добавить (Add).&lt;br /&gt;
&lt;br /&gt;
=== Решение проблем ===&lt;br /&gt;
* &#039;&#039;&#039;Visual Studio не позволяет мне использовать scanf&#039;&#039;&#039;&lt;br /&gt;
: Меню Проект (Project) → Свойства (Properties) → C/C++ → Проверки SDL (SDL Checks) → выбрать значение Нет (No) → OK.&lt;br /&gt;
: Другой способ: скопировать в начало программы строку &amp;lt;tt&amp;gt;#define _CRT_SECURE_NO_WARNINGS&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;При запуске появляется окно Следующий проект устарел. Выполнить его сборку? (This project is out of date. Would you like to build it?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Да (Yes).&lt;br /&gt;
* &#039;&#039;&#039;Если программа содержит ошибки, при запуске появляется окно Возникли ошибки сборки. Продолжить и запустить последний успешно построенный вариант? (There were build errors. Would you like to continue and run the last successful build?)&#039;&#039;&#039;&lt;br /&gt;
: Поставьте галочку Больше не выводить это окно (Do not show this dialog again) и нажмите кнопку Нет (No).&lt;br /&gt;
* &#039;&#039;&#039;Где посмотреть, какие у меня ошибки?&#039;&#039;&#039;&lt;br /&gt;
: Меню Вид (View) → Список ошибок (Error List). В более старых версиях: View → Other Windows → Error List.&lt;br /&gt;
&lt;br /&gt;
== Вспомогательные материалы к занятиям ==&lt;br /&gt;
=== Введение. Переменные. Ввод-вывод ===&lt;br /&gt;
==== Минимальная программа на C++ ====&lt;br /&gt;
 int main() {&lt;br /&gt;
     &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
В любой программе всегда должна быть функция main. Фигурные скобки обозначают начало и конец функции, все команды записываются внутри.&lt;br /&gt;
&lt;br /&gt;
До функции main, в самом начале файла, обычно указываются директивы #include (например #include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==== Использование переменных ====&lt;br /&gt;
&lt;br /&gt;
Чтобы добавить в программу переменную, укажите её тип, название и, если необходимо, начальное значение.&lt;br /&gt;
&lt;br /&gt;
 int radius = 100;                           //целое число radius со значением 100&lt;br /&gt;
 double circleArea = 3.14 * radius * radius; //дробное число circleArea, значение вычисляется по формуле&lt;br /&gt;
&lt;br /&gt;
Переменные могут менять своё значение:&lt;br /&gt;
&lt;br /&gt;
 radius = radius * 2; //радиус увеличился в 2 раза&lt;br /&gt;
&lt;br /&gt;
Часто используемые типы данных:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| int || целые числа || от -2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;31&amp;lt;/sup&amp;gt;-1 (примерно от -2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt; до 2·10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;) || 4 байта&lt;br /&gt;
|-&lt;br /&gt;
| long long || большие целые числа || от -2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt; до 2&amp;lt;sup&amp;gt;63&amp;lt;/sup&amp;gt;-1 (примерно от -9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt; до 9·10&amp;lt;sup&amp;gt;18&amp;lt;/sup&amp;gt;) || 8 байт&lt;br /&gt;
|-&lt;br /&gt;
| double || дробные числа || точность 15-16 десятичных цифр || 8 байт&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Вывод при помощи функции printf ====&lt;br /&gt;
&lt;br /&gt;
Функция printf используется для печати на экране. Для использования printf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
printf выводит только то, что указано в кавычках. Для вывода перевода строки используется специальный символ \n.&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;Hello World!\n&amp;quot;);     //выводит Hello World!&lt;br /&gt;
 printf(&amp;quot;My name\nis Vasya.&amp;quot;); //выводит My name, а затем на новой строке is Vasya.&lt;br /&gt;
&lt;br /&gt;
printf может выводить переменные и значения выражений, но для этого в строке с кавычками нужно указать места («окошечки»), куда следует подставлять значения. Места указываются при помощи спецификаторов.&lt;br /&gt;
&lt;br /&gt;
 int salary = 100;&lt;br /&gt;
 printf(&amp;quot;Your salary is %d $.\n&amp;quot;, salary);               //выводит Your salary is 100 $.&lt;br /&gt;
 printf(&amp;quot;Next year you&#039;ll have %.2lf $.&amp;quot;, salary * 1.5); //выводит Next year you&#039;ll have 150.00 $.&lt;br /&gt;
&lt;br /&gt;
Часто используемые спецификаторы:&lt;br /&gt;
&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| %d || int&lt;br /&gt;
|-&lt;br /&gt;
| %lld || long long &lt;br /&gt;
|-&lt;br /&gt;
| %lf || double&lt;br /&gt;
|-&lt;br /&gt;
| %.Xlf || double, X знаков после точки (например, %.2lf — 2 знака после точки)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
printf может выводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;P:%d S:%d&amp;quot;, 2 * (3 + 4), 3 * 4); //выводит P:14 S:12&lt;br /&gt;
&lt;br /&gt;
==== Ввод при помощи функции scanf ====&lt;br /&gt;
&lt;br /&gt;
Функция scanf используется для ввода с клавиатуры. Для использования scanf нужно подключить stdio.h (#include &amp;lt;stdio.h&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
scanf похож на printf, но перед каждой переменной следует ставить амперсанд &amp;amp;:&lt;br /&gt;
&lt;br /&gt;
 int age;&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;age); //значение переменной age вводится с клавиатуры&lt;br /&gt;
&lt;br /&gt;
scanf может вводить несколько значений:&lt;br /&gt;
&lt;br /&gt;
 int time;&lt;br /&gt;
 double speed;&lt;br /&gt;
 scanf(&amp;quot;%d%lf&amp;quot;, &amp;amp;time, &amp;amp;speed); //значения переменных time и speed вводятся с клавиатуры&lt;br /&gt;
&lt;br /&gt;
=== Условия ===&lt;br /&gt;
&lt;br /&gt;
==== Простые условия ====&lt;br /&gt;
Конструкция if позволяет выполнять в программе различные действия в зависимости от условий.&lt;br /&gt;
&lt;br /&gt;
 if (password == 12345) {        //если значение переменной password равняется 12345,&lt;br /&gt;
     printf(&amp;quot;Welcome!&amp;quot;);         //вывести Welcome!&lt;br /&gt;
 } else {                        //в противном случае&lt;br /&gt;
     printf(&amp;quot;Access denied!&amp;quot;);   //вывести Access denied!&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Если ветка else не используется, её можно не писать:&lt;br /&gt;
&lt;br /&gt;
 if (lives &amp;lt;= 0) {               //если количество жизней меньше или равно нулю,&lt;br /&gt;
     printf(&amp;quot;Game over!&amp;quot;);       //вывести Game over!&lt;br /&gt;
 }                               //иначе ничего не делать&lt;br /&gt;
&lt;br /&gt;
Можно скомбинировать несколько условий при помощи else if:&lt;br /&gt;
&lt;br /&gt;
 if (mark == 5) {&lt;br /&gt;
     printf(&amp;quot;Excellent!&amp;quot;);&lt;br /&gt;
 } else if (mark == 4) {&lt;br /&gt;
     printf(&amp;quot;Good!&amp;quot;);&lt;br /&gt;
 } else if (mark == 3) {&lt;br /&gt;
     printf(&amp;quot;Satisfactory&amp;quot;);&lt;br /&gt;
 } else {&lt;br /&gt;
     printf(&amp;quot;Bad&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операции сравнения ====&lt;br /&gt;
{| border=black; cellspacing=0; cellpadding=5px;&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;&amp;lt;/tt&amp;gt; || меньше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;lt;=&amp;lt;/tt&amp;gt; || меньше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;&amp;lt;/tt&amp;gt; || больше&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;&amp;gt;=&amp;lt;/tt&amp;gt; || больше или равно&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;==&amp;lt;/tt&amp;gt; || равно (не путать с &amp;lt;tt&amp;gt;=&amp;lt;/tt&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;!=&amp;lt;/tt&amp;gt; || не равно&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Условия со связками И, ИЛИ ====&lt;br /&gt;
&lt;br /&gt;
Связка И (&amp;amp;&amp;amp;) позволяет проверить, что &#039;&#039;&#039;обе&#039;&#039;&#039; части условия &#039;&#039;&#039;одновременно&#039;&#039;&#039; являются истинными:&lt;br /&gt;
&lt;br /&gt;
 if (20 &amp;lt;= age &amp;amp;&amp;amp; age &amp;lt;= 30)  //если возраст от 20 до 30 лет включительно&lt;br /&gt;
&lt;br /&gt;
Связка ИЛИ (||) позволяет проверить, что &#039;&#039;&#039;хотя бы одна&#039;&#039;&#039; из частей условия является истинной:&lt;br /&gt;
&lt;br /&gt;
 if (age &amp;lt; 20 || 30 &amp;lt; age)    //если возраст меньше 20 или больше 30 лет&lt;br /&gt;
&lt;br /&gt;
==== Поиск максимума или минимума ====&lt;br /&gt;
&lt;br /&gt;
Чтобы найти наибольшее из значений нескольких переменных, следует сделать следующие шаги:&lt;br /&gt;
&lt;br /&gt;
* Создать новую переменную, в которой в итоге будет находиться значение максимума, и положить туда значение первой переменной;&lt;br /&gt;
* Сравнить максимум со второй переменной, и если вторая переменная больше, положить в максимум значение второй переменной;&lt;br /&gt;
* Сравнить максимум с третьей переменной, и если третья переменная больше, положить в максимум значение третьей переменной;&lt;br /&gt;
* Повторить для оставшихся переменных.&lt;br /&gt;
&lt;br /&gt;
 int maxValue = a;&lt;br /&gt;
 if (b &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = b;&lt;br /&gt;
 }&lt;br /&gt;
 if (c &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = c;&lt;br /&gt;
 }&lt;br /&gt;
 if (d &amp;gt; maxValue) {&lt;br /&gt;
     maxValue = d;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Минимум определяется аналогичным образом (знаки &amp;gt; следует изменить на &amp;lt;).&lt;br /&gt;
&lt;br /&gt;
=== Циклы ===&lt;br /&gt;
==== Цикл while ====&lt;br /&gt;
Циклы — это конструкции языка C++, позволяющие несколько раз выполнять однотипные действия.&lt;br /&gt;
&lt;br /&gt;
Общий вид цикла while:&lt;br /&gt;
&lt;br /&gt;
 while (&amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Перед началом цикла будет выполнена проверка, является ли &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; истинным. Если это так, то выполняются действия, указанные внутри цикла (пока всё очень похоже на if). Однако, в отличие от if, при достижении закрывающей скобки цикла while мы перемещаемся обратно на его начало, где вновь будет проверено &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;, и если оно всё ещё истинно, то снова выполняются действия внутри цикла, и так далее. Это продолжается до тех пор, пока &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt; не перестанет быть истинным (или пока не встретится оператор break; см. далее).&lt;br /&gt;
&lt;br /&gt;
Цикл while удобно использовать тогда, когда заранее неизвестно, сколько именно повторов требуется сделать.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 //В банке лежит n рублей, каждый месяц сумма увеличивается на 10%.&lt;br /&gt;
 //Сколько месяцев потребуется, чтобы скопить миллион рублей?&lt;br /&gt;
 int money = n, months = 0; //изначально денег в банке - n, прошло месяцев - 0&lt;br /&gt;
 while (money &amp;lt; 1000000) {  //пока не накопится миллион или больше,&lt;br /&gt;
     money *= 1.1;          //сумма увеличивается на 10% (дробная часть отбрасывается)&lt;br /&gt;
     months++;              //количество месяцев увеличивается на 1&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда money будет больше или равно миллиону&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, months);      //выводим количество прошедших месяцев&lt;br /&gt;
&lt;br /&gt;
 //поиск минимального делителя (большего единицы) числа n&lt;br /&gt;
 int divisor = 2;           //считаем, что минимальный делитель — это двойка&lt;br /&gt;
 while (n % divisor != 0) { //пока n не делится на divisor,&lt;br /&gt;
     n++;                   //увеличиваем divisor&lt;br /&gt;
 }                          //цикл закончится в тот момент, когда n будет делиться на divisor&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, divisor);     //выводим полученный делитель&lt;br /&gt;
&lt;br /&gt;
==== Цикл for ====&lt;br /&gt;
Цикл for удобно использовать тогда, когда количество повторений известно заранее.&lt;br /&gt;
&lt;br /&gt;
Пусть, например, нужно вывести числа от 0 до 9. Это можно сделать при помощи цикла while:&lt;br /&gt;
&lt;br /&gt;
 int i = 0;&lt;br /&gt;
 while (i &amp;lt; 10) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
     i++;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Однако гораздо проще в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Запись цикла for всегда состоит из трёх частей, разделённых точками с запятой (именно точками с запятой, это важно!):&lt;br /&gt;
&lt;br /&gt;
 for (&amp;lt;span style=&#039;color:red&#039;&amp;gt;&amp;amp;lt;инициализация&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:orange&#039;&amp;gt;&amp;amp;lt;условие&amp;amp;gt;&amp;lt;/span&amp;gt;; &amp;lt;span style=&#039;color:green&#039;&amp;gt;&amp;amp;lt;изменение&amp;amp;gt;&amp;lt;/span&amp;gt;) {&lt;br /&gt;
     &amp;amp;lt;действия&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Как правило, внутри цикла for используется некоторая переменная (счётчик). &amp;lt;span style=&#039;color:red&#039;&amp;gt;Первая часть&amp;lt;/span&amp;gt; отвечает за создание счётчика и запись в него начального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:orange&#039;&amp;gt;Вторая часть&amp;lt;/span&amp;gt; содержит условие, при истинности которого цикл продолжает работу (оно имеет точно такой же смысл, как условие в скобках у while). Как правило, здесь проверяется, что счётчик ещё не дошёл до некоторого финального значения;&lt;br /&gt;
* &amp;lt;span style=&#039;color:green&#039;&amp;gt;Третья часть&amp;lt;/span&amp;gt; показывает, как должен изменяться счётчик от итерации к итерации.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 5; i &amp;lt;= 15; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 5 6 7 8 9 10 11 12 13 14 15&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 30; i &amp;gt;= 20; i--) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 30 29 28 27 26 25 24 23 22 21 20&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt;= 40; i += 5) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 0 5 10 15 20 25 30 35 40&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 for (int i = 1; i &amp;lt; 100; i *= 3) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);              //Вывод: 1 3 9 27 81 243 729&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==== Операторы break и continue ====&lt;br /&gt;
&lt;br /&gt;
Оператор break досрочно завершает цикл while или for (если при выполнении программы мы встречаем break, мы сразу же перемещаемся за конец цикла):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         break;                 //прервать цикл&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3&lt;br /&gt;
&lt;br /&gt;
Оператор continue досрочно переходит к следующей итерации цикла while или for (если при выполнении программы мы встречаем continue, мы сразу же перемещаемся к началу цикла; если есть счётчик, то он будет изменён):&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; 10; i++) { //цикл от 0 до 9&lt;br /&gt;
     if (i % 4 == 0) {          //если счётчик делится на 4,&lt;br /&gt;
         continue;              //перейти к следующей итерации&lt;br /&gt;
     }&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, i);          //вывести счётчик&lt;br /&gt;
 }&lt;br /&gt;
 //Вывод: 0 1 2 3 5 6 7 9&lt;br /&gt;
&lt;br /&gt;
=== Массивы ===&lt;br /&gt;
&lt;br /&gt;
==== Объявление и использование массивов ====&lt;br /&gt;
&lt;br /&gt;
Массив — несколько переменных одного типа, имеющих общее имя и различные индексы. Для обращения к ячейке массива требуется написать имя массива, а затем — индекс ячейки в квадратных скобках.&lt;br /&gt;
&lt;br /&gt;
 int x; //одна переменная типа int, 4 байта&lt;br /&gt;
 int a[5]; //массив из 5 ячеек типа int, 20 байт&lt;br /&gt;
&lt;br /&gt;
Ячейки массива имеют индексы от 0 до (SIZE - 1), где SIZE — размер массива.&lt;br /&gt;
&lt;br /&gt;
 int a[10]; //объявлены 10 ячеек: a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]&lt;br /&gt;
 int b[100]; //объявлены 100 ячеек: от a[0] до a[99]&lt;br /&gt;
&lt;br /&gt;
С ячейками массива можно работать как с обычными переменными:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 a[0] = 100;&lt;br /&gt;
 a[1] = a[0] * 2;&lt;br /&gt;
 printf(&amp;quot;%d&amp;quot;, a[1]); //вывод: 200&lt;br /&gt;
&lt;br /&gt;
При создании массива можно сразу задать ячейкам начальные значения (как и в случае с отдельными переменными). Если этого не сделать, массив изначально будет содержать случайные значения (мусор).&lt;br /&gt;
&lt;br /&gt;
 int x;                      //x — отдельная переменная, содержит случайное значение (мусор)&lt;br /&gt;
 int y = 100;                //y — отдельная переменная, содержит значение 100&lt;br /&gt;
 int a[3];                   //a — массив из 3 ячеек, которые содержат случайные значения (мусор)&lt;br /&gt;
 int b[3] = {100, 200, 300}; //b — массив из 3 ячеек, которые содержат значения 100, 200 и 300&lt;br /&gt;
&lt;br /&gt;
==== Считывание и вывод массивов ====&lt;br /&gt;
&lt;br /&gt;
Если определён массив из 5 ячеек, и значения ячеек вводятся с клавиатуры, можно использовать 5 операций scanf:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[0]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[1]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[2]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[3]);&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[4]);&lt;br /&gt;
&lt;br /&gt;
Но проще и правильнее в данном случае использовать цикл for:&lt;br /&gt;
&lt;br /&gt;
 int a[5];&lt;br /&gt;
 for (int i = 0; i &amp;lt; 5; i++) {&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Часто в задачах размер массива неизвестен заранее, и его также нужно вводить с клавиатуры. В этом случае нужно объявить массив на такое количество ячеек, которого заведомо хватит во всех случаях (как правило, узнать это количество можно из ограничений в разделе «Входные данные»), а затем сделать отдельную переменную size и использовать её.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 int size;                          //объявляем переменную для фактического размера массива&lt;br /&gt;
 scanf(&amp;quot;%d&amp;quot;, &amp;amp;size);                //считываем размер массива&lt;br /&gt;
 &lt;br /&gt;
 int a[100010];                     //объявляем массив такой величины, чтобы его хватило для всех тестов&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {   //считываем столько ячеек массива, сколько указано в size&lt;br /&gt;
     scanf(&amp;quot;%d&amp;quot;, &amp;amp;a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Аналогичным образом выполняется вывод ячеек массива на печать:&lt;br /&gt;
&lt;br /&gt;
 for (int i = 0; i &amp;lt; size; i++) {&lt;br /&gt;
     printf(&amp;quot;%d &amp;quot;, a[i]);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Символы и строки ===&lt;br /&gt;
==== Символы в языке С ====&lt;br /&gt;
Язык С использует [http://ru.wikipedia.org/wiki/ASCII кодировочную таблицу ASCII], в которой различным знакам сопоставлены коды от 0 до 127. В языке C &#039;&#039;&#039;отсутствует отдельный тип для хранения символов&#039;&#039;&#039;, а &#039;&#039;&#039;маленькие целые числа (от 0 до 127) всегда могут интерпретироваться как символы и наоборот&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Для хранения кодов удобно использовать 8-битный целый тип char (может представлять целые числа от -128 до 127, чего как раз хватает для кодов символов).&lt;br /&gt;
&lt;br /&gt;
 char a = 33;       //a - это число 33, или, что то же самое, код символа &#039;!&#039;&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, a); //вывод: 33&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, a); //вывод: !&lt;br /&gt;
 &lt;br /&gt;
 char b = &#039;@&#039;;      //b - это код символа &#039;@&#039;, или, что то же самое, число 64&lt;br /&gt;
 printf(&amp;quot;%d\n&amp;quot;, b); //вывод: 64&lt;br /&gt;
 printf(&amp;quot;%c\n&amp;quot;, b); //вывод: @&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод символов ====&lt;br /&gt;
&lt;br /&gt;
Если в программе нужно использовать символьную константу, она заключается в &#039;&#039;&#039;одинарные&#039;&#039;&#039; кавычки.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;$&#039;; //в переменную x записывается код знака доллара - 36&lt;br /&gt;
&lt;br /&gt;
Для ввода одного символа используют scanf() со спецификатором %с.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Важно: спецификаторы %d и %lf при вводе игнорируют пробелы, переводы строки и т. п. Если в программе записано scanf(&amp;quot;%d%d&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «12    34», то a и b будут считаны правильно (a == 12, b == 34).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Однако %c может считывать пробелы и переводы строк. Если в программе записано scanf(&amp;quot;%c%c&amp;quot;, &amp;amp;a, &amp;amp;b), и вводится «X   Y», то в b будет записан пробел (a == &#039;X&#039;, b == &#039; &#039;).&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color: red&amp;quot;&amp;gt;Если этого нужно избежать, перед %c нужно ставить пробел. Это указание для scanf: пропустить все пробельные символы (если они есть) и прочитать первый непробельный.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 char x;&lt;br /&gt;
 scanf(&amp;quot; %c&amp;quot;, &amp;amp;x);&lt;br /&gt;
&lt;br /&gt;
Для вывода одного символа используется printf() со спецификатором %c. Если нужно вывести не символ, а его код, следует использовать спецификатор %d.&lt;br /&gt;
&lt;br /&gt;
 char x = &#039;?&#039;&lt;br /&gt;
 printf(&amp;quot;Code of %c is %d&amp;quot;); //выведет Code of ? is 63&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия с символами ====&lt;br /&gt;
&lt;br /&gt;
Чтобы проверить, является ли символ цифрой, можно использовать тот факт, что коды символов от &#039;0&#039; до &#039;9&#039; в таблице ASCII расположены последовательно. Следовательно, если символ — цифра, то его код должен находиться между &#039;0&#039; и &#039;9&#039;.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;0&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;9&#039;) //проверка, является ли x цифрой&lt;br /&gt;
&lt;br /&gt;
Аналогично производятся проверки, является ли символ строчной (заглавной) латинской буквой.&lt;br /&gt;
&lt;br /&gt;
 if (&#039;a&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;z&#039;) //проверка, является ли x строчной буквой&lt;br /&gt;
&lt;br /&gt;
 if (&#039;A&#039; &amp;lt;= x &amp;amp;&amp;amp; x &amp;lt;= &#039;Z&#039;) //проверка, является ли x заглавной буквой&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать из строчной буквы заглавную, нужно добавить к коду строчной буквы смещение до блока заглавных букв (то есть дистанцию от символа &#039;a&#039; до символа &#039;A&#039;)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;A&#039; - &#039;a&#039;); //преобразование строчной буквы в заглавную (x должен быть строчной буквой!)&lt;br /&gt;
&lt;br /&gt;
 x += (&#039;a&#039; - &#039;A&#039;); //преобразование заглавной буквы в строчную (x должен быть заглавной буквой!)&lt;br /&gt;
&lt;br /&gt;
Работу с символами облегчает библиотека &amp;amp;lt;ctype.h&amp;amp;gt;, которая содержит множество удобных функций:&lt;br /&gt;
* isdigit(x) — проверка, является ли x цифрой ( &amp;lt;tt&amp;gt;if (isdigit(x))&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* islower(x) — проверка, является ли x строчной буквой&lt;br /&gt;
* isupper(x) — проверка, является ли x заглавной буквой&lt;br /&gt;
* isalpha(x) — проверка, является ли x буквой&lt;br /&gt;
* tolower(x) — возвращает строчную букву, соответствующую x ( &amp;lt;tt&amp;gt;x = tolower(x);&amp;lt;/tt&amp;gt; )&lt;br /&gt;
* toupper(x) — возвращает заглавную букву, соответствующую x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Строки в языке C ====&lt;br /&gt;
&lt;br /&gt;
Строки — это массивы символов.&lt;br /&gt;
&lt;br /&gt;
 char name[6] = &amp;quot;Vasya&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для обозначения конца строки используется специальный символ — завершающий ноль (&#039;\n&#039;, ASCII-код 0). Поэтому &#039;&#039;&#039;для хранения строки из N символов требуется массив из не менее чем (N + 1) ячеек&#039;&#039;&#039; (например, для строки &amp;quot;Vasya&amp;quot; нужно не менее 6 ячеек).&lt;br /&gt;
&lt;br /&gt;
Если завершающий ноль будет утерян, строку не получится обработать стандартными функциями (например, print).&lt;br /&gt;
&lt;br /&gt;
==== Запись, ввод и вывод строк ====&lt;br /&gt;
&lt;br /&gt;
Строковые константы записываются в &#039;&#039;&#039;двойных&#039;&#039;&#039; кавычках.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;до пробела&#039;&#039;&#039; используется scanf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%s&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для ввода строки &#039;&#039;&#039;целиком (до перевода строки)&#039;&#039;&#039; используется scanf() со спецификатором %[^\n].&lt;br /&gt;
&lt;br /&gt;
 char name[100];&lt;br /&gt;
 scanf(&amp;quot;%[^\n]&amp;quot;, &amp;amp;name); //при вводе &amp;quot;Vasily Pupkin&amp;quot; в name будет записано &amp;quot;Vasily Pupkin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Для вывода строк используется printf() со спецификатором %s.&lt;br /&gt;
&lt;br /&gt;
 char city[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 printf(&amp;quot;Welcome to %s&amp;quot;, city); //выведет Welcome to Ulyanovsk&lt;br /&gt;
&lt;br /&gt;
==== Распространённые действия со строками ====&lt;br /&gt;
&lt;br /&gt;
Для обхода всех символов строки используется цикл for, продолжающийся до тех пор, пока текущим символом не окажется завершающий ноль.&lt;br /&gt;
&lt;br /&gt;
 char s[20] = &amp;quot;Ulyanovsk&amp;quot;;&lt;br /&gt;
 for (int i = 0; s[i] != 0; i++) {&lt;br /&gt;
     printf(&amp;quot;%c &amp;quot;, s[i]);           //выведет U l y a n o v s k&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Spiritum</name></author>
	</entry>
</feed>