Решаем задачи из учебника "Основы программирования".
Код
/* p11
Основы программирования
Язык Turbo C 2.0 */
/* 1 - 15k, 2 - 21k, 3 - 22k, 4 - 23k, 8 - 24k
10 - 25k, 14 - 26k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
float xa (int, int, int, int); /* расстояние между двумя точками на плоскости */
xd (int); /* сумма цифр числа */
main ()
{
int a, b, c, d, e, f; /* переменные ввода */
float j, k; /* переменные ввода */
int m, n, o, v;
float p, q, r, s, t;
printf ("? (1-4) ");
scanf ("%i", &a);
if (a == 1) goto aaa; /* 6 int, 2 float */
if (a == 2) goto aab; /* ввод данных */
if (a == 3) goto aac; /* нет ввода */
if (a == 4) goto aad; /* 3 int */
printf ("\n");
return;
aaa:
printf ("Введите 6 целых чисел: ");
scanf ("%i%i%i%i%i%i", &a, &b, &c, &d, &e, &f);
printf ("Введите 2 рациональных числа: ");
scanf ("%f%f", &j, &k);
/* 11.1. */
m = a * d;
n = b * c;
printf ("1. %i / %i : %i / %i = %i / %i.\n", a, b, c, d, m, n);
/* 19.2. Составить алгоритм вычисления степенной функции с целым
показателем y = x ^ k, где k - целое число. */
if (j == 0)
printf ("2. 0 ^ %i = 0.\n", a);
else
{
p = 1;
if (a > 0)
for (n = 0; n < a; n++) p *= j;
else
for (n = 0; n > a; n--) p /= j;
printf ("2. %.4g ^ %i = %.4g.\n", j, a, p);
}
/* 21.1.3. Даны декартовы координаты трех вершин треугольника на
плоскости. Составить алгоритм определения площади треугольника. */
p = xa (a, b, c, d);
q = xa (a, b, e, f);
r = xa (c, d, e, f);
s = (p + q + r) / 2;
t = s * (s - p) * (s - q) * (s - r);
if (t < 0) t = 0;
printf ("3. Площадь треугольника %.4g.\n", sqrt (t));
/* 21.2.4. Дана скорость ракеты при выходе за пределы атмосферы Земли.
Составить алгоритм определения того, как будет двигаться ракета после
выключения двигателей. Напомним величины трех космических скоростей:
7,5 км/с, 11,2 км/с, 16,4 км/с. */
printf ("4. ");
if (j < 7.5) printf ("Ракета упадет на Землю");
else if (j == 7.5) printf ("Ракета будет двигаться по круговой орбите вокруг Земли");
else if (j < 11.2) printf ("Ракета будет двигаться по эллипсу вокруг Земли");
else if (j == 11.2) printf ("Ракета улетит от Земли по параболе");
else if (j < 16.4) printf ("Ракета будет двигаться по эллипсу вокруг Солнца");
else if (j == 16.4) printf ("Ракета улетит от Солнца по параболе");
else printf ("Ракета улетит от Солнца по гиперболе");
/* 68.4.8. Вычислить сумму квадратов всех целых чисел, попадающих в
интервал (ln x, exp x). */
p = j;
if (p > 5) p = 5;
if (p <= 0) q = 0; else q = log (p);
r = exp (p); /* Вычислены границы интервала (q, r). */
m = q;
if (m <= q) m++;
o = 0; /* Вычислены границы интервала [m, r). */
for (n = m; n < r; n++) o += n * n;
printf (".\n8. Сумма квадратов чисел равна %i.\n", o);
/* 68.5.9. Вычислить количество точек с целочисленными координатами,
попадающих в круг радиуса R с центром в начале координат. */
m = j;
if (m < j) m++;
if (j < 0) m = -1;
v = 0; /* Вычислены границы интервала [-m, m]. */
for (n = -m; n <= m; n++)
for (o = -m; o <= m; o++)
if (n * n + o * o <= j * j) v++;
printf ("9. Количество точек в круге %i.\n", v);
/* 80.1.13. Составить программу вычисления площади кольца по значениям
внутреннего и внешнего радиусов, используя подпрограмму вычисления
площади круга (два варианта: с процедурой и с функцией). */
printf ("13. Площадь кольца %.4g.\n", 3.1415926 * (j * j - k * k));
/* 80.2.14. По координатам вершин треугольника вычислить его периметр,
используя подпрограмму вычисления длины отрезка, соединяющего две точки.
*/
p = xa (a, b, c, d) + xa (a, b, e, f) + xa (c, d, e, f);
printf ("14. Периметр треугольника равен %.4g.\n", p);
goto aaz;
aab:
/* 57.4.5. Составьте программу вычисления суммы двух целых чисел,
которая будет вести диалог с пользователем в следующем виде (на месте
многоточий - вводимые и выводимые числа):
ВВЕДИТЕ ДВА СЛАГАЕМЫХ:
a = . . . . .
b = . . . . .
РЕЗУЛЬТАТ ВЫЧИСЛЕНИЙ:
a + b = . . . . . */
printf ("5. Введите два слагаемых:\na = ");
scanf ("%i", &a);
printf ("b = ");
scanf ("%i", &b);
printf ("Результат вычислений:\na + b = %i.\n\n", a + b);
/* 67.3.7. Составить программу, по которой будет вводиться
последовательность символов до тех пор, пока не встретится маленькая или
большая латинская буква 'z'. Подсчитать, сколько раз среди вводимых
символов встречалась буква 'W'. */
printf ("7. Вводите символы: ");
n = 0;
while (1)
{
m = getche ();
if (m == 'W') n++;
if (m == 'z' || m == 'Z') break;
}
printf (". Число символов 'W' равно %i.\n", n);
goto aaz;
aac:
/* 67.1.6. Получить на экране десятичные коды букв латинского алфавита. */
printf ("6. ");
for (m = 'a'; m <= 'z'; m++)
{
printf ("%c - %i", m, m);
if (m < 'z') printf (", "); else printf (".\n");
}
/* 68.6.10. Напечатать таблицу значений функции sin x и cos x на
отрезке [0, 1] с шагом 0.1 в следующем виде:
x sin x cos x
------------------------
0.0000 0.0000 1.0000
0.1000 0.0998 0.9950
... ... ...
1.0000 0.8415 0.5403
------------------------ */
printf ("\nx\t sin x cos x\n------------------------\n");
for (m = 0; m <= 10; m++)
printf ("%.4f %.4f %.4f\n", m / 10., sin (m / 10.), cos (m / 10.));
printf ("------------------------\n");
/* 68.7.11. Напечатать в возрастающем порядке все трехзначные числа, в
десятичной записи которых нет одинаковых цифр. */
printf ("\n");
for (m = 100; m < 1000; m++)
if (m / 100 != m / 10 % 10 && m / 100 != m % 10 &&
m / 10 % 10 != m % 10) printf ("%i ", m);
printf ("\n");
goto aaz;
aad:
printf ("Введите 3 целых числа: ");
scanf ("%i%i%i", &a, &b, &c);
/* 68.8.12. Дано целое n. Напечатать все простые числа из диапазона
[2, n]. */
printf ("12. ");
for (m = 2; m < a + 1 && m < 1000; m++)
{
n = sqrt (m) + 1;
o = 1;
for (v = 2; v < m; v++)
if (m % v == 0) o = 0;
if (o) printf (" %i", m);
}
/* 80.3.15. Даны три целых числа. Определить, сумма цифр которого из
них больше. Подсчет суммы цифр организовать через подпрограмму. */
m = xd (a);
n = xd (b);
o = xd (c);
printf ("\n15. ");
if (m >= n && m >= o)
printf ("Сумма цифр первого числа больше.\n");
else
if (n >= m && n >= o)
printf ("Сумма цифр второго числа больше.\n");
else
printf ("Сумма цифр третьего числа больше.\n");
aaz:
getch ();
printf ("\n");
}
float xa (int a, int b, int c, int d)
{
int g;
g = (a - c) * (a - c) + (b - d) * (b - d);
if (g < 0) g = 0;
return sqrt (g);
}
xd (int a)
{
int b;
b = 0;
if (a < 0) a = -a;
while (a)
{
b += a % 10;
a /= 10;
}
return b;
}