Сумма нечетных чисел от 101 до 201 - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу написать программу на C, которая будет печатать сумму всех нечетных чисел от 101 до 201. Пожалуйста, помогите.

int i,t,s;
i=101;
s=0; 
while(i<=201)
{
  t=i+2;
  s=s+t;
  i+=2;
}
printf("sum is %d",s);

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

делает

int i,t,s;
i=101;
s=0; 
while(i<=201)
{
  t=i+2;
  s=s+t;
  i+=2;
}
printf("sum is %d",s);

первое значение, которое вы суммируете, составляет i+2, равное 101+2, равное 103, так что вы пропустите добавление 101

Конечно,способ исправить это, чтобы инициализировать s с 101 вместо 0, но можно упростить ваш код и сделать его более читабельным, например:

int s = 0;

for (int i = 101; i <= 201; i += 2)
  s += i;

Нотакой сериал может иметь формулу

Мы хотим 101+103+105+...+201, это (1+3+5+...+201) - (1+3+5+...+99), поэтому, если мы знаем, как вычислять 1+3+5+...+(2*n+1) без цикла, мы можем вычислить ожидаемое значение без циклатоже.

  • мы знаем все, что 1+2+3+...+n есть n*(n+1)/2

  • и мы хотим на самом деле 1+2+3+4+...+(2*m+1) - (2+4+6+8+...+(2*m))

  • с 2+4+6+8+...+(2*m) равно 2*(1+2+3+...+m)

  • окончательно 1+3+5+...+(2*m+1) равно (2*m+1)*(2*m+2)/2 - 2*m*(m+1)/2

Итак, чтобывычислить значение между 2 нечетными значениями (здесь 101 и 201) программа может быть:

#include <stdio.h>

int sumOdd(int m)
{
   m /= 2; /* m in my formula */
   return (2*m+1)*(2*m+2)/2 - 2*m*(m+1)/2;
}

int main(int argc, char ** argv)
{
   int n1, n2;

   if (argc != 3)
     printf("Usage: %s <odd1> <odd2>", *argv);
   else if ((sscanf(argv[1], "%d", &n1) != 1) ||
            (sscanf(argv[2], "%d", &n2) != 1) ||
            (n1 < 1) ||
            ((n2 - n1) < 2) ||
            ((n1 & n2 & 1) != 1))
     fprintf(stderr, "wrong values %d %d\n", n1, n2);
   else
     printf("%d\n", sumOdd(n2) - sumOdd(n1 - 2));

   /* use the loop to check the formula result */
   int s = 0;

   for (int i = n1; i <= n2; i += 2)
     s += i;
   printf("%d\n", s);
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ gcc -g -pedantic -Wall -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out 101 201
7701
7701

Работает!

0 голосов
/ 08 апреля 2019

Переменная t не нужна - просто добавьте i к s. Как

int i,s;
i=101;
s=0; 
while(i<=201)
{
  s=s+i;
  i+=2;
}
printf("sum is %d",s);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...