Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Задание №2. Реализация разветвляющихся алгоритмов
Цель работы: изучить операции сравнения, логические операции, операторы передачи управления if, switch, break. Написать и отладить программу с разветвлениями.
Теоретические сведения Оператор условной передачи управления if Для выбора одной из ветвей вычислений применяется оператор условного перехода: if (выражение)оператор 1; elseоператор2; вычисляется выражение, и если его значение не равно 0 (истинно), то выполняется оператор1, иначе – оператор2, например: if(x>y) max = x; else max = y; Если операторы1, 2 содержат более одного оператора, то они заключаются в фигурные скобки { }, т.е. применяется блок. Конструкция else… может отсутствовать и такую форму называют сокращенной, тогда в случае ложности условия управление передается на следующий за if оператор. Если операторы 1, 2 в свою очередь являются операторами if, то такой оператор называют вложенным, при этом ключевое слово else принадлежит ближайшему предшествующему if. Например, найти наибольшее значение из трех чисел x, y, z: if (x>y) if (x>z) max=x; else max=z; else if(y>z) max=y; else max=z; Операции сравнения: < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), != (не равно), = = (равно). Пары символов разделять нельзя. Операции сравнения бинарные, их общий вид: Операнд 1 знак операции Операнд 2 Операндами операций сравнения могут быть данные любых базовых типов, значения которых перед сравнением преобразуются к одному типу. Логические операции используются в качестве условий при составлении более сложных выражений. Приведем их перечень в порядке убывания приоритета: ! (отрицание или логическое НЕ – унарная операция), &&(конъюнкция или логическое И), || (дизъюнкция или логическое ИЛИ). Например: (0<x)&&(x<=100) ((!x)&&(y>0)||((z==1)&&(k>0)) Выражения вычисляются слева направо, причем их вычисление прекращается, как только результат становится известен. Тернарная (условная) операция ?: Ее общая форма: Операнд 1?Операнд 2:Операнд 3 Если значение операнда 1 истинно (не равно 0), то результатом операции является операнд 2, иначе – операнд 3. Например, найти наибольшее из двух чисел: max = a>b ? a : b; Оператор выбора switch Общая форма оператора выбора (переключателя): switch(выражение){ caseconst_1: операторы; break; … caseconst_N: операторы; break; default:операторы; } Вычисляется выражение и проверяется, совпадает ли его результат со значением одной из констант. При совпадении выполняются операторы этого case. Значениями const_1,…, const_N могут быть только целые или символьные константы. Конструкция default выполняется, если результат выражения не совпал ни с одной из констант, и может отсутствовать. Оператор break выполняет досрочный выход из switch (после выполнения ветви case все остальные будут опущены). Если оператор break в case не записан, то будут выполняться операторы следующих ветвей case до появления оператора break, либо до завершения оператора switch. Например: switсh(i) { case 1: f=pow(x,2); break; case 2: f=fabs(x); break; case 3: f=sqrt(x); break; default: printf(“Ошибка!”); exit(1); } f=f+5;
Пример выполнения задания Ввести значения исходных данных x, y и z. Вычислить значение функции
Предусмотреть вывод сообщения, по какой ветви выполнялись вычисления. Текст программы может иметь седующий вид (в комментариях указаны действия по вводу-выводу в потоках, набираемые вместо записанных): #include <conio.h> // #include <iostream.h> #include <stdio.h> #include <math.h> void main() { double x, y, z, u; puts("Input x, y, z"); // cout << "Input x, y, z" << endl; scanf("%lf%lf%lf",&x, &y, &z); // cin >> x >> y >> z; if (x*y > z){ u = x*sin(y); puts(" x*y > z"); // cout << " x*y > z" << endl; } else { u = y*cos(x); puts(" x*y <= z"); // cout << " x*y <= z" << endl; } printf("\n\t Rezult U = %8.6lf", u); // cout << "\n\t Rezult U = " << u; puts("\nPress any key ... "); // cout <<"\nPress any key ... " << endl; getch(); }
Результаты выполнения программы для различных исходных данных, вводимых в одной строке, разделяя их пробелами, могут иметь следующий вид: 1 вариант введенные значения соответсвуют первому условию: 2 вариант введенные значения соответсвуют второму условию:
Индивидуальные задания Составить программу для вычисления значения rez в зависимости от поставленного условия. Для получения результатов подобрать исходные данные так, чтобы выполнялись все возможные ветви алгоритма. Перед выводом полученного результата должно выводиться сообщение о ветви, при прохождении которой он получен. Обратите внимание, что возможен случай, при котором исходные данные не будут подходить ни для одного из предложенных условий. 1. rez = 2. rez = 3. rez = 4. rez = 5. rez = 6. rez = 7. rez = 8. rez = 9. rez = 10. rez = . 11. rez = 12. rez = 13. rez = 14. rez = 15. rez = 16. rez = |
||
Последнее изменение этой страницы: 2018-04-12; просмотров: 309. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |