Как я могу перевести полином с C-программирования без операторов экспоненты? - PullRequest
0 голосов
/ 04 февраля 2019

Я искал в своем учебнике по Си, и внутри была страница, где подсказка подсказала мне перевести полином в код Си.Мы еще не обсуждали операторы экспонент и специально проинструктированы не использовать их в этой точке и найти другой способ с базовыми операторами.Полином выглядит так: 5x^(2)+3x-2.

Как мне это сделать?

Ответы [ 4 ]

0 голосов
/ 05 февраля 2019

C не имеет оператора экспоненты.

Один действительно удобный способ моделирования полиномов - использовать массив для хранения коэффициентов, чтобы индекс массива соответствовал степени x.IOW, чтобы смоделировать 5x<sup>2</sup> + 3x - 2, используйте

double coef[] = {-2.0, 3.0, 5.0}; // -2.0 + 3.0x + 5.0x^2

. Для оценки полинома используйте цикл, принимая во внимание свойство, которое ФредК упоминает в своем ответе - 5x<sup>2</sup> + 3x - 2 == ((5)x + 3)x - 2:

size_t num_elements = sizeof coef / sizeof coef[0]; // yields 3 in this case
double result = 0;
for (size_t i = num_elements - 1; i > 0; i--)
  result += x * ( result + coef[i] );
result += coef[0];

Этот метод будет работать для полиномов любой степени.

0 голосов
/ 05 февраля 2019

Я думаю, вы должны указать параметры a, b, c и x во второй полиномиальной функции

int poly2(int a, int b, int c, int x)
{
    int y = a*x*x+b*x+c;
    return y; 
}

, когда вы используете эту функцию для вашего случая, вы можете вызвать

int result = poly2(a,b,c, x) 

с помощьюконкретный набор а, б, в, х

0 голосов
/ 05 февраля 2019

Обратите внимание, что ax^2 + bx + c может быть записано как

c + x*(b + x*(a))

Это может быть легко расширено на любой порядок полинома.

0 голосов
/ 04 февраля 2019

В C. нет такой вещи, как exponent operator. Хотя вы можете сделать то же самое, используя pow().Я подозреваю, что ваша книга не хочет этого.Учитывая это ограничение, вы можете выполнить операцию x^2 просто: x * x, где x - переменная для вашей функции.

, т.е. вы можете сделать что-то вроде этого:

int poly(int x) {
    int y = ((5 * x * x) + (3 * x) - 2);
    return y;
}

Приложение:

Если вы хотите иметь общую формулу, которую вы можете легко расширить для любой степени полинома, вы можете использовать эту формулу вместо этого с входными данными для a, b, c и x:

int poly(int a, int b, int c, int x) {
    int y = c + x*(b + x*(a));
    return y;
}

Спасибо chux и FredK за это.

...