Вычисление корня n степени из положительного числа последовательными приближениями - C (СИ)
Формулировка задачи:
Помогите написать программу на Си для вычисления корня n-степени из положительного числа а, пользуясь последовательными приближениями
xk+1 =(n-1)*xk/n+a/(n*xn-1k)
k = 0, 1, 2, ... до совпадения соседних приближений с точностью eps, если задано начальное приближение x0.
Примечание: масиивы использовать нельзя, по условию.
Решение задачи: «Вычисление корня n степени из положительного числа последовательными приближениями»
textual
Листинг программы
#include <stdio.h> #include <locale.h> #include <math.h> int main(void) { double x, eps; double n; double y1, y2; short k; char line[100]; if (setlocale(LC_ALL, "C") == NULL) fprintf(stderr, "Failed to set locale!\n"); printf("Программа извлекает корень n-ой степени из заданного\n" "положительного числа, используя рекурентное соотношение:\n" "Yi+1 = Yi + 1 / n * (x / (Yi ^ (n - 1)) - Yi)\n"); fflush(stdout); do { do { printf("Задайте x > 0 "); fflush(stdout); } while (fgets(line, sizeof line, stdin) == NULL || sscanf(line, "%lf", &x) != 1 || x <= 0); do { printf("Задайте n > 1 "); fflush(stdout); } while (fgets(line, sizeof line, stdin) == NULL || sscanf(line, "%lf", &n) != 1 || n <= 1 || (unsigned long) n != n); do { printf("Введите точность >0 и <1 "); fflush(stdout); } while (fgets(line, sizeof line, stdin) == NULL || sscanf(line, "%lf", &eps) != 1 || eps <= 0 || eps >= 1); y2 = 1; if (y2) { do { y1 = y2; y2 = y1 + (x / pow(y1, n - 1) - y1) / n; } while (fabs(y2 - y1) >= eps); } for (k = 0; eps < 1; eps *= 10, k++) ; printf("Вычисленное значение корня %.*f\n", k, y2); printf("Контрольное значение %f\n", pow(x, 1.0 / n)); } while (getchar() != EOF); return 0; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Устанавливается локальная настройка для русского языка
- Выводится инструкция для ввода данных
- Проверка ввода: число x (условия: x > 0)
- Проверка ввода: число n (условия: n > 1)
- Проверка ввода: точность eps (условия: 0 < eps < 1)
- Инициализация начального приближения y2 со значением 1
- Цикл: пока разница между текущим и предыдущим приближением больше заданной точности eps
- Внутри цикла: вычисление нового приближения y2 по формуле рекурентного соотношения
- Цикл: пока разница между вычисленным значением корня и контрольным значением больше заданной точности eps
- Внутри цикла: уменьшение точности eps в 10 раз и увеличение числа k на единицу
- Вывод результатов: вычисленное значение корня и контрольное значение
- Проверка на конец ввода/вывода: если нажата клавиша EOF, то программа завершается
- Возврат 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д