ページ 11

計算の結果が表示されません。

Posted: 2008年11月29日(土) 19:22
by esu
1~100までの偶数と奇数をそれぞれ足して合計を求めたいのですが、
奇数の表示されません。なぜなんでしょうか?
int main(void){ 

int sum1 = 0; 
int sum2 = 0; 
int i = 0; 
int j = 1; 

while(i != 100){ 

i = i+2; 

sum1 += i; 

} 
printf("偶数の合計は%dです。\n",sum1); 

while(j != 100){ 

j = j+2; 

sum2 += j; 

} 
printf("奇数の合計は%dです。\n",sum2); 

return 0; 
}

Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 19:27
by lbfuvab
良く考えて下さい。
jは100になりませんよ。

Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 19:41
by box
ちなみに、奇数の計算時に現在陥っている無限ループを
解消しただけでは、正しい答えを出力しません。
合計に足し込むタイミングが間違っています。

Title: Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 19:48
by esu
早速のご回答ありがとうございます。
2回目のwhile文の条件式(j != 100)にならずに表示されない訳ですね。

Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 22:02
by 初級者
あたしだったら、こんな風に書きます。

#include <stdio.h>

int main(void)
{
    int even, odd, i;
    
    for (even = odd = 0, i = 1; i <= 100; i++) {
        if (i % 2 == 0) even += i;
        else            odd  += i;
    }
    printf("偶数の合計は%dです。\n", even);
    printf("奇数の合計は%dです。\n", odd);
    return 0;
}

Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 22:30
by esu
回答ありがとうございます。
大変参考になりました。

%で余りを利用して偶数か奇数かを判定する方法は考えたのですが、
もしこの判定方法を用いずに計算するにはどうすればいいのでしょうか?

Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 22:48
by 初級者
#include <stdio.h>

int main(void)
{
    int even, odd, i;
    
    for (even = odd = 0, i = 1; i <= 100;) {
        odd  += i++;
        even += i++;
    }
    printf("偶数の合計は%dです。\n", even);
    printf("奇数の合計は%dです。\n", odd);
    return 0;
}

Re:計算の結果が表示されません。

Posted: 2008年11月29日(土) 23:48
by esu
初心者さんお答え頂きありがとうございます。
回答を見直してみたのですが、
なぜoddとevenの値が変わってくるのかが理解できませんでした。
もしよろしければ教えて頂けませんか?

自分なりに考えた方法は以下の通りでした。

#include <stdio.h>

int main(void){

int sum1 = 0;
int sum2 = 0;
int i = 0;
int j = 1;

while(i <= 100){

sum1 += i;

i = i+2;

}
printf("偶数の合計は%dです。\n",sum1);

while(j <= 100){

sum2 += j;
j = j+2;

}
printf("奇数の合計は%dです。\n",sum2);

return 0;
}

Re:計算の結果が表示されません。

Posted: 2008年11月30日(日) 00:09
by 初級者
さっき提示したソースコードは、下のものと同じことをしています。


#include <stdio.h>

int main(void)
{
    int even, odd, i;
    
    for (even = odd = 0, i = 1; i <= 100;) {
        odd  += i;    /* oddには奇数を加える */
        i++;            /* iは偶数になる */
        
        even += i;    /* evenには偶数を加える */
        i++;            /* iは奇数になる */
    }
    printf("偶数の合計は%dです。\n", even);
    printf("奇数の合計は%dです。\n", odd);
    return 0;
}

Re:計算の結果が表示されません。

Posted: 2008年11月30日(日) 01:19
by esu
for文の一度目のiで1、2度目のiで2をそれぞれ代入しそれを繰り返している訳ですね。
粘り強く答えて頂きありがとうございます。
おかげ様でようやく理解する事ができました。