for文に関するトラブル – プログラミング – Home

通知
すべてクリア

for文に関するトラブル


た
 た
(@た)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

1からある数aまでの和を、for文でプログラム表示する問題なんですが、
次のプログラムでaに10を代入すると
なぜか、「1から25まで足した値は1244772」と、表示されてしまいます。
本当は、「1から10まで足した値は55」と、表示されなければならないのに何度や
ってもそう表示されます。
このプログラムのどこがおかしいのか自分では何度見直してもわかりませんでした。
なので、おかしい箇所を教えて下さい。

#include<stdio.h>
main(){
int c=0;
int b=1;
int a;
printf(正の整数を入力して下さい。);
scanf(%d,&a);
for(b=1;b<=a;b++){
c=c+b;
b=b+1;
};
printf(1から%dまで足した値は%d,c);
}


引用解決済
トピックタグ
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

マルチポストでしょうか?

http://www.vcppclub.com/bbs1/wforum.cgi?no=2275&reno=no&oya=2275&mode=msgview&page=0

b のインクリメントが2回行われています。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>printf(1から%dまで足した値は%d,c);
がおかしいですね。2つの数値を指定しなければならないところを
1つしか指定していません。
ただしくは
printf(1から%dまで足した値は%d, a, c);
ですね。

しかし、
> for(b=1;b<=a;b++){
> c=c+b;
> b=b+1;
> };
bの値の増え方がおかしいですね。1回のループで2増えています。
(だからcの結果が25になっているわけで。)


返信引用
た
 た
(@た)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

BLUEさん、どうもありがとうございます。

しかしb=b+1は、b++と同じ意味ですよね?
こういう問題の場合、たいていb++というふうにするように習ったのですが。

また、printfの中にaも関係するのはどうしてでしょう?
そこもよくわからないです。


返信引用
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

>しかしb=b+1は、b++と同じ意味です

同じ意味です。 なぜ、2 回同じ事をするのでしょうか?

>printfの中にaも関係するのはどうしてでしょう?

ではなぜ「1から%dまで足した値は%d」と書いてあるのでしょうか?
1 個目の %d は何を表示したいのでしょうか?
a ではないのですか?
「1から%d」 と書いてあることから推測して、a だと思いますが。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> for(b=1;b<=a;b++){
printf( b=%d\n, b ); /* 追加 */
> c=c+b;
> b=b+1;
> };
として、bの値を確認してみてはどうでしょうか。
おそらく、
1
3
5
7
9
となるでしょう。

# おかしいとおもったら、デバッグをしましょう。
# printfで値を確認するのもデバッグの1つなのです。

for文の使いかた、およびprintf関数の使い方を再度学習することをすすめます。
参考サイト
http://www9.plala.or.jp/sgwr-t/c/sec06-2.html
http://www9.plala.or.jp/sgwr-t/c/sec06-2.html


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

間違えました。orz
おなじURLを載せていました。

訂正しておきます。
第5章 標準入出力関数(1)
http://www9.plala.or.jp/sgwr-t/c/sec05.html
6-2.for文
http://www9.plala.or.jp/sgwr-t/c/sec06-2.html


返信引用
た
 た
(@た)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

みなさん、アドバイスどうもありがとうございます。
要するにここでは、
b=b+1;
という部分を省けばいいだけのことなのでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>b=b+1;
>という部分を省けばいいだけのことなのでしょうか?
はfor文を学習したうえでの発言でしょうか?

とりあえず、訂正したものを載せておきます。
が、ここで怠けるとあとで痛い目にあうことを忘れないでください。

#include <stdio.h>

int main( void )
{
int c = 0;
int b = 1;
int a;
printf( 正の整数を入力してください。 );
scanf( %d, &a );
for ( b = 1; b <= a; b++ )
{
c += b;
}
printf( 1から%dまで足した値は%d\n, a, c );
return 0;
}


返信引用
まきじ
 まきじ
(@まきじ)
ゲスト
結合: 20年前
投稿: 35
 

もう、見てないかもしれませんが(^^;

>b=b+1;
>という部分を省けばいいだけのことなのでしょうか?

そうですが、「皆、言ってるから」ではなく、自分なりにでも、
「なぜ除けば良いのか」を理解してくださいね。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました