2014-09-28 7 views
0

Im пытается суммировать кратные числа (x0) с номером прогрессии (r) и числом раз (n). Если я использую число x0 = 6, r = 3, n = 3, результат должен быть 6 + 9 + 12 = 27, но программа всегда дает мне 18.Не правильный результат с арифметической прогрессией в C

Я пробую разные времена менять формулу, но если я на бумаге результат является правильным, поэтому Im боятся, что проблема может быть синтаксисом ...

так Theres программы в C:

#include <stdio.h> 

int sum_progression(int x0, int r, int n) 
{ 
    return (n/2) * ((2 * x0) + ((n - 1) * (r))); 
} 

void test_sum_progression(void) 
{ 
    int x0; 
    int r; 
    int n; 
    scanf("%d", &x0); 
    scanf("%d", &r); 
    scanf("%d", &n); 
    int z = sum_progression(x0,r,n); 
    printf("%d\n", z); 
} 

int main(void) 
{ 
    test_sum_progression(); 
    return 0; 
} 

Спасибо за помощь!

+4

'printf ("% d \ n ", (3/2));'. –

+0

Теперь давайте оставим ему время, чтобы сделать это и учиться, пожалуйста. – Deduplicator

+0

Я не понимаю:/Im новый на C, и некоторые вещи нехорошо понять. Почему я должен печатать 3/2? –

ответ

1

При использовании ints с делением значение рассчитывается, а затем усекается до int.
Если вы разделите int на int, вы должны сделать что-то вроде:
return (n/(double) 2) * ((2 * x0) + ((n - 1) * (r)));

+2

Плохая идея перейти к плавающей запятой. Хотя с ограниченным диапазоном и только с одним делением на 2, это может сработать. – Deduplicator

+0

Вы правы. изменено на двойное. – atlanteh

+0

@atlanteh: 'double' также является плавающей точкой ... –

 Смежные вопросы

  • Нет связанных вопросов^_^