Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Plan_pervogo_zanyatia (1).doc
Скачиваний:
3
Добавлен:
26.03.2016
Размер:
113.66 Кб
Скачать

Int main() {

double a, b, c, discriminant, x1, x2;

setlocale(LC_ALL, "rus");

setlocale(LC_NUMERIC, "eng");

#if DEBUG

a = 1.0;

b = -5.0;

c = 6.0;

#else

printf("Решение квадратного уравнения ax^2 + bx + c = 0\n"

"Введите коэффициенты\n"

"a = ");

scanf("%lf", &a);

printf("b = ");

scanf("%lf", &b);

printf("c = ");

scanf("%lf", &c);

#endif

printf("\nКвадратное уравнение %fx^2 + %fx + %f=0\n",

a, b, c);

discriminant = b * b - 4.0 * a * c;

#if DEBUG

printf("discriminant = %f\n", discriminant);

#endif

if (discriminant < 0.0) {

printf("Корней нет.\n");

return 1;

}

x1 = (-b - sqrt(discriminant)) / (2.0 * a);

x2 = (-b + sqrt(discriminant)) / (2.0 * a);

printf("x1 = %f\nx2 = %f\n", x1, x2);

return 0;

}

Теперь при DEBUG1 вы можете не заботиться о вводе коэффициентов. После отладки программы на тестовом примере вы заменяете 1 (ИСТИНА) на 0 (ЛОЖЬ). Тогда в текст программы включаются операторы ввода-вывода и исчезает вывод дискриминанта.

9. Отладка

Рекомендуется следующая последовательность действий.

Поставить курсор на строку программы, после которой программа будет выполняться по шагам. Для нашего примера поставим курсор на строку с вычислением дискриминанта

Нажимаем Ctrl+F10 (выполнить до указанной позиции).

Производим ввод значений коэффициентов. Выполнение программы приостанавливается.

Откроем окно вывода контрольных значений.

Debug →Windows→Watch→Watch1

Окно состоит из двух колонок: имя и значение

Введём последовательно: a, b, c, discriminant.

Для дискриминанта отображается мусор, т.к. эта переменная ещё не вычислялась по формуле.

Начинаем выполнение по шагам.

F10 (обход функций)

F11 (с заходом в функции)

В нашем примере надо нажимать F10.

Для остановки отладки Debug → Stop Debugging

10. Сравнение double и float

Чтобы перейти к float, изменим следующие строки:

float a, b, c, discriminant, x1, x2; // double заменили на float

scanf("%f", &a); // %lf заменили на %f

scanf("%f", &b);

scanf("%f", &c);

И ещё: #define DEBUG 0

Получаем три предупреждения о возможной потере данных при преобразовании double во float. Самоуверенно не обращаем на них внимания!

Результат:

Решение квадратного уравнения ax^2 + bx + c = 0

Введите коэффициенты

a = 1

b = -100000

c = 1

Квадратное уравнение 1.000000x^2 + -100000.000000x + 1.000000 = 0

x1 = 0.000000

x2 = 100000.000000

Результат приниципиально неверен! Нулевой корень при ненулевом свободном члене. Верните назад double и спецификаторы формата в scanf.

Решение квадратного уравнения ax^2 + bx + c = 0

Введите коэффициенты

a = 1

b = -100000

c = 1

Квадратное уравнение 1.000000x^2 + -100000.000000x + 1.000000 = 0

x1 = 0.000010

x2 = 99999.999990

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]