Пример 1. Напишите программу решения квадратного уравнения с проверкой на наличие вещественных (не комплексных) корней на основе только операторов if. Вид квадратного уравнения:
Как известно, квадратное уравнение будет иметь вещественные корни, если его дискриминант будет неотрицательным, т.е. когда
Программный код решения примера:
#include <stdio.h>#include <conio.h>#include <math.h> int main(void) { float a, b, c; float D, x1, x2, x; printf("\n\t Equation a*x^2 + b*x + c = 0\n"); printf("\n\t Enter the coefficient a: "); scanf_s("%f", &a); printf("\t Enter the coefficient b: "); scanf_s("%f", &b); printf("\t Enter the coefficient c: "); scanf_s("%f", &c); D = b*b - 4*a*c; if (D >= 0 && a != 0) { x1 = -b/(2*a) + (float)sqrt(D)/(2*a); x2 = -b/(2*a) - (float)sqrt(D)/(2*a); printf("\n\t The roots of the equation:\n\t x1 = %1.4f, x2 = %1.4f\n", x1, x2); } if (D < 0) printf("\n\t The roots of complex\n"); if (a == 0 && b != 0) { x = -c/b; printf("\n\t As a = %1.0f,\n\t the solution of the equation is: %1.4f\n", a, x); } printf("\n Press any key: "); _getch(); return 0;}
Возможный результат выполнения программы показан на рис. 4.1.
Рис. 4.1. Результат решения квадратного уравнения
В программе последовательно проверяются условия с помощью операторов if. В последнем случае, когда коэффициент а = 0, квадратное уравнение вырождается и превращается в линейное уравнение. Решение в этом случае очевидно.
В программе применены функции scanf_s() вместо стандартной функции scanf() языка С. Это сделано для того, чтобы по этим функциям не было предупреждений (warning) в MS Visual Studio 2008.
Кроме того, в программу подключена библиотека math.h для действий с математическими функциями, например, sqrt().
В первом операторе if применено логическое условие И ( && ) для проверки того, что дискриминант не равен отрицательному значению и одновременно чтобы первый коэффициент квадратного уравнения не был равен нулю. Аналогичное условие прописано и для последнего оператора if.
Пример 2. Напишите программу решения квадратного уравнения с проверкой на наличие вещественных корней на основе конструкции if–else. Вид квадратного уравнения:
Программный код решения примера:
#include <stdio.h>#include <conio.h>#include <math.h> int main(void) { float a, b, c; float D, x1, x2, x; printf("\n\t Equation a*x^2 + b*x + c = 0\n"); printf("\n\t Enter the coefficient a: "); scanf_s("%f", &a); printf("\t Enter the coefficient b: "); scanf_s("%f", &b); printf("\t Enter the coefficient c: "); scanf_s("%f", &c); D = b*b - 4*a*c; if (D >= 0 && a != 0 && b != 0) { x1 = -b/(2*a) + (float)sqrt(D)/(2*a); x2 = -b/(2*a) - (float)sqrt(D)/(2*a); printf("\n\t The roots of the equation:\n\t x1 = %1.4f, x2 = %1.4f\n", x1, x2); } else { if (a == 0 && b != 0) { x = -c/b; if (c != 0) printf("\n\t As a = %1.0f,\n\t the solution of the equation is: %1.4f\n", a, x); else printf("\n\t As a = %1.0f and c = %1.0f,\n\t the solution of the equation is: %1.0f\n", a, -x); } if (D < 0) printf("\n\t The roots of complex\n"); } printf("\n Press any key: "); _getch(); return 0;}
В программе использованы вложенные операторы if.
Результат выполнения программы при исключительной ситуации показан на рис. 4.2.
Рис. 4.2. Выполнение программы с двумя нулевыми коэффициентами
Пример 3. Напишите программу классификации введенного с терминала символа на основе конструкции if–else if–else [4.1].
Символы (одиночные) будем считать как строчные и прописные буквы латинского алфавита, цифры от 0 до 9, и специальные символы.
Программный код решения примера:
#include <stdio.h>#include <conio.h> int main(void) { char c; // Ввод одиночного символа printf("\n\t Enter a single character: "); scanf_s("%c", &c); if ( c >= 'a' && c <= 'z' ) printf("\n\t This is a small letter\n"); else if ( c >= 'A' && c <= 'Z') printf("\n\t This is a capital letter\n"); else if ( c >= '0' && c <= '9') printf("\n\t This figure (digit)\n"); else printf("\n\t This is a special character\n"); printf("\n Press any key: "); _getch(); return 0;}
Результат выполнения программы показан на рис. 4.3.
Рис. 4.3. Результат классификации символа
Пример 4. Напишите программу вычисления двух целых случайных чисел и определения наибольшего из них. Определение наибольшего числа произведите с помощью оператора условия ?
Программный код решения примера:
#include <stdio.h>#include <conio.h>#include <stdlib.h> // Для функций случайных чисел#include <time.h> int main (void) { int a, b, maxab; unsigned int some; long int L; L = (long) time(NULL); some = (unsigned) L/2; srand(some); a = rand(); b = rand(); printf("\n\t Random numbers: a = %d; b = %d\n", a, b); // Оператор условия для определения максимального числа maxab = (a > b) ? a : b; printf("\n\t Maximum number: %d\n", maxab); printf("\n Press any key: "); _getch(); return 0; }
В программе использованы функции генерации псевдослучайных чисел rand() и задания исходного псевдослучайного числа srand(). Указанные функции входят в стандартную библиотечную функцию stdlib.h. Функция time() входит в библиотечную функцию time.h, которая поддерживает функции, обращающиеся к системному времени.
Для переменных L и some выполнено приведение типов.
При каждом обращении к функции rand() возвращается целое в интервале между нулем и значением RAND_MAX, которое в любой реализации должно быть не меньше числа 32 767
Возможный результат выполнения программы показан на рис. 4.4.
Рис. 4.4. Результат определения максимального числа