программа метода деления пополам в c, почему мне нужно какое-то время перед оператором if? - PullRequest
0 голосов
/ 03 февраля 2019

Я новичок и пытаюсь освоить метод деления пополам.Вот моя программа:

 #include<stdio.h>
 #include<math.h>

 double f(double x)
 {
      return  pow(x,2)-2;
 }
 main()
 {
      double x1, x2, x3, i;
      do
      {
           printf("Enter a number for x1 and x2");
           scanf("%lf  %lf", &x1, &x2);
      }
      if(f(x1)*f(x2)<0);  /* **<--- if statement line 16** */

      for(i=0;i<100;i++)
      {
           x3=(x1+x2)/2;

           if (f(x1)*f(x3)<0)
               x2=x3;
           else
               x1=x3;

           if(f(x3)==0 || fabs(x1-x2)<0.000001) /* check if the roots*/
            break;

      }

      print("x=%lf \n",x3);
      return 0;
 }

, и я получил это сообщение об ошибке.

   16:error: expected âwhileâ before âifâ

Я знаю, что мой код неоправданный, но я все еще учусь.Я не знаю, почему ожидается цикл while перед циклом if.

Ответы [ 3 ]

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

это:

if(f(x1)*f(x2)<0);  /* **<--- if statement line 16** */

должно быть:

while (f(x1)*f(x2)<0);  /* **<--- if statement line 16** */
0 голосов
/ 03 февраля 2019

Прямо перед if, у вас есть это:

  do
  {
       printf("Enter a number for x1 and x2");
       scanf("%lf  %lf", &x1, &x2);
  }
  if(f(x1)*f(x2)<0);

У вас есть начало цикла do...while, но нет условия while.У вас также есть if без следующего утверждения.Вы, вероятно, хотели бы использовать while здесь вместо if:

  do
  {
       printf("Enter a number for x1 and x2");
       scanf("%lf  %lf", &x1, &x2);
  }
  while (f(x1)*f(x2)<0);
0 голосов
/ 03 февраля 2019

В вашем do цикле:

do {
    printf("Enter a number for x1 and x2");
    scanf("%lf  %lf", &x1, &x2);
}

отсутствует условие закрытия while (...);.

Возможно, вы хотели написать while вместо if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...