Студопедия — ПРАКТИЧЕСКАЯ ЧАСТЬ. Пример 1. Написать программу решения квадратного уравнения с проверкой на наличие вещественных (не комплексных) корней на основе только операторов if
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

ПРАКТИЧЕСКАЯ ЧАСТЬ. Пример 1. Написать программу решения квадратного уравнения с проверкой на наличие вещественных (не комплексных) корней на основе только операторов if






Пример 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, квадратное уравнение вырождается и превращается в линейное. Решение в этом случае очевидно.

В программу подключена библиотека math.h для действий с математическими функциями, например sqrt().

В первом операторе if применено логическое условие И (&&;) для проверки того, что дискриминант не равен отрицательному значению и одновременно, чтобы первый коэффициент квадратного уравнения не был равен нулю. Аналогичное условие прописано и для последнего оператора if.


 

Задание 1

1. Объясните включение float перед функцией sqrt().

2. В программу введите изменения для вычисления комплексных корней квадратного уравнения без подключения дополнительных библиотек.

3. В программе предусмотрите ситуацию, когда все коэффициенты квадратного уравнения равны нулю.

4. В программе предусмотрите подстановки найденных корней в заданное квадратное уравнение с выводом возможной невязки. Предусмотрите также меры по уменьшению невязки.

5. Предусмотрите циклический ввод коэффициентов квадратного уравнения и вывода решения троекратно.

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

Пример 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. Выполнение программы с двумя нулевыми коэффициентами

Задание 2

1. Добавьте в программу преобразование типов при использовании функции sqrt().

2. В программе предусмотрите вычисление комплексных и мнимых корней квадратного уравнения.

3. Предусмотрите ввод целочисленных коэффициентов квадратного уравнения, используя тип int. В отчет вставьте возможный результат выполнения программы.

4. Напишите программу ввода вещественных чисел и вывода абсолютного значения этого числа на основе конструкции if – else.


 

Пример 3. Написать программу классификации введенного с терминала символа на основе конструкции if – else if – else [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. Результат классификации символа

Задание 3

1. Сформируйте одно условие ввода букв как прописных, так и строчных с последующим выводом: This is an alphabetic character.

2. Напишите программу циклического ввода символов и вывода результата их классификации до момента нажатия цифры 10Х, где Х – номер компьютера (1, 2, ¼), на котором выполняется лабораторная работа.

3. Напишите программу решения квадратного уравнения с применением конструкций if – else if – else.

Пример 4. Написать программу расчета простого арифметического выражения на основе оператора switch.

Программный код решения примера

#include <stdio.h> #include <conio.h> int main (void) { float value1, value2; char operat; printf("\n\t Printed on the keyboard expression: "); scanf_s("%f%c%f", &value1, &operat, sizeof(char), &value2); switch (operat) { case '+': printf("\n\t Result: %1.4f\n", value1 + value2); break; case '-': printf("\n\t Result: %1.4f\n", value1 - value2); break; case '*': printf("\n\t Result: %1.4f\n", value1 * value2); break; case '/': if (value2 == 0.0) printf("\n\t Division by zero.\n"); else printf("\n\t Result: %1.4f\n", value1 / value2); break; default: printf("\n\t Unknown arithmetic operator\n\t error or enter a number. Break!\n"); break; } // End switch printf("\n Press any key: "); getch(); return 0; }

В программе использована полная форма оператора switch. Оператор break инициирует немедленный выход из него. Возможно использование вложенных операторов switch.

Вероятный результат выполнения программы представлен на рис. 4.4.


Рис. 4.4. Расчет простого арифметического выражения

Задание 4

1. Проверьте деление числа на нуль и ввод недопустимого символа.

2. Примените условие равенства нулю вводимого числа без знака «==».

3. Напишите программу расчета простого выражения с помощью конструкций if – else if – else.

4. Напишите программу деления суток на «morning» (утро), «day» (день),

«afternoon» (послеобеденное время), «evening» (вечер), «night» (ночь). Время ввода задается пользователем с клавиатуры.

Пример 5. Написать программу вычисления двух целых случайных чисел и определения наибольшего из них. Определение наибольшего числа произвести с помощью оператора условия?.

Программный код решения примера

#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 [2].


Возможный результат выполнения программы показан на рис. 4.5.

Рис. 4.5. Результат определения максимального числа

Задание 5

1. При выводе максимального числа предусмотрите сообщение об имени числа, т. е. a или b.

2. В цикле сформируйте вектор десяти случайных чисел из интервала [0, 1] и выведите на дисплей.

3. Для задания системного времени примените директиву define N X, где Х – номер компьютера, на котором выполняется лабораторная работа.

4. Примените оператор условия? для определения абсолютного значения вещественного числа, которое должно вводиться пользователем с клавиатуры.

Пример 6. Используя оператор условия? и переключатель switch, написать программу определения времени года по вводимым числам от 1 до 12, считая, что цифра 1 соответствует январю, цифра 2 – февралю и т. д.

Программный код решения примера

#include <stdio.h> #include <conio.h> int main (void) { int x; printf("\n\t Enter a whole number between 1 and 12: "); scanf_s("%d", &x); switch (x > 0 && x < 3? 1: x == 12? 1: x > 2 && x < 6? 2: x > 5 && x < 9? 3: x > 8 && x < 12? 4: x > 12 || x < 1? 5: 5) { case 1: printf("\n\t This Winter\n"); break; case 2: printf("\n\t This Spring\n"); break; case 3: printf("\n\t This Summer\n"); break; case 4: printf("\n\t This Autumn\n"); break; case 5: printf("\n\t This is a mistake (Error)\n"); break; } printf("\n Press any key: "); getch(); return 0; }

В программе три месяца зимы кодируются цифрой 1, три месяца весны –2, три месяца лета –3, три месяца осени – цифрой 4. Если введенная цифра не входит в целочисленный интервал [1; 12], то эта ситуация кодируется цифрой 5.


Возможный результат выполнения программы представлен на рис. 4.6.

Рис. 4.6. Результат программы по определению времени года

Задание 6

1. Проверьте программу по вводимым вещественным числам. Объясните результат.

2. Проверьте программу по вводимым буквам или знакам, имеющимся на клавиатуре. Объясните результат.

3. В программе вместо 5-го пункта, т. е. вместо case 5, примените операцию default.

4. Напишите программу определения времени года по вводимым числам без операторов условия?.

 

Пример 7. Написать программу распечатки четных целых чисел от 0 до 30.

Программный код решения примера

#include <stdio.h> #include <conio.h> int main (void) { int x; printf("\n\t Even numbers from 0 to 30:\n\n"); for (x = 0; x < 31; x++) { if (x % 2) continue; printf("\t\t %3d\n", x); } printf("\n Press any key: "); getch(); return 0; }


В программе в качестве проверки условия использовано деление по модулю (х % 2). Если остаток от деления числа х не равен нулю, то опрератор (утверждение, инструкция) continue передает управление непосредственно инструкции, проверяющей условное выражение, после чего циклический процесс продолжается. С помощью программы выводятся только четные числа, а при обнаружении нечетного числа происходит преждевременный переход к следующей итерации цикла, и функция printf() опускается.

Результат выполнения программы показан на рис. 4.7.

Рис. 4.7. Результат вывода четных чисел


 

Задание 7

1. В программу включите действие подсчета суммы четных чисел.

2. Подсчитайте число итераций оператора цикла.

3. В программе вместо цикла for примените цикл if. Объясните действие инструкции continue.

4. В программе вместо цикла for примените цикл do – if. Объясните действие инструкции continue.

5. Напишите программу вывода четных чисел без оператора continue. Подсчитайте число итераций оператора цикла.

6. Сделайте вывод четных чисел из интервала от Х до 10Х, где Х – номер компьютера, на котором выполняется лабораторная работа. Подсчитайте сумму четных чисел.

Пример 8. Написать программу подсчета суммы трех чисел из трех вложенных циклов и, если сумма делится без остатка на число 3, прекратите сравнение чисел и выйдите из циклов с последующей распечаткой этой суммы и слагаемых. Первый цикл – с 51 до 1, второй – с 41 до 1, третий – с 1 до 50. Первый цикл изменяется на 7 единиц, второй – на 1, третий – на 7 единиц.

Программный код решения примера с оператором goto

#include <stdio.h> #include <conio.h> int main (void) { int a, b, c, i, j, k; a = b = c = 0; for (i = 51; i >= 1; i -= 7) for (j = 41; j >= 1; --j) for (k = 1; k <= 50; k += 7) if (((i + j + k) % 3 == 0) && (i < 51) && (j < 41)) {a = i; b = j; c = k; goto sum3; } sum3: printf("\n\t The sum (%d + %d + %d) is equal %d\n", a, b, c, a + b + c); printf("\n Press any key: "); getch(); return 0; }

В программе использовано декрементирование (уменьшение на единицу) переменной j в форме --j. Переменная i с каждой итерацией цикла уменьшается на 7 единиц. Переменная k с каждой итерацией цикла увеличивается на 7 единиц. После оператора if включены фигурные скобки для выполнения нескольких действий при выполнении заданного условия оператора if.


Результат выполнения программы представлен на рис. 4.8.

Рис. 4.8. Итеративный подсчет числовой суммы, делящейся на 3

Примечание. Оператор goto нельзя применять для перехода в тело цикла, т. е. метка не должна быть внутри оператора цикла. Она может появиться текстуально до или после оператора goto.

Задание 8

1. В программу включите подсчет числа итераций каждого из циклов.

2. Вместо оператора безусловного перехода goto примените оператор break. Произведите также подсчет числа итераций каждого из циклов. Сравните с аналогичными результатами предыдущего пункта задания.

3. В программе вместо операторов for примените операторы if. Выполните действия двух предыдущих пунктов задания.

4. Напишите программу ввода символа до тех пор, пока не будет введен заранее определенный символ, например ' w '. Используйте оператор goto. Предусмотрите отступ от левого края дисплея.

Пример 9. Написать программу распечатки на консоль простых чисел из диапазона от 2 до N, где N – число, вводимое пользователем с клавиатуры, которое не превосходит, например, 1 000.

Как известно, простое число – это целое положительное число больше единицы, которое не делится без остатка ни на одно другое целое положительное число, кроме единицы и самого себя. Единица не считается простым числом.

Возможный программный код решения примера

#include <stdio.h> #include <conio.h> #include <stdlib.h> // для exit() #define Nmax 50 int main (void) { int i, j; int ok, in; int N; printf("\n Enter an integer from 2 to %d: ", Nmax); in = scanf_s("%d", &N); if (in == 0 || N < 2 || N > Nmax) { printf("\n Error input. Press any key: "); getch(); exit(1); } printf("\n Prime numbers from 2 to %d:\n\n", N); for (i = 2; i <= N; i++) { ok = 1; for (j = 2; j < i; j++) if ((i % j) == 0) ok = 0; if (ok) printf(" %3d", i); } printf("\n\n Press any key: "); getch(); return 0; }

В программе с помощью оператора if осуществляется проверка правильности ввода данных с клавиатуры. Кроме того, этим же оператором проверяется остаток от деления двух чисел и условной истинности, когда переменная ok не равна нулю. С помощью препроцессорной директивы define определяется верхняя допустимая граница для простых чисел.


Пример выполнения программы показан на рис. 4.9.

Рис. 4.9. Пример вывода на консоль простых чисел

Задание 9

1. В программе вместо оператора цикла for примените оператор if.

2. В программе примите допустимое число Nmax, равное 9 999. Предусмотрите при этом форматированный вывод на консоль простых чисел построчно, по 15 чисел в каждой строке. Используйте тернарный оператор?:.

3. Предыдущий пункт задания выполните с помощью операторов if, else.


Контрольные вопросы

1. Как организуются множественные действия в операторе условия if?

2. Какой формат записи имеет тернарный оператор условия?

3. Какой оператор условия рекомендуется использовать для программирования меню?

4. В чем различие и сходство между операторами break и continue?

5. Как можно обеспечить выход из вложенных циклов?

6. Как можно организовать переходы в различные точки программы на С?

7. Какие логические операторы отношения используются в языке С?

8. Что произойдет, если в операторе switch после метки case не использовать оператор break?

9. Что произойдет, если в операторе switch не поставить метку default и условие переключения не совпадет ни с одной меткой case?

 

 







Дата добавления: 2015-09-06; просмотров: 1669. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Типология суицида. Феномен суицида (самоубийство или попытка самоубийства) чаще всего связывается с представлением о психологическом кризисе личности...

ОСНОВНЫЕ ТИПЫ МОЗГА ПОЗВОНОЧНЫХ Ихтиопсидный тип мозга характерен для низших позвоночных - рыб и амфибий...

Принципы, критерии и методы оценки и аттестации персонала   Аттестация персонала является одной их важнейших функций управления персоналом...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия