Перевести код из С++ в Си - C (СИ) (69518)
Формулировка задачи:
Помогите пожалуйста
#include "stdafx.h" #include <iostream> #include <math.h> using namespace std; double fix(double(*f)(double), double a, double b, double eps); double f(double x); int i; int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL, "");//подключение языков double a, b, eps; cout << "Нахождение приближенного значения корня методом деления отрезка пополам.\nВведите левую границу отрезка 'a' = "; cin >> a;//ввод левой границы отрезка 'a' cout << "Введите правую границу отрезка 'b' = "; cin >> b;//ввод правой границы отрезка 'b' cout << "Введите точность нахождения 'eps' = "; cin >> eps;//ввод точности нахождения 'eps' cout << "Приближенное значение корня = " << fix(f, a, b, eps) << endl; cout << "Приближенное значение корня найдено за " << i << " шагов" << endl; system("PAUSE"); return 0; } double fix(double(*f)(double), double a, double b, double eps) { double x = (a + b) / 2; while ((abs(b - a)>eps) && (f(x) != 0)) { if (f(a)*f(x)<0) b = x; else a = x; x = (a + b) / 2; cout << "x=" << x << endl; i++; } return x; } double f(double x) { return sin(x); }
Решение задачи: «Перевести код из С++ в Си»
textual
Листинг программы
#include "stdafx.h" //#include <iostream> #include <math.h> /*библиотека матем. функций*/ #include <stdio.h> /*printf*/ #include <locale.h> /*библиотека выбора языка*/ double fix(double a, double b, double eps); double f(double x); int i; int main() { double a, b, eps; setlocale(LC_CTYPE, "");//подключение языков printf("Нахождение приближенного значения корня методом деления отрезка пополам.\nВведите левую границу отрезка 'a' = "); scanf("%lf", &a);//ввод левой границы отрезка 'a' printf("Введите правую границу отрезка 'b' = "); scanf("%lf", &b);//ввод правой границы отрезка 'b' printf("Введите точность нахождения 'eps' = "); scanf("%lf", &eps);//ввод точности нахождения 'eps' printf("Приближенное значение корня = %lf\n", fix(a, b, eps)); printf("Приближенное значение корня найдено за %d шагов\n", i); return 0; } double fix(double a, double b, double eps) { double x = (a + b) / 2; i = 0; while ((fabs(b - a)>eps) && (f(x) != 0)) { if (f(a)*f(x)<0) b = x; else a = x; x = (a + b) / 2; printf("x=%lf\n", x); i++; } return x; } double f(double x) { return sin(x); }
Объяснение кода листинга программы
- В функции
main
программа запрашивает у пользователя значения переменныхa
,b
иeps
с помощью функцииscanf
. - Значения переменных
a
,b
иeps
сохраняются в соответствующих переменных. - С помощью функции
fix
осуществляется поиск корня методом деления отрезка пополам. - В цикле
while
происходит сравнение разностиb-a
с заданной точностьюeps
и проверка на ненулевой знаменатель функцииf(x)
. - Если знаменатель функции
f(x)
меняется знака при переходе отa
кx
, тоb
присваивается значениеx
. - Если знаменатель функции
f(x)
не меняет знака при переходе отa
кx
, тоa
присваивается значениеx
. - Значение
x
обновляется как среднее арифметическоеa
иb
. - В цикле
while
выполняется проверка условия и увеличивается счетчикi
при каждом шаге итерации. - Функция
fix
возвращает значениеx
как приближенное значение корня. - Значение
i
выводится на экран с помощью функцииprintf
. - Значение
x
выводится на экран с помощью функцииprintf
. - В функции
f
реализуется вычисление значения функцииsin(x)
. - Значение функции
f(x)
выводится на экран с помощью функцииprintf
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д