Лысаков. Основы программирования (1247269), страница 4
Текст из файла (страница 4)
То есть при запуске программы, происходитэкран может привести либо к выводу «мусора», либо даже к ошибкевыполнение тех команд, которые написаны в этой функции. В описанномвыполнения программы (в зависимости от среды выполнения).примере это одна команда – вывод на экран текстового сообщения.Внутри функции main (а также всех других функций), каждая строкадолжна заканчиваться символом ;.2324www.phys.nsu.ruint a = 4;char ch = 'Q';double pi = 3.141592;Написанные код, как видно, имеет удобное форматирование, удобноедля чтения. Форматирование производится командой табуляции (кнопкаTab на клавиатуре).
Но при этом, если написание программы происходитcout << a;cout << ch;cout << pi;построчно, то при переходе на следующую строчку (кнопка Enter наклавиатуре), текст форматируется автоматически.2.4.Ввод и вывод переменныхВвод значений переменных также осуществляется без дополнительнойПри работе программы, зачастую необходимо чтобы пользовательинформации о переменной.сообщал программе различные параметры, а программа, по ходуdouble pi;cin >> pi;выполнения, выдавала результат вычислению пользователю.В языке программирования С, для вывода значений переменных наконсоль, необходимо дополнительно указывать тип данных.
Поэтомувывод переменных выглядит следующим образом:привводезначений>> – в данном контексте, это операция извлекающая данные изпотокасправа,преобразующаяизтекстовоговида,иПри операциях вывода значений переменных возможны комбинациипеременных и текстовых выражений. При операциях ввода, такие средстване предусмотрены.переменныхсконсоли,программист должен априорно быть знакомым с понятиями ссылок иуказателей на объкты, а также помнить, что для дробных чисел ввод ивывод осуществляются по-разному.double pi;scanf("%lg", &pi);Язык программирования С++, позволяет значительно упроститьоперации ввода-вывода значений переменных, за счет использованияНиже приведен фрагмент кода, запрашивающий у пользователязначение переменной, и выводящей ее квадрат.int a;int Res;cout << "Input value a = ";cin >> a;Res = a*a;cout << "a*a = " << Res << endl;потоков.25ихскладывающая их в переменную, указанную слева.printf("%d", a);printf("%c", ch);printf("%f", pi);этого,cin – поток ввода.
Обычно поток cin связан с клавиатурой, и весьнабираемый в консоли текст, хранится в потоке.•int a = 4;char ch = 'Q';double pi = 3.141592;Помимо•26www.phys.nsu.ruОбратите внимание, что символы >> и << показывают направление2.5.1. Выражения и приведение арифметических типовпотока – в переменную, или из нее на консоль.Специальная команда endl означает перевод строки.2.5.Каждое выражение состоит из одного или нескольких операндов,Арифметические операции и их использованиеДля вычислений выражений в языках С и С++ могут использоватьсяразличные арифметические операции.
При этом каждая операция имеетсвой ранг, определяющий приоритет ее выполнения. Чем ниже рангоперации, тем больший приоритет имеет операция. Операции одного рангаисполняются согласно правилам ассоциативности либо слева направо (–>),либо справа налево (<–). В таблице разобраны типовые операции порангам и тип их ассоциативности:символов операций и ограничителей, в качестве которых чаще всеговыступают круглые скобки ( ). Назначение любого выражения —формирование некоторого значения. Тип результата определяется типомвыражений. Если значениями выражения являются целые и вещественныетипы, то говорят об арифметических выражениях, в которых допустимыследующие операции:+ — сложение;– — вычитание;* — умножение;/Ранг123456789101112131415Операции() [] –> .! ~ + – ++ -- & * (тип)sizeof()*/%(мультипликативныебинарные)+ – (аддитивные бинарные)<< >> (поразрядного сдвига)< <= >= > (отношения)== != (отношения)& (поразрядная конъюнкция «И»)^ (поразрядное исключающее «ИЛИ»)| (поразрядное дизъюнкция «ИЛИ»)&& (конъюнкция «И»)|| (дизъюнкция «ИЛИ»)?: (условная операция)= *= /= %= += –= &= ^=|= <<= >>=, (операция «запятая» – перечисление)АссоциативностьÎÍ— деление;% — получение остатка от целочисленного деления.Примеры выражений с двумя операндами:ÎÎÎÎÎÎÎÎÎÎÍÍÎA + b12.3 – x3.14169 * Ze / 88 % iТакже существуют специфичные унарные операции ++ и -- дляизменения операнда на 1.
При этом эти операнды могут применяться какпосле операнда (а++), так и до него (--х). При этом результат будетразличный:•Если изначально а было равно 6. То после выполнения z = a++,результатом будет: z = 6; a = 7;•Если изначально а было равно 6. То после выполнения z = --a,результатом будет: z = 5; a = 5.2728www.phys.nsu.ru2.5.2. Отношения и логические выражения2.5.3. Приведение типовОтношение определяется как пара выражений, между которыми стоитОсобенность языков С и С++ заключается в том, что при вычислениизнак операции отношения. Допустимы следующие операции:значений выражений, результат всегда приводится к типу первого== — равно (два знака «равно»);операнда. То есть при делении двух целых значений результат будет также!= — не равно;иметь тип целого числа, поскольку каждый из операндов представлен> — больше;целым типом.< — меньше;int a = 5;int b = 2;double res;>= — больше или равно;<= — меньше или равно.res = a / b;Примеры отношений:а – b > 6.8(x – 8) * 3 == 155 >= 1Для получения вещественного типа необходимо, чтобы хотя бы одиноперанд имел тип вещественного числа.
Для этого можно использоватьЛогический тип (истина или ложь) в языке С отсутствует. Поэтомупринято, что отношение имеет ненулевое значение (обычно 1), если оноистинно, и равно 0, если оно ложно.приведение типов. В коде программ достаточно часто приводится явноеприведение типов, что не влечет изменение типа самой переменной.Рекомендуется в случае подобных вычислений приводить к желаемомутипу первый операнд, что упрощает чтение и последующую отладкупрограмм.Логических операций в языке С три:!— отрицание— логическое НЕ&&— конъюнкция— логическое И||— дизъюнкция— логическое ИЛИТаккакзначением// Результатом будет 2отношенияявляетсяint a = 5;int b = 2;double res;целое,тоничегоне противоречит применению логических операций к целочисленнымзначениям. При этом любое положительное ненулевое значение будетвосприниматься как истинное.
Иначе говоря значением !0 будет 1, а !54res = (double)a / b;2.5.4. Выражения с поразрядными операциямиТакие операции позволяют конструировать выражения, в которыхобработка операндов выполняется побитно (в двоичном представлениибудет 0.числа). Возможны следующие операции:~ — инвертирование битов;// ~170 равно 85>> — сдвиг последовательности битов вправо; // 100 >> 2 равно 252930www.phys.nsu.ru<< — сдвиг последовательности битов влево// 5 << 2 равно 20При этом, если необходимо исполнить несколько операторов, то их^ — поразрядное исключающее ИЛИ;необходимо выделить в ТЕЛО, которое обозначается фигурными|скобками.— поразрядное ИЛИ;if ( условие )& — поразрядное И;{Операции побитового сдвига часто применяются в программировании,оператор_1;поскольку позволяют значительно ускорять операции умножения илиоператор_2;nцелочисленного деления на 2 .оператор_3;}int a;cout << "Input value a = ";cin >> a;В случае ветвления исполнения, оператор имеет следующий вид:if ( условие )оператор_1;cout << "a*16 = " << (a << 4) << endl;elsecout << "a/8 = " << (a >> 3) << endl;оператор_2;Операторы ветвления2.6.В языках С и С++ существует два оператора ветвления:•условный оператор if.•переключатель switch.При этом возможно ветвление и на большее количество ветвей:if ( условие_1 )оператор_1;else if(условие_2 )оператор_2;2.6.1.
Оператор ifelseоператор_3;Оператор if может использоваться либо для условного выполненияопределенного действия, либо для разветвления программы на небольшоеВ качестве условия могут использоваться арифметические выражения,количество ветвей.В случае условного исполнения, оператор имеет следующий вид:отношения и логические выражения (x > 10 && x < 87).Приведем фрагмент программы для определения корней уравненияif ( условие )видаax 2 + bx + c = 0оператор;3132www.phys.nsu.ruявляется меткой, обозначающей место выполнения программы послеD = b*b-4*a*c;SWITCH.if ( D < 0)cout << "No roots" << endl;Оператором перехода может быть break, который осуществляет выходиз тела (фрагмент кода, обозначенный фигурными скобками).Переключатели чаще всего используются, когда количество ветвейelse if(D == 0){x = (double)-b / (2*a);cout << "1 root: x = " << x << endl;}больше 3, либо необходимо перебрать заданные константы.Для иллюстрации приведен фрагмент программы, которая выводит наэкран название введенной цифры от 0 до 9:else{x1 = ( - b + sqrt(D)) / (2*a);x2 = ( - b - sqrt(D)) / (2*a);cout << "2 root: x1 = " << x1 << " x2 = " << x2;}2.6.2.
Переключатель switchДанный оператор используется для организации мультиветвленияследующим и выглядит следующим образом:switch (выражение){case Константа_1: операторы_1;case Константа_2: операторы_2;….default: операторы;}При первом совпадении значения выражения с константой происходитвыполнение операторов, помеченных данной меткой. Если после ихвыполнениянепредусмотреноникакихоператоровперехода,товыполняются также все последующие операторы.
То есть по сути, CASE33int a;cout << "Input a = ";cin >> a;switch (a){case 1: cout << a << " - One" << endl;break;case 2: cout << a << " - Two" << endl;break;case 3: cout << a << " - Three" << endl;break;case 4: cout << a << " - Four" << endl;break;case 5: cout << a << " - Five" << endl;break;case 6: cout << a << " - Six" << endl;break;case 7: cout << a << " - Seven" << endl;break;case 8: cout << a << " - Eight" << endl;break;case 9: cout << a << " - Nine" << endl;break;case 0: cout << a << " - Zero" << endl;break;default: cout << "The value is not from 0 to 9";}34www.phys.nsu.ruЕще раз отметим, что если бы в программе отсутствовалиоператоры break, то при вводе например цифры 6, на экран бы2.7.В качестве примера рассмотрим программу, распечатывающую всечисла, которые делятся на 2 до введенного пользователем значения.распечаталось следующее:6 –7 –8 –9 –0 –The.SixSevenEightNineZerovalue is not from 0 to 9int i, Max;cin >> Max;for(i = 0; i <= Max; i++){if(i%2 == 0)cout << i << endl;}Операторы цикловВ языках С и С++ существуют три разных способа оргиназации циклов.Ниже мы их разберем с примерами использования.Выражения, указывающиеся в скобках оператора for не являютсяобязательными.Нижеприведенполностьюидентичныйкод,выполняющий точно такой же цикл.Помните, что даже если программист не указывает внутри оператораfor какие-либо выражения, все 3 поля должны быть оставлены пустыми!2.7.1.
Цикл forОператор for является, пожалуй базовым оператором для организациициклов. Цикл for — это параметрический цикл, то есть имеетсявозможность задавать параметры для выполнения цикла: начальныезначение и условия. Форма записи выглядит следующим образом:for (выражение_1; условие_цикла; выражение_2)Тело циклавыражение_1int i, Max;cin >> Max;i = 0;for(;;){if(i <= Max){if(i%2 == 0)cout << i << endl;i++;}elsebreak;– определяет действия, выполняемые до начала цикла.условие_цикла – обычно логическое или арифметическое условие.Пока это условие истинно, выполняется цикл. Проверка происходит передначалом очередной итерации тела цикла.}выражение_2 — это действие, выполняемые в конце каждой итерациицикла.3536www.phys.nsu.ru2.7.2.