2013-04-22 3 views
-7

Мне нужно написать программу, которая печатает следующее выражение «1-2 + 3-4 + 5 + .... n. (Нечетные числа добавляют и даже цифры вычитают) Я написал этот точный код:C язык программирования помогает мне?

#include <stdio.h> 
int main() 
{ 
    float c,n,i,s; 
    c=getch(); 
    printf ("\n Please write n:"); 
    scanf ("%f",&n); 
    s=0.f; 
    for (i=1;i<=n;i++) 
    { 
     s+=((2*i-1) -2*i); 
    } 
    printf("\n Sum =%.2f",s); 
    getch(); 
} 

Когда я его компилирую, он не показывает ошибок. Когда я запускаю его, каждый раз, когда я помещаю число, например 5, результат получается - -5, или если я помещаю 3, я получаю -3.Что у меня есть сделано неправильно?

EDIT: Мне нужно получить такой результат: например, если я положил 6, я должен сделать 1-2 + 3-4 + 5-6 = -3. Если я поставлю 4 I необходимо сделать 1-2 + 3-4 = -2.And так далее!

+1

программы Вы не печатает строку, печатает поплавок. – hank

+3

Извините, если я игнорирую ваш вопрос, но серия, которую вы написали выше, является «телескопической серией» и имеет закрытую форму. Посмотрите на это следующим образом: (1 - 2) + (3 - 4) + (5 - 6) + ... + (2n-1 - 2n) = (-1) + (-1) + ... + (-1) = -n. Похоже, что ваши результаты верны? Но я не внимательно смотрел на код. – rliu

+0

А потом вы неправильно написали выражение наверху. Вы все равно можете найти закрытую форму довольно тривиально. – rliu

ответ

0

Ваше суммирование неверно :

s+=((2*i-1) -2*i); 

дает -1.

Понадобится:

s+=i*(2*(i%2) - 1); 

Это даст "-" для всех четных i-х и "+" для всех нечетных i годов.

И так как вы имеете дело только с целыми числами, i должны быть int, а также все другие переменные, которые вы используете:

#include <stdio.h> 
int main() 
{ 
    int s = 0, c= 0, n = 0, i = 1; 
    c = getch(); 
    printf ("\n Please write n:"); 
    scanf ("%d",&n); 
    for (i=1; i<=n; i++) 
    { 
     s+=i*(2*(i%2) - 1); 
    } 
    printf("\n Sum =%d",s); 
    getch(); 
} 

Даже проще, используя несколько простых математику вы можете получить его как:

if(n%2 == 0){ 
    s = -n/2; 
} 
else{ 
    s = n - n/2; 
} 
+0

Почему это было бы неправильно? Каждая пара терминов фактически вычисляет -1! – SuperSaiyan

+0

Это не так. Их абсолютные значения оценивают до +1, хотя ... – sashkello

+0

sashkello, когда я пишу это, я получаю: «недопустимые операнды в двоичный%» – user2304286

0

Зачем использовать float? Используйте int вместо

#include <stdio.h> 
int main() 
{ 
    int s = 0, c= 0, n = 0, i = 0; 
    c=getch(); 
    printf ("\n Please write n:"); 
    scanf ("%d",&n); 
    for (i=1;i<=n;i++) 
    { 
     //s+=((2*i-1) -2*i); 
     if(i%2 == 0) 
      s -= i; 
     else 
      s += i; // a little more verbose, but should work   
    } 
    printf("\n Sum =%d",s); 
    getch(); 
} 

Использование float для целочисленной суммирования и в качестве индекса для for -loop не является хорошей практикой.

+0

Это не отвечает на вопрос, это должен быть комментарий. – interjay

+0

Я не могу поместить весь код в комментарий, но дайте мне секунду ... –

+1

Код в любом случае не нужен. – interjay

0

Во-первых, ваши вычисления s+=((2*i-1) -2*i); выглядят правильно для пар чисел, но ваша петля for (i=1;i<=n;i++) делает числа индивидуально и не делает числа попарно.

Во-вторых, если пользователь вводит число, подобное 1234.5, цикл никогда не останавливается (и, как указывали другие, нет оснований использовать плавающую точку вообще).

В-третьих, вам не нужна петля вообще. Если n даже тогда ответ -n/2, и если n является нечетным, ответ n-(n-1)/2.

0
#include <stdio.h> 
int main() 
{ 
    float c,n,i,s; 
    c=getch(); 
    printf ("\n Please write n:"); 
    scanf ("%f",&n); 
    s=0.f; 
    //for (i=1;i<=n;i++) //problem is here instead of n you use n/2 it will work 
    for (i=1;i<=(n/2);i++) 
    { 
     s+=((2*i-1) -2*i); 
    } 
    printf("\n Sum =%.2f",s); 
    getch(); 
} 

Поскольку ваш цикл takinh 2 триместра в то время, так что до п она будет вычислить сумму п * 2

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