Лабораторная работа № 3 программирование алгоритмов разветвляющейся структуры
Цель работы – овладеть практическими навыками разработки, программирования вычислительного процесса разветвляющихся структур, получить дальнейшие навыки по отладке и тестированию программы.
Оператор if-else
Пример 1. Даны два числа a, b. Найти максимальное значение из двух чисел.
Алгоритм решения:
Если значение выражения a > b истинно, то максимальным числом является число a. Если же значение выражения a > b ложно, то максимальным числом является число b.
#include <stdio.h>
#include <conio.h>
#include "windows.h"
int main(int argc, char* argv[])
{
int a, b;
char sIn[] = "Введите два целых числа >";
char sOut[] = "max из чисел %d, %d = %d\n";
char sEqual[] = "Числа равны\n";
CharToOem (sIn, sIn);
CharToOem (sOut, sOut);
CharToOem (sEqual, sEqual);
printf(sIn);
scanf("%d %d", &a, &b); // Ввод с клавиатуры двух чисел
if (a > b)
printf(sOut, a, b, a);
else
printf(sOut, a, b, b);
getch();
return 0;
}
При равенстве чисел желательно выводить надпись, что числа равны. Для этого немного модифицируем программу:
int main(int argc, char* argv[])
{
int a, b;
char sIn[] = "Введите два целых числа >";
char sOut[] = "max из чисел %d, %d = %d\n";
char sEqual[] = "Числа равны\n";
CharToOem (sIn, sIn);
CharToOem (sOut, sOut);
CharToOem (sEqual, sEqual);
printf(sIn);
scanf("%d %d", &a, &b); // Ввод с клавиатуры двух чисел.
if (a > b)
printf(sOut, a, b, a);
else if (a < b)
printf(sOut, a, b, b);
else
printf(sEqual);
getch();
return 0;
}
Пример 2. Даны три числа a, b, c. Найти максимальное значение из трех чисел.
Алгоритм решения:
Если значение выражения a > b истинно, то максимальное значение определяем, исходя из чисел a и c. Если же значение выражения a > b ложно, то максимальное значение определяем, исходя из чисел b и c.
int main(int argc, char* argv[])
{
int a, b, c;
char sIn[] = "Введите три целых числа >";
char sOut[] = "max = %d\n";
CharToOem (sIn, sIn);
printf(sIn);
scanf("%d %d %d", &a, &b, &c); // Ввод с клавиатуры трех чисел
if (a > b)
if (a > c)
printf(sOut, a);
else
printf(sOut, c);
else
if (b > c)
printf(sOut, b);
else
printf(sOut, c);
getch();
}
Пример 3. Найти максимальное значение из 6 чисел.
Если для данной задачи вычислять максимум по аналогии с приведенными выше примерами, то код программы получится сложным и запутанным. Поэтому предложим другой, более простой метод вычисления максимума, который представлен следующим алгоритмом:
Шаг 1. Устанавливаем переменные a, b, c, d, e и f.
Шаг 2. Определяем значение переменной max по формуле max = a.
Шаг 3. Если max < b, значение max вычисляем по формуле max = b.
Повторяем шаг 3 для переменных c, d, e и f.
int main(int argc, char* argv[])
{
int a, b, c, d, e, f, max;
char sIn[] = "Введите шесть целых чисел >";
CharToOem (sIn, sIn);
printf(sIn);
scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f); // Ввод с клавиатуры 6 чисел
max = a;
if (b > max) max = b;
if (c > max) max = c;
if (d > max) max = d;
if (e > max) max = e;
if (f > max) max = f;
printf("max = %d\n", max);
getch();
}
Код программы состоит из последовательности почти одинаковых директив. Поэтому без труда можно составить программу вычисления максимума для любого количества переменных.
Пример 4. Найти корни уравнения a ⋅ x2 + b ⋅ x + c = 0
В зависимости от параметров это уравнение может быть: квадратным, если a ≠ 0; тождеством, если a = b = c = 0; линейным, если a = 0, b ≠ 0; не иметь смысла, если a = b = 0, а c ≠ 0. Алгоритм решения задачи можно сформулировать следующим образом:
Шаг 1. Устанавливаем значения переменных a, b и c.
Шаг 2. Если a ≠ 0, решаем квадратное уравнение.
Шаг 3. Если а = 0, b ≠ 0, решаем линейное уравнение.
Шаг 4. Если a = b = c = 0, решаем как тождество.
Шаг 5. Если a = b = 0, а c ≠ 0, то констатируем, что решений нет.
int main(int argc, char* argv[])
{
double a, b, c, d; // a, b, c - переменные для коэффициентов уравнения.
double x1=1, x2=1; // x1, x2 - переменные для корней уравнения.
char sIn[] = "Введите коэффициенты уравнения >";
char sOut1[] = "Корни :\n x1= %f\nx2= %f\n";
char sOut2[] = "Уравнение не имеет действительных корней. \n";
char sOut3[] = "Уравнение имеет один корень x1= %f\n";
char sOut4[] = "Любое число является корнем уравнения\n";
char sOut5[] = "Уравнение не имеет решений\n";
CharToOem (sIn, sIn);
CharToOem (sOut1, sOut1);
CharToOem (sOut2, sOut2);
CharToOem (sOut3, sOut3);
CharToOem (sOut4, sOut4);
CharToOem (sOut5, sOut5);
printf(sIn);
scanf("%lf %lf %lf", &a, &b, &c);
if (a != 0) // Если выражение a != 0, то уравнение квадратное.
{
d = b * b - (4 * a * c); // Вычисляем дискриминант.
if (d >= 0) // Если дискриминант >= 0, то
{
d = sqrt(d); // уравнение имеет два корня.
x1= (-b + d)/(2 * a);
x2 = (-b - d)/(2 * a);
printf(sOut1, x1, x2);
}
else // Если дискриминант < 0, то действительных корней нет.
printf(sOut2);
} // Случай a != 0 рассмотрен.
else // Случай a = 0. Уравнение линейное и имеет вид bx + c = 0
{
if (b != 0) // Случай, когда b не равен нулю.
printf(sOut3, x1);
else // Случай, когда b = 0
{
if ( c == 0) // Случай a = 0, b = 0, c = 0.
printf(sOut4);
else // Случай a = 0, b = 0, c != 0.
printf(sOut5);
}
}
}