IДробные числа
В прошлом уроке мы прошли целые числа: как они хранятся, считываются, выписываются и обрабатываются в языке программирования С/С++. Но в математике целые числа занимают лишь малую часть среди всех чисел. Потому что есть ещё и дробные числа, и они, конечно же, тоже есть и в языке программирования С/С++.
Хранение дробных чисел
Дробные числа хранятся в переменных типа
double
(от англ. double — двойной). Данный тип так называется, потому что для хранения дробного числа необходимо использовать две ячейки в памяти: для целой и для дробной части.
Целая часть числа
Целая часть [x] числа x - наибольшее целое число, не превосходящее x.
[3.273] = [3.989] = 3 \\ [-3.273] = [-3.989] = -4
Для того, чтобы вычислить целую часть положительного числа в языке программирования С/С++, необходимо применить конвертацию переменной из типа
double
в тип
int
. Чтобы сконвертировать переменную типа
double
в тип
int
, необходимо просто поставить перед ней
int
и взять её в круглые скобки:
int(a);
Для того, чтобы вычислить целую часть отрицательного числа в языке программирования С/С++, необходимо отнять единицу от числа, сконвертированного в тип
int
.
int(a) - 1;
Дробная часть числа
Дробная часть \{x\} числа x - это разность x - [x] числа x и его целой части [x].
\{3.273\} = 3.273 - [3.273] = 3.273 - 3 = 0.273 \\ \{-3.273\} = -3.273 - [-3.273] = -3.273 - (-4) = -3.273 + 4 = 0.727
Проще говоря, целая часть - то, что слева от точки, а дробная часть - то, что справа.
Для того, чтобы вычислить дробную часть числа в языке программирования С/С++, необходимо вычесть из этого числа его целую часть.
a - int(a);
Но бывают дробные числа, дробная часть которых бесконечна. Такие числа хранятся в компьютере с некоторой точностью в силу невозможности хранить бесконечное число чисел.
Дробные числа в языке программирования могут также храниться в типе float
, но его чаще всего не используют, так как он храните меньшее количество цифр после точки.
Создание переменной типа double
Чтобы создать переменную типа
double
:
double x; // создаём переменную типа double
Как и в случае с целыми переменными, рекомендуется сразу же очищать переменную от мусора, присваиванием ей нулевое значение:
double x = 0.0; // создаём переменную типа double
В случае типа double
необходимо присваивать значение именно 0.0
, так как первый нуль очищает целую часть, а второй - дробную. Это правило хорошего тона.
Считывание дробных чисел с клавиатуры
Считывание дробных чисел с клавиатуры в языке программирования С/С++ происходит аналогично считыванию целых чисел с помощью функции
scanf()
за исключением другого типа данных
(6 строка):
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
double x = 0.0; // создаём дробную переменную
scanf("%lf", &x); // считываем с клавиатуры дробное число в созданную переменную
return 0; // возвращаем 0 - успех
}
Для типа
double
короткое имя при считывании это
lf
.
lf
- образовано от словосочетания long float (длинное плавающее число - англ.) и подразумевает, что будет считано длинное дробное число.
Для типа float
используется короткое имя f
- от словосочетания float (плавающее число - англ.)
Вывод дробных чисел на экран
Вывод дробных чисел на экран в языке программирования С/С++ происходит аналогично выводу целых чисел с помощью функции
printf()
(7-8 строки):
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
double x = 0.0, y = 0.0; // создаём дробные переменные
scanf("%lf%lf", &x, &y); // считываем с клавиатуры дробные числа в созданные переменные
printf("x = %lf\n", x); // выписываем значение переменной х
printf("The value of y is %f\n", y); // выписываем значение переменной y
return 0; // возвращаем 0 - успех
}
Формат вывода дробных чисел на экран
В языке программирования С/С++ можно регулировать, сколько цифр после точки будет выписано на экран. По умолчанию выписываются 6 цифр после точки.
Чтобы указать, сколько цифр после точки необходимо отобразить, можно написать следующий код
(7-8 строки):
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
double x = 0.0, y = 0.0; // создаём дробные переменные
scanf("%lf%lf", &x, &y); // считываем с клавиатуры дробные числа в созданные переменные
printf("x = %.8lf\n", x); // выписываем значение переменной х в формате 8 цифр после точки
printf("y = %.12lf\n", y); // выписываем значение переменной y в формате 12 цифр после точки
return 0; // возвращаем 0 - успех
}
Пример вывода данного кода:
23.2435345463423435467564534546574
23.4679475845847583958946849568
x = 23.24353455
y = 23.467947584585
Process returned 0 (0x0) execution time : 14.551 s
Press any key to continue.
IIОперация деления с остатком
В языке программирования С/С++ есть операция деления с остатком. Более того, данная операция является очень популярной и широко используемой.
Определение оператора %
Для того, чтобы узнать остаток при делении одного числа на другое, существует специальный оператор, обозначающийся символом процента
%
:
c = a % b; // вычисляем остаток при делении переменной a на переменную b
printf("Remainder when dividing a number %d by a number %d is %d\n", a, b, c); // выводим получившейся остаток на экран
Остаток при делении отрицательных чисел
В математике принято, что остатки могут быть только положительными. Например, у числа -12 остаток 3 при делении на 5.
В языке программирования С/С++ остатки могут быть отрицательными. У числа -12 при делении на 5 остаток будет не 3, а -2. Необходимо иметь это в виду при решении зада
Процедура универсализации взятия остатка
написана в данном уроке чуть ниже.
IIIЦикл if
Мы начинаем знакомство с таким объектом языка программирования С/С++, как цикл. В языке программирования С/С++ есть несколько основных базовых циклов.
Определение
Цикл - это функция, принимающая в качестве аргументов некоторые условия, а затем, в зависимости от истинности или ложности данных условий, запускающая или же не запускающая команды из своего тела.
Самым базовым циклом в языке программирования С/С++, как и во многих других высокоуровневых языках программирования, является цикл
if
(от англ. if - если).
Цикл
if
выполняет ровно то, что он означает:
"Если условие в аргументе истинно, то команды из цикла будут выполнены, а если ложно - не будут".
Разновидности условий
В качестве условий могут выступать совершенно любые математические выражения, которые могут быть абсолютно точно истинными или же абсолютно точки ложными. Например, условие
"Среди чисел от 1 до 1000 есть число, которое делится на все положительные однозначные числа" указать в цикле
if
нельзя.
Условие должно быть односложным и легкопроверяемым компьютером с точки зрения вычисления. Условия могут быть как на созданные ранее переменные, так и на конкретные числа. Рассмотрим самые популярные разновидности условий:
Выражения со знаками:
В программировании существуют точно такие же знаки, что и в математике:
- Больше
>
- Меньше
<
- Больше или равно
>=
- Меньше или равно
<=
- Равно
==
- Не равно
!=
Обратите внимание, что знак "равно" в условии цикла if
состоит из двух символов равно ==
. А знак "не равно" состоит из восклицательного знака !
, который в языке С/С++ обозначает отрицание и символа равно: !=
.
Условие пишется в круглых скобочках через пробел после названия цикла:
if (a > 3){} // условие, что переменная a больше числа 3
if (a >= b){} // условие, что переменная a больше или равна переменной b
if (a < b){} // условие, что переменная a меньше переменной b
if (b <= 10){} // условие, что переменная b меньше или равна числа 10
if (a == 5){} // условие, что переменная a равна числу 5
if (b != 12){} // условие, что переменная b не равна числу 12
Выражения, требующие вычисления:
Но порой требуется сравнить не просто переменные или числа, а результаты некоторых операций над ними. Например, будет ли число
a
больше числа
b
после прибавления к нему числа
c
.
Для этого, конечно можно создать дополнительную переменную, положить в неё сумму, а потом уже сравнить эту сумму и число
c
в цикле
if
:
int sum_a_b = a + b; // создаём дополнительную переменную и кладём в неё сумму a и b
if (sum_a_b > c){} // проверяем, что сумма a и b больше c
Однако это не очень удобно с точки зрения лишнего кода, а также использования памяти, необходимо для создания новой переменной.
Данное сравнение можно осуществить гораздо удобней, сразу сравнив результат суммы и число:
if (a + b > c){} // проверяем, что сумма a и b больше c сразу внутри цикла if
Внутри цикла
if
можно вычислять выражения любой сложности:
if ((3 * a + 2 * b) * (7 * c - 40) + 120 + (e + 10) * (e + 10) > a * b * c){} // проверяем сложные выражения
Самое главное правильно расставить скобки и соблюсти синтаксис языка С/С++.
Проверка делимости одного числа на другое:
Операция взятия остатка может пригодиться для проверки делимости одного числа на другое. Если число
a
делится на число
b
, то остаток при делении числа
a
на число
b
равен нулю.
Поэтому проверить делимость числа
a
на число
b
в программе можно следующим образом:
if (a % b == 0){ // проверяем, что остаток от деления числа a на число b равен нулю
printf("%d is divided by %d\n", a, b); // выводим на экран, что число a делится на число b
}
Сложные условия в цикле if:
Иногда необходимо проверить сразу несколько условий. Например, что число чётное и положительное. В таком случае можно воспользоваться двумя циклами
if
:
if (a % 2 == 0){ // проверяем, что число a чётное
if (a > 0){} // проверяем, что число a положительное
}
Чтобы проверить, что число чётное, необходимо проверить на равенство нулю остаток при делении на 2.
Но иногда условия могут быть сложней: проверить, что число чётное, положительное и не делится на 7. И создавать для этого три вложенных друг в друга цикла
if
достаточно долго. Вместо этого можно воспользоваться одним циклом
if
со сложным условием, состоящем из нескольких простых:
if (a % 2 == 0 && a > 0 && a % 7 != 0){} // проверяем, что число a чётное, положительное и не делится на 7 в одном цикле if
Для связки простых условий можно использовать связки "И" или "ИЛИ". Связка "И" обозначается двумя символами амперсанта
&&
, а связка "ИЛИ" - двумя вертикальными палочками
||
. В примере выше использована связка "И".
Чтобы в одном цикле
if
проверить, что число кратно 11 или 13, необходимо воспользоваться связкой "ИЛИ":
if (a % 11 == 0 || a % 13 == 0){} // проверяем, что число a кратно 11 или 13
Иерархия простых условий в составе сложного:
Важно понимать, что связка "ИЛИ" относится к связке "И" точно также, как операция сложения к операции умножения.
Допустим, необходимо проверить условие, что число положительное, чётное и при этом кратно или 11 или 13.
Можно написать просто:
if (a > 0 && a % 2 == 0 && a % 11 == 0 || a % 13 == 0){} // проверяем, что число a положительное, чётное и при этом кратно или 11 или 13 первым способом
И это будет неправильно. Перейдём от условий к выражениям с операциями сложения и умножения:
(a>0) \times (a \% 2 == 0) \times (a \% 11 == 0) + (a \% 13 == 0)
Совершенно логично, что сначала будет произведено умножение, а только потом сложение полученного произведения с последним слагаемым. Но ведь нам необходимо, чтобы число гарантированно было чётно и положительно, и только потом кратно 11 или 13.
В стандартной арифметике для этого используются скобки:
(a>0) \times (a \% 2 == 0) \times \Big( (a \% 11 == 0) + (a \% 13 == 0)\Big)
В языке программирования происходит тоже самое. Чтобы условие работало корректно, необходимо добавить скобки:
if (a > 0 && a % 2 == 0 && (a % 11 == 0 || a % 13 == 0)){} // проверяем, что число a положительное, чётное и при этом кратно или 11 или 13 вторым способом
Конструкция else
Чаще всего необходимо сделать что-либо не только, когда выполнено условие, но и когда оно не выполнено. Использовать для этого второй точно такой же цикл
if
, только с противоположным условием не рационально.
Для этого и была придумана конструкция
else
, которая определяет область невыполнимости условия цикла
if
. Данная конструкция образована от слова
else (иначе - англ.).
Допустим, необходимо разделить число на 2 и выписать его на экран, если оно чётное, и просто выписать его на экран, если нечётное. Для этого и нужно использовать
else
:
if (a % 2 == 0){ // проверяем, что число чётное
printf("%d\n", a / 2); // делим его на 2 и выписываем на экран, если оно чётное
} else {
printf("%d\n", a); // в противном случае просто выписываем его на экран
}
Всё просто:
"Если число a
чётно, делим его на 2 и выписываем, иначе просто выписываем его".
Конструкция else if
Данная конструкция может быть использована и в ещё более сложном условии. Например, необходимо сделать что-то конкретное, в зависимости от остатка при делении на 3. Так как при делении на 3 может быть три остатка (0, 1 и 2), обыкновенно конструкцией "если...иначе..." ограничиться нельзя. В таком случае можно воспользоваться:
if (a % 3 == 0){ // проверяем, что число имеет остаток 0 при делении на 3
// делаем что-то
} else if (a % 3 == 1){ // проверяем, что число имеет остаток 1 при делении на 3
// делаем что-то
} else { // если остаток при делении на 3 не 0 и не 1, то он точно 2, поэтому просто пишем else
// делаем что-то
}
Взятие остатка от отрицательного числа
Как уже было замечено, в языке программирования С/С++ операция взятия остатка от отрицательных чисел работает не так, как принято у математиков. Если есть вероятность, что программному коду нужно будет работать с отрицательными числами, необходимо не просто брать остаток при делении одного числа на другое, а осуществлять проверку, с положительным или отрицательным числом идёт работа:
if (a > 0){
r = a % 5;
} else {
r = a % 5 + 5;
}
В представленном выше коде осуществляется проверка знака переменной
a
и в случае, если число
a
отрицательно, чтобы остаток был таким, как принято у математиков, к остатку прибавляется то, число, на которое делится переменная
a
.
Однако можно поступить проще. Так как ясно, что в языке программирования С/С++ при делении с остатком отрицательных чисел получается остаток, равный разности принятого у математиков остатка и делителя.
Например, число -12 при делении на 5 в стандартной операции даст остаток -2, а в общепринятой - 3, а число 3 как раз получается прибавлением -2 и 5.
Таким образом, например, при нахождении чисел, имеющих остаток 4 при делении на 11, можно написать следующее условие в цикле
if
:
if (a % 11 == 4 || a % 11 == -7){
// делаем что-то
}
1Задача №1.
Считать с клавиатуры два целых числа и вывести наибольшее из них.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0, y = 0; // создаём целочисленные переменные
printf("Print 2 numbers:\n"); // приглашаем пользователя на ввод
scanf("%d%d", &x, &y); // считываем два числа с клавиатуры
if (x > y){ // сравниваем числа
printf("%d\n", x); // выписываем x
} else {
printf("%d\n", y); // выписываем y
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 2 numbers:
12 9
12
Process returned 0 (0x0) execution time : 6.953 s
Press any key to continue.
2Задача №2.
Считать с клавиатуры целое число, проверить его на чётность.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0; // создаём целочисленные переменные
printf("Print 1 number:\n"); // приглашаем пользователя на ввод
scanf("%d", &x); // считываем число с клавиатуры
if (x % 2 == 0){ // проверяем число x на чётность
printf("%d is divided by 2\n", x); // выписываем, что x кратно двум
} else {
printf("%d is not divided by 2\n", x); // выписываем, что x не кратно двум
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 1 number:
35
35 is not divided by 2
Process returned 0 (0x0) execution time : 2.372 s
Press any key to continue.
3Задача №3.
Считать с клавиатуры два числа и проверить делится ли большее на меньшее.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0, y = 0; // создаём целочисленные переменные
printf("Print 2 numbers:\n"); // приглашаем пользователя на ввод
scanf("%d%d", &x, &y); // считываем числа с клавиатуры
if (x > y){ // сравниваем числа
if (x % y == 0){ // проверяем, что число x делится на число y
printf("%d is divided by %d\n", x, y); // выписываем, что x кратно числу y
} else {
printf("%d is not divided by %d\n", x, y); // выписываем, что x не кратно числу y
}
} else {
if (y % x == 0){ // проверяем, что число y делится на число x
printf("%d is divided by %d\n", y, x); // выписываем, что y кратно числу x
} else {
printf("%d is not divided by %d\n", y, x); // выписываем, что y не кратно числу x
}
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 2 numbers:
120 24
120 is divided by 24
Process returned 0 (0x0) execution time : 4.549 s
Press any key to continue.
4Задача №4.
Считать с клавиатуры три целых числа и вывести наибольшее из них.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0, y = 0, z = 0; // создаём целочисленные переменные
printf("Print 3 numbers:\n"); // приглашаем пользователя на ввод
scanf("%d%d%d", &x, &y, &z); // считываем числа с клавиатуры
if (x > y && x > z){ // проверяем, что число x самое большое
printf("%d\n", x); // выписываем наибольшее число
} else if (y > x && y > z){ // проверяем, что число y самое большое
printf("%d\n", y); // выписываем наибольшее число
} else { // если это не x и не y, то это z
printf("%d\n", z); // выписываем наибольшее число
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 3 numbers:
12 34 -19
34
Process returned 0 (0x0) execution time : 5.748 s
Press any key to continue.
1Задача №1.
Считать с клавиатуры 4 целых числа и вывести наименьшее из них.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0, y = 0, z = 0, w = 0; // создаём целочисленные переменные
printf("Print 4 numbers:\n"); // приглашаем пользователя на ввод
scanf("%d%d%d%d", &x, &y, &z, &w); // считываем числа с клавиатуры
if (x < y && x < z && x < w){ // проверяем, что число x самое маленькое
printf("%d\n", x); // выписываем наименьшее число
} else if (y < x && y < z && y < w){ // проверяем, что число y самое маленькое
printf("%d\n", y); // выписываем наименьшее число
} else if (z < x && z < y && z < w){ // проверяем, что число z самое маленькое
printf("%d\n", z); // выписываем наименьшее число
} else { // если это не x, не y и не z, то это w
printf("%d\n", w); // выписываем наименьшее число
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 4 numbers:
12 20 19 -20
-20
Process returned 0 (0x0) execution time : 13.041 s
Press any key to continue.
2Задача №2.
Считать с клавиатуры 3 целых числа и вывести их в порядке возрастания.
Порядок возрастания - это порядок, в котором каждое последующее число больше или равно предыдущего.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0, y = 0, z = 0; // создаём целочисленные переменные
printf("Print 3 numbers:\n"); // приглашаем пользователя на ввод
scanf("%d%d%d", &x, &y, &z); // считываем числа с клавиатуры
if (x < y && x < z){ // проверяем, что число x самое маленькое
if (y < z){ // сравниваем y и z
printf("%d %d %d\n", x, y, z); // выписываем числа в порядке возрастания
} else {
printf("%d %d %d\n", x, z, y); // выписываем числа в порядке возрастания
}
} else if (y < x && y < z){ // проверяем, что число y самое маленькое
if (x < z){ // сравниваем x и z
printf("%d %d %d\n", y, x, z); // выписываем числа в порядке возрастания
} else {
printf("%d %d %d\n", y, z, x); // выписываем числа в порядке возрастания
}
} else { // если самое маленькое не x и не y, то это z
if (x < y){ // сравниваем x и y
printf("%d %d %d\n", z, x, y); // выписываем числа в порядке возрастания
} else {
printf("%d %d %d\n", z, y, x); // выписываем числа в порядке возрастания
}
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 3 numbers:
28 -10 3
-10 3 28
Process returned 0 (0x0) execution time : 7.168 s
Press any key to continue.
3Задача №3.
Считать с клавиатуры целое число и вывести на экран его последнюю цифру.
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0; // создаём целочисленные переменные
printf("Print 1 number:\n"); // приглашаем пользователя на ввод
scanf("%d", &x); // считываем число с клавиатуры
printf("The last digit of %d is %d\n", x, x % 10); // выписываем последнюю цифру числа x
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 1 number:
126
The last digit of 126 is 6
Process returned 0 (0x0) execution time : 1.585 s
Press any key to continue.
4Задача №4.
Число подходящее, если оно нечётно и при этом имеет остаток 5 при делении на 8 или кратно 5. Считать с клавиатуры целое число и выписать, подходящее оно или нет.
Пример входных и выходных данных:
Пример числа, которое ввёл пользователь:
-13
Пример корректного вывода программы для вышенаписанных входных данных:
-13 is a suitable number
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
int x = 0; // создаём целочисленные переменные
printf("Print 1 number:\n"); // приглашаем пользователя на ввод
scanf("%d", &x); // считываем число с клавиатуры
if (x % 2 != 0 && (x % 8 == 5 || x % 8 == -3 || x % 5 == 0)){
printf("%d is a suitable number\n", x); // выписываем, что это число подходящее
} else {
printf("%d is not a suitable number\n", x); // выписываем, что это число не подходящее
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 1 number:
-13
-13 is a suitable number
Process returned 0 (0x0) execution time : 1.689 s
Press any key to continue.
5Задача №5.
Пользователь вводит одно число. Необходимо вывести его целую и дробную часть.
Пример входных и выходных данных:
Пример числа, которое ввёл пользователь:
-6.32
Пример корректного вывода программы для вышенаписанных входных данных:
The integer part of -6.320000 is -7
The fractional part of -6.320000 is 0.680000
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
#include <math.h> // подключаем библиотеку math.h
int main(){ // создаём главную функцию
double x = 0.0, frac_x = 0.0; // создаём дробные переменные
int int_x = 0; // создаём целочисленную переменную
printf("Print 1 numbers:\n"); // приглашаем пользователя на ввод
scanf("%lf", &x); // считываем дробное число
if (x < 0.0){ // если число отрицательно
int_x = int(x) - 1; // вычисляем целую часть
} else {
int_x = int(x); // вычисляем целую часть
}
frac_x = x - int_x; // вычисляем дробную часть
printf("The integer part of %lf is %d\nThe fractional part of %lf is %lf\n", x, int_x, x, frac_x); // выводим ответ
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 1 numbers:
12.7689
The integer part of 12.768900 is 12
The fractional part of 12.768900 is 0.768900
Process returned 0 (0x0) execution time : 2.856 s
Press any key to continue.
6Задача №6.
Необходимо написать программу, которая сообщает пользователю, можно ли извлечь целочисленный корень из введённого им числа. Если можно, то программа сразу же извлекает его.
Для взятия квадратного корня в языке программирования С/С++ необходимо воспользоваться функцией sqrt()
из библиотеки math.h
.
Помните, что нельзя извлекать квадратный корень из отрицательного числа.
Чтобы проверить, целое число или нет, необходимо проверить на равенство нулю его дробную часть.
Пример входных и выходных данных:
Пример числа, которое ввёл пользователь:
16
Пример корректного вывода программы для вышенаписанных входных данных:
The square root from 16.000000 is integer and is equal to 4.000000
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
#include <math.h> // подключаем библиотеку math.h
int main(){ // создаём главную функцию
double x = 0.0, sqrtx = 0.0; // создаём две дробные переменные
printf("Print 1 numbers:\n"); // приглашаем пользователя на ввод
scanf("%lf", &x); // считываем дробное число
if (x < 0.0){ // если число отрицательное
printf("Cannot get the square root from negative number %lf\n", x); // выводим, что нельзя брать квадратный корень из отрицательного числа
return 0; // возвращаем 0 - успех
}
sqrtx = sqrt(x); // вычисляем корень из числа пользователя
if (sqrtx - int(sqrtx) == 0.0){ // проверяем, что корень - целое число
printf("The square root from %lf is integer and is equal to %lf\n", x, sqrtx); // выводим, что корень - целое число и сам корень
} else {
printf("The square root from %lf is not integer\n", x); // выводим, что корень - не целое число
}
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 1 numbers:
12
The square root from 12.000000 is not integer
Process returned 0 (0x0) execution time : 0.407 s
Press any key to continue.
7Задача №7.
Пользователь вводит три дробных числа. Они интерпретируются, как коэффициенты
a, b, c уравнения
aх + b = c. Необходимо вывести на экран решение данного уравнения.
Помните, что делить на нуль нельзя.
Пример входных и выходных данных:
Пример чисел, которые ввёл пользователь:
2 4 7
Пример корректного вывода программы для вышенаписанных входных данных:
Your equation is: (2.000000)x + (4.000000) = (7.000000)
The solution is 1,5
Решение:
#include <stdio.h> // подключаем библиотеку stdio.h
#include <stdlib.h> // подключаем библиотеку stdlib.h
int main(){ // создаём главную функцию
double a = 0.0, b = 0.0, c = 0.0; // создаём три дробные переменные
printf("Print 3 numbers:\n"); // приглашаем пользователя на ввод
scanf("%lf%lf%lf", &a, &b, &c); // считываем три дробных числа
printf("Your equation is: (%lf)x + (%lf) = (%lf)\n", a, b, c); // выводим на экран уравнение
if (a == 0.0){ // если коэффициент а равен нулю
if (b == c){ // если коэффициент b равен коэффициенту с
printf("The solution is any number\n"); // выводим на экран решение
return 0; // возвращаем 0 - успех
} else { // иначе (если коэффициент b не равен коэффициенту с)
printf("The solution is the empty set\n"); // выводим на экран решение
return 0; // возвращаем 0 - успех
}
}
printf("The solution is %lf\n", (c - b) / a); // выводим на экран решение
return 0; // возвращаем 0 - успех
}
Пример работы программы:
Print 3 numbers:
0 3 3
Your equation is: (0.000000)x + (3.000000) = (3.000000)
The solution is any number
Process returned 0 (0x0) execution time : 3.882 s
Press any key to continue.
8Задача №8*.
Пользователь вводит три дробных числа. Они интерпретируются, как коэффициенты
a, b, c уравнения
aх^2 + bx + c = 0. Необходимо вывести на экран решение данного уравнения.
Помните, что при отрицательном дискриминанте решений нет.
Хорошим решением будет, если программа не будет извлекать корень, когда корень не является целым числом, а просто выпишет, как и принято в математике, например, "sqrt(30)".
Пример входных и выходных данных:
Пример чисел, которые ввёл пользователь:
1 2 -5
Пример корректного вывода программы для вышенаписанных входных данных:
Your equation is: (1.000000)x^2 + (2.000000)x + (-5.000000) = 0
The solution is (-2.000000 + sqrt(24.000000)) / 2.000000 and (-2.000000 - sqrt(24.000000)) / 2.000000
Решение:
Для достижения наилучшего результата и доступа ко всему курсу необходимо приобрести курс еженедельных индивидуальных или групповых занятий с преподавателем в режиме онлайн. Наши преподаватели обучат Вас создавать уникальные алгоритмы и самостоятельно реализовывать их в программном коде с соблюдением стандартов оформления.
Для записи на бесплатный пробный урок просто заполните форму ниже: