
- •1.2. Вычисления по формулам
- •2. Разветвляющиеся алгоритмы
- •2.1. Использование оператора if Пример 2.1. Вычислить значение функции 1 (полный оператор if)
- •2.2. Сокращенный вариант оператора if
- •Пример 2.2. Вычислить значение функции 2
- •2.3. Составной оператор
- •Пример 2.3. Вычислить значение функции 3
- •2.4. Вложенные составные операторы
- •Пример 2.4. Решение квадратного уравнения
- •Текст программы
- •2.5. Использование оператора множественного выбора
- •Пример 2.5. Калькулятор.
- •3. Порядок выполнения домашнего задания
- •Список литературы
- •Приложение 1. Пример оформления титульного листа
- •Содержание
- •1. Линейные алгоритмы. Арифметика действительных чисел. Вычисления по формулам 3
- •2. Разветвляющиеся алгоритмы 7
- •3. Порядок выполнения домашнего задания 25
Текст программы
/*--------------------------------------
вычисление корней квадратного уравнения
---------------------------------------*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{ float a,b,c,x1,x2,D;
//заставка
printf("\nВычисление корней уравнения вида:\n ax^2+bx+c=0");
//ввод исходных данных
printf("\nВведите коэффициенты \n a="); scanf("%f", &a);
printf(" b="); scanf("%f", &b);
printf(" c="); scanf("%f", &c);
//вычисление
if (a==0) printf("\nПрограмма не решает линейные уравнения");
else
{
D=b*b-4*a*c;
if (D<0) printf("\n Нет действительных корней");
else
{
x1=(-b-sqrt(D))/2/a;
x2=(-b+sqrt(D))/(2*a);
printf("\nКорни уравнения: х1=%f x2=%f ",x1,x2);
}
}
printf("\nДля выхода нажмите любую клавишу …");
getche();
return 0;
}
В этой программе два условных оператора, вложенные друг в друга. Первый из них проверяет условие равенства нулю коэффициента а. Если это условие верно, то выполняется один единственный оператор – вывод на экран сообщения («Программа не решает линейных уравнений»). Если же условие неверно (ветвь else), то производится вычисление корней уравнения. При этом нужно выполнить не один, а много операторов, поэтому все они объединяются в составной оператор с помощью фигурных скобок. После вычисления дискриминанта D снова проверяется условие с помощью вложенного условного оператора (if (D<0) ). В ветви else этого условия - также составной оператор, объединяющий операторы вычисления и вывода на экран значений корней уравнения х1 и х2.
2.5. Использование оператора множественного выбора
Рассмотренный выше условный оператор if предоставлял возможность выбора одного из двух направлений выполнения программы. В случае, если возможных направлений более двух, удобно использовать оператор множественного выбора switch. Этот оператор позволяет организовать мультиветвление.
Пример 2.5. Калькулятор.
Составить программу, выполняющую с двумя действительными числами одно из четырех арифметических действий (сложение, вычитание, умножение, деление) по выбору.
Постановка задачи
Исходными данными для этой задачи являются значения двух чисел a и b, с которыми будут выполняться действия; a и b любые действительные числа. Значения a и b вводятся с клавиатуры.
Выходные данные - результат вычислений, который выводится на экран монитора.
Метод решения
После ввода исходных данных пользователю предоставляется возможность выбрать арифметическое действие. В зависимости от выбора пользователя, выполняем ту или иную операцию с введенными числами.
Возможных действий (направлений выполнения программы) – четыре, следовательно, в этой задаче удобно воспользоваться оператором варианта.
Блок-схема алгоритма
Текст программы
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{float a,b, res; char k;
printf ("\nКальсулятор");
// Ввод исходных данных
printf ("\nВвeдите числo a=");
scanf ("%f",&a);
printf ("\nВвeдите число b=");
scanf ("%f",&b);
printf ("\nВыберите действие");
printf ("\n+ Сложение");
printf ("\n- Вычитание");
printf ("\n* Умножение");
printf ("\n/ Деление\n");
k=getche();
// Вычисления
switch (k)
{
{ case '+': res=a+b; break;
case '-': res=a-b; break;
case '*': res=a*b; break;
case '/': res=a/b; break;
} default:
printf ("\n Неверно выбрано действие. Нажми любую клавишу");
getche();
return 0;
}
//вывод результата
printf ("\n %f %c %f = %f",a,k,b,res);
printf("\nДля выхода нажмите любую клавишу …");
getche();
return 0;
}
Для выбора арифметического действия используется символьная переменная k. С помощью оператора switch значение переменной k сравнивается с константами, обозначающими действия. Для выполнения выбирается тот вариант, константа которого совпадает со значением k. После выполнения действия выбранного варианта стоит оператор break, который передает управление сразу в конец оператора switch. Когда введенное значение переменной k не соответствует ни одной из констант, управление передается ветви с меткой default. В этой ветви на экран выводится сообщение о неверном выборе действия и программа завершает работу (оператор return).
2.6. Совместное использование условного оператора и оператора выбора
Пример 2.6. Месячный расход электроэнергии
Некоторое непрерывное производство ежесуточно расходует W квт/ч электроэнергии. Для заданного месяца текущего года требуется вычислить общий расход электроэнергии R.
Постановка задачи
Исходными данными для этой задачи являются номер месяца j и суточный расход энергии W (вводятся с клавиатуры). Кроме того, необходимо задавать год, для которого производятся вычисления (задается в программе в виде константы).
Выходные данные – расход электроэнергии R за выбранный месяц в квт/ч. Значение R выводится на экран монитора.
Метод решения
Для вычисления расхода электроэнергии за месяц необходимо суточный расход энергии W умножить на количество дней в заданном месяце: R = W d. Количество дней в месяце d зависит от номера месяца (см. календарь). Кроме того, в феврале может быть либо 28 дней либо 29 (если год високосный) дней. Номера високосных годов кратны четырем.
Блок-схема алгоритма
Текст программы
#include <stdio.h>
#include <conio.h>
main()
{const god=2006;
float W, R;
int j;
//заставка
printf("\nПРОГРАММА ВЫЧИСЛЕНИЯ РАСХОДА
ЭЛЕКТРОЭНЕРГИИ ЗА ОПРЕДЕЛЕННЫЙ МЕСЯЦ ГОДА” );
//ввод исходных данных
printf("\n Введите расход энергии за 1 день");
scanf("%f", &W);
printf("\n Введите номер месяца");
scanf("%d", &j);
switch (j) {
{case 1:case 3:case 5: case 7: case 8: case 10:case 12: R=31*W; break;
case 4:case 6:case 9: case 11: R=30*W; break;
case 2 : if (god%4) R=28*w; else R=29*W;break;
}
default: printf ("\n нет такого месяца ");return 0;
}
//вывод результата
printf ("\n за %d месяц израсходовано %f кВт ", j, R);
printf("\nДля выхода нажмите любую клавишу");
getche();
return 0;
}
В этой программе выбор формулы для вычисления осуществляется с помощью оператора switch. В одну из ветвей оператора варианта вложен условный оператор if (определение количества дней в феврале для високосного и не високосного года). Кроме того, у оператора варианта есть ветвь default (случай, когда введенное число j не является номером месяца года). В операторе if в качестве условия проверяется значение выражения, вычисляющего остаток целочисленного деления (эта операция обозначается знаком %). Номер года задан в виде целой константы.