А в этой программе нужно вводить только три целых числа.
Код
/* p13
Язык Turbo C 2.0
Основы программирования
Переменные: int - 3 */
/* 1 - 22k, 3 - 23k, 7 - 25k, 14 - 26k, 18 - 27k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
d (); /* Нет решений. */
e (); /* Решение - любое число. */
f (float); /* Один корень. */
g (float, float); /* Два корня. */
h (float, float, float); /* Три корня. */
i (float, float, float, float); /* Четыре корня. */
main ()
{
int a, b, c; /* исходные данные */
int j, k; /* натуральные числа */
int l, m, n, o;
float p, q;
printf ("Введите три целых числа: ");
scanf ("%i%i%i", &a, &b, &c);
/* 13.1.2. Составить алгоритм решения квадратного уравнения
ax^2 + bx + c = 0. */
j = b * b - 4 * a * c;
printf ("1. ");
if (a == 0)
if (b == 0)
if (c == 0) e (); else d ();
else
f ((float) -c / b);
else
if (j < 0)
d ();
else
if (j == 0)
f (-b / 2. / a);
else
g ((-b - sqrt (j)) / 2 / a, (-b + sqrt (j)) / 2 / a);
/* 16.1.3. Вычислить n! */
j = 1;
for (k = 1; k < a; k++) j *= k + 1;
printf ("2. %i! = %i.\n", a, j);
/* 18.1.4. Даны два натуральных числа M и N. Вычислить их наибольший
общий делитель НОД (M, N). */
j = a;
k = b;
if (j < 0) j = -j;
if (k < 0) k = -k;
if (j == 0) j = 1;
if (k == 0) k = 1;
l = j;
m = k;
while (l - m) if (l > m) l -= m; else m -= l;
printf ("3. НОД (%i, %i) = %i.\n", a, b, l);
/* 19.1.5. Составить алгоритм вычисления степенной функции с целым
показателем y = x ^ k, где k - целое число. */
l = 1;
for (m = 0; m < k; m++) l *= a;
printf ("4. %i ^ %i = ", a, b);
if (a == 0)
printf ("0.\n");
else
if (b == 0)
printf ("1.\n");
else
if (b > 0)
printf ("%i.\n", l);
else
if (l == 0)
printf ("0.\n");
else
printf ("%.4g.\n", 1. / l);
/* 21.3.8. Даны три положительных числа. Составить алгоритм,
определяющий, могут ли они быть длинами сторон треугольника. */
if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a)
printf ("5. Числа могут быть длинами сторон треугольника.\n");
else
printf ("5. Числа не могут быть длинами сторон треугольника.\n");
/* 21.4.9. Пусть компьютер способен выполнять только две арифметические
операции - сложение и вычитание. Составить алгоритмы:
а) умножения двух целых чисел;
б) целочисленного деления двух чисел;
в) получения остатка от целочисленного деления двух чисел. */
l = 0;
for (m = 0; m < j; m++) l += k;
printf ("6. %i * %i = %i, ", j, k, l);
l = 0;
m = j;
while (m >= k) {m -= k; l++;}
printf ("%i / %i = %i, %i %% %i = %i.\n", j, k, l, j, k, m);
/* 21.5.10. Построить алгоритм решения биквадратного уравнения,
используя как вспомогательный алгоритм решения квадратного уравнения. */
l = b * b - 4 * a * c;
printf ("7. ");
if (a == 0)
if (b == 0)
if (c == 0) e (); else d ();
else
{
p = (float) -c / b;
if (p < 0)
d ();
else
if (p == 0)
f (0);
else
g (-sqrt (p), sqrt (p));
}
else
if (l < 0)
d ();
else
if (l == 0)
{
p = -b / 2. / a;
if (p < 0)
d ();
else
if (p == 0)
f (0);
else
g (-sqrt (p), sqrt (p));
}
else
{
p = (-b - sqrt (l)) / 2 / a;
q = (-b + sqrt (l)) / 2 / a;
if (p < 0)
if (q < 0)
d ();
else
if (q == 0)
f (0);
else
g (-sqrt (q), sqrt (q));
else
if (p == 0)
if (q < 0)
f (0);
else
h (-sqrt (q), 0, sqrt (q));
else
if (q < 0)
g (-sqrt (p), sqrt (p));
else
if (q == 0)
h (-sqrt (p), 0, sqrt (p));
else
i (-sqrt (q), -sqrt (p), sqrt (p), sqrt (q));
}
/* 21.6.11. Составить алгоритм нахождения НОД трех натуральных чисел,
используя вспомогательный алгоритм нахождения НОД двух чисел. */
l = c;
if (l < 0) l = -l;
if (l == 0) l = 1;
m = j;
n = k;
while (m - n) if (m > n) m -= n; else n -= m;
n = l;
while (m - n) if (m > n) m -= n; else n -= m;
printf ("8. НОД (%i, %i, %i) = %i.\n", a, b, c, m);
/* 33.1.12. */
l = a;
if (l < b) l = b;
if (l < c) l = c;
printf ("9. max (%i, %i, %i) = %i.\n", a, b, c, l);
/* 48.9.21. Присвоить целой переменной h значение цифры, стоящей в
разряде сотен в записи положительного целого числа k (например, если
k = 28796, то h = 7). */
printf ("10. Число сотен равно %i.\n", a % 1000 / 100);
/* 48.10.22. Целой переменной S присвоить значение суммы цифр
трехзначного целого числа k. */
l = a % 1000;
m = l / 100 + l / 10 % 10 + l % 10;
printf ("11. Сумма цифр равна %i.\n", m);
/* 63.1.27. По длинам трех сторон треугольника a, b, c вычислить его
площадь. */
p = (a + b + c) / 2.;
q = p * (p - a) * (p - b) * (p - c);
if (q < 0) q = 0;
printf ("12. Площадь треугольника %.4g.\n", sqrt (q));
/* 65.1.29. Вычислить сумму целых чисел от M до N путем прямого
суммирования. */
l = 0;
m = a;
while (1)
{
if (m > b) break;
l += m;
if (m == 32767) break;
m++;
}
printf ("13. Сумма чисел от %i до %i равна %i.\n", a, b, l);
/* 68.6.34. */
printf ("\nx\tsin x\t cosx\n");
printf ("-----------------------\n");
for (l = 0; l < 11; l++)
{
p = l / 10.;
printf ("%-.4g\t%-.4f\t %-.4g\n", p, sin (p), cos (p));
}
printf ("-----------------------\n\n");
/* 68.7.35. Напечатать в возрастающем порядке все трехзначные числа, в
десятичной записи которых нет одинаковых цифр. */
for (l = 1; l < 10; l++)
for (m = 0; m < 10; m++)
for (n = 0; n < 10; n++)
if (l - m && m - n && l - n) printf ("%i%i%i ", l, m, n);
/* 68.8.36. Дано целое n > 2. Напечатать все простые числа из диапазона
[2, n]. */
printf ("\n\n16. Простые числа: ");
for (l = 2; l <= a; l++)
{
m = sqrt (l);
n = 0;
for (o = 2; o < m + 1; o++) if (l % o == 0) n = 1;
if (n == 0) printf ("%i ", l);
if (l > 32766) break;
}
/* 70.1.37. С помощью приведенной программы определите на вашем
компьютере величину машинного epsilon. */
p = 1;
while (1 + p > 1) p /= 2;
printf ("\n\n17. Машинный эпсилон %.4g.\n", p);
/* 71.6.41. Проведите эксперимент на исследование целочисленного
переполнения, т.е. установите, что происходит с целой переменной, когда
ее значение превышает maxint. */
l = 32766;
printf ("18. Целочисленное переполнение: %i - %u, ", l, l);
l++;
printf ("%i - %u, ", l, l);
l++;
printf ("%i - %u,\n", l, l);
l++;
printf ("%i - %u.\n", l, l);
getch ();
printf ("\n");
}
d () {printf ("Решений нет.\n");}
e () {printf ("Решение - любое число.\n");}
f (float a) {printf ("x = %.4g.\n", a);}
g (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
h (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
i (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}
/* */