Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 3.doc
Скачиваний:
17
Добавлен:
09.11.2018
Размер:
75.26 Кб
Скачать

Лабораторная работа № 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);

}

}

}