Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Рацеев С.М. Программирование на языке Си.pdf
Скачиваний:
366
Добавлен:
23.03.2016
Размер:
1.65 Mб
Скачать

}

Пример 7. Дано целое число n>0. Определить, является ли оно степенью числа 5. Ниже представлены два варианта логической функции, проверяющие исходное число на степень числа 5.

int Deg_of5(unsigned long a)

{

unsigned long b = 1; if (a == 0)

return 0; while (b < a) b *= 5;

return a == b;

}

int Deg_of5(unsigned long a)

{

if (a == 0) return 0;

while (!(a % 5)) a /= 5;

return a == 1;

}

Пример 8. Дано натуральное число n. Найти значение числа, полученного следующим образом: из записи числа n выбросить цифры 0 и 5, оставив прежним порядок остальных цифр.

unsigned long Number(unsigned long a)

{

unsigned long p = 1, b = 0, digit; while (a)

{

digit = a % 10;

if (digit != 0 && digit != 5)

{

b += digit * p; p *= 10;

}

a /= 10;

}

return b;

}

3.6. Вычисление значений элементарных функций

44

Говорят, что функция f(x) на интервале (-R, R) может быть разложена в степенной ряд, если существует степенной ряд, сходящийся к f(x) на интервале (-R, R). Из курса математического анализа хорошо известно, что элементарные функции имеют следующие разложения:

При этом первые три разложения сходятся на всей числовой оси, а четвертое – на полуинтервале (-1,1]. Для любого фиксированного значения x (для последнего ряда x принадлежит полуинтервалу (- 1,1]) последние три ряда являются числовыми рядами Лейбница, поэтому для любого n справедлива оценка |Sn-S|≤an, где an n-ый член ряда, Sn n-ая частичная сумма ряда, S – сумма ряда. Исходя из этого можно очень легко вычислить приближенное значение sin(x), cos(x) или ln(1+x) с наперед заданной точностью ε. В этом случае суммирование происходит до тех пор, пока модуль очередного члена ряда не станет меньше чем ε. Ниже приведены примеры вычисления значений синуса и косинуса в точке x с точностью ε.

double Sin(double x, double eps)

double Cos(double x, double eps)

{

{

int i;

int i;

double p, /*очередной член ряда */

double p, /*очередной член ряда */

rez; /* результат */

rez; /* результат */

i = 1;

i = 0;

rez = p = x;

rez = p = 1;

while(fabs(p) >= eps)

while(fabs(p) >= eps)

{

{

i += 2;

i += 2;

p *= -(x*x)/((i-1)*i);

p *= -(x*x)/((i-1)*i);

45

rez += p;

rez += p;

}

}

return rez;

return rez;

}

}

Ниже также представлена функция, вычисляющая приближенное значение ex, использующая n итераций. В качестве параметра n достаточно брать 1000, например Exp(2, 1000).

double Exp(double x, int n)

{

int i, flag = 1; double p, rez; if (x < 0)

x = -x; else flag = 0; rez = p = 1;

for(i = 1; i <= n; i++)

{

p *= x/i; rez += p;

}

return flag ? 1.0/rez : rez;

}

3.7.Задачи

1.Найти сумму всех нечетных (s1) и сумму всех четных (s2) целых чисел в диапазоне от 1 до 100.

2.Напечатать все двузначные целые положительные числа, кратные трем, без использования условного оператора.

3.Дано натуральное n, вычислить n! ( 0! = 1, n! = n(n – 1)!).

4.Дано целое число n > 0. Определить, является ли оно степенью числа 3.

46

5.Дано целое число n > 0. Найти наименьшее целое положительное число k, квадрат которого превосходит n: k2 > n. Функцию извлечения квадратного корня не использовать.

6.Дано целое число n > 0. Определить, представимо ли число n в виде n = k3, где k – некоторое целое число.

7.Для двух целых положительных чисел a и b найти их наименьшее общее кратное (НОК).

8.Подсчитать количество трехзначных натуральных чисел, в записи которых есть две одинаковые цифры.

9.Подсчитать количество трехзначных натуральных чисел, в записи которых все три цифры различны.

10.Определить, имеются ли в записи целого числа n нечетные цифры.

11.Определить, является ли целое число n > 0 симметричным в десятичной записи.

12.Дано натуральное число n. Найти значение числа, полученного следующим образом: из записи числа n выбросить цифры 1 и 2, оставив прежним порядок остальных цифр.

13.Дано действительное число x и целое число n > 0. Используя один цикл, найти сумму 1 + x + x2 + x3 + … + xn.

14.Дано действительное число x и целое число n>0. Найти значе-

ние выражения x x3/(3!) + x5/(5!) – … + (–1)n·x2n+1/((2n+1)!).

15.Последовательность Фибоначчи определяется следующим об-

разом: x0 = 0, x1 = 1, xn = xn-1 + xn-2 при n ≥ 2. Пусть дано натуральное число n. Вычислить xn.

16.Даны целые положительные числа n и k. Используя только операции сложения и вычитания, найти целую часть и остаток от деления n на k.

17.Определить, можно ли заданное натуральное число n представить в виде суммы двух квадратов натуральных чисел.

18.Составить программу, печатающую все различные простые множители заданного целого числа n > 0.

19.Пусть дано натуральное число n. Напечатать квадраты всех чи-

сел от 1 до n, не используя операцию умножения (использовать равенство (n + 1)2 = n2 + 2n + 1).

47