C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C言語 買い物プログラム


(過去ログ 86 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■51208 / inTopicNo.1)  C言語 買い物プログラム
  
□投稿者/ カレー (1回)-(2010/06/27(Sun) 21:40:00)

分類:[C/C++] 

買った物の金額を連続して入力して,合計金額を表示するプログラム作りたいのですが、わからない点がいくつかあるので指摘していただきたです。

このプログラムの条件として
@ 0が入力されると終了するようにさせること 
A 入力された金額の平均値を求めること
B while ,do while構文を使うこと

#include<stdio.h>

int main( void)
{
	int n, kosu=0 , sum;  
	printf("買ったものの金額を入力してください。\n");
	printf("終了するときは0を入力してください。\n");
	do {
		kosu++;
		printf("%d個目の物の金額を入力してください。\n",kosu);
		scanf("%d", &n);
		sum += n;
		printf("合計%d個 合計金額%d 平均金額%d  \n\n", kosu, sum, sum/kosu);
	}while( n != 0);
	return (0);
}

終了するために0を入力したいのですがしたいのですが、その0が買ったものの金額としてカウントされ平均金額・合計個数を正しい値で表示できません。もう一点として平均金額の値がint型なので小数点以下が省略されてしまうので、float型にしたいのですがどの変数を書き換えればいいのかがよくわかりません。
ごく初歩的なことで申し訳ありませんが、指摘していただけると助かります。

実行例
買ったものの金額を入力してください。
終了するときは0を入力してください。
1個目の物の金額を入力してください。
3
合計1個 合計金額3 平均金額3

2個目の物の金額を入力してください。
4
合計2個 合計金額7 平均金額3

3個目の物の金額を入力してください。
5
合計3個 合計金額12 平均金額4

4個目の物の金額を入力してください。
0
合計4個 合計金額12 平均金額3 (ここを正しく表示させるようにしたい。)






 

引用返信 編集キー/
■51209 / inTopicNo.2)  Re[1]: C言語 買い物プログラム
□投稿者/ .SHO (1353回)-(2010/06/27(Sun) 21:58:47)
No51208 (カレー さん) に返信

kosu++; ってのは1個入力されたことを示しているのだから
まず入力があってから実行されるべきなのに、いきなり最初に実行してますよね。

同じような考えで、全体的に、やるべきことを順番道理にやれば直ります。

引用返信 編集キー/
■51210 / inTopicNo.3)  Re[2]: C言語 買い物プログラム
□投稿者/ επιστημη (2529回)-(2010/06/27(Sun) 22:25:40)
επιστημη さんの Web サイト
> やるべきことを順番道理にやれば直ります。

そゆことで、
1. 金額入力
2. 金額が0なら終了('break'って知ってる?)
3. さもなくば購入数/総額/平均の計算と出力ののち、1に戻る

引用返信 編集キー/
■51211 / inTopicNo.4)  Re[3]: C言語 買い物プログラム
□投稿者/ カレー (3回)-(2010/06/27(Sun) 23:30:13)
#include<stdio.h>

訂正を加えてみました。break等これで正しいでしょうか?

int main( void)
{
	int n=0, kosu=1, sum;  
	printf("買ったものの金額を入力してください。\n");
	printf("終了するときは0を入力してください。\n");
	do {
		printf("%d個目の物の金額を入力してください。\n",kosu);
		scanf("%d", &n);
		sum += n;
		if ( n==0 ) break;
		printf("合計%d個 合計金額%d 平均金額%0.1lf  \n\n", kosu, sum, (double)sum/kosu);
		kosu++;	
	}while ( n!=0 );
	return (0);
}

引用返信 編集キー/
■51212 / inTopicNo.5)  Re[4]: C言語 買い物プログラム
□投稿者/ επιστημη (2530回)-(2010/06/27(Sun) 23:56:13)
επιστημη さんの Web サイト
僕ならこうする:

#include<stdio.h>

int main() {
  int count = 0;
  int sum = 0;
  int price = 0;
  printf("買ったものの金額を入力してください。\n");
  printf("終了するときは0を入力してください。\n");
  do {
    int price = 0;
    printf("%d個目の物の金額を入力してください。\n",count+1);
    scanf("%d", &price);
    if ( price != 0 ) {
      ++count;
      sum += price;
      printf("合計%d個 合計金額%d 平均金額%0.1lf  \n\n", count, sum, (double)sum/count);
    }
  } while ( price != 0 );
  return (0);
}

引用返信 編集キー/
■51237 / inTopicNo.6)  Re[4]: C言語 買い物プログラム
□投稿者/ .SHO (1354回)-(2010/06/28(Mon) 22:09:55)
No51211 (カレー さん) に返信

> 訂正を加えてみました。break等これで正しいでしょうか?
>
> int main( void)
> {
> int n=0, kosu=1, sum;
> printf("買ったものの金額を入力してください。\n");
> printf("終了するときは0を入力してください。\n");
> do {
> printf("%d個目の物の金額を入力してください。\n",kosu);
> scanf("%d", &n);
> sum += n;
> if ( n==0 ) break;
> printf("合計%d個 合計金額%d 平均金額%0.1lf \n\n", kosu, sum, (double)sum/kosu);
> kosu++;
> }while ( n!=0 );
> return (0);
> }

このプログラムが致命的なのは sum が初期化されていないこと。
起動時のスタックの状態によって、たまたま問題なく動いたり動かなかったりするので
もっとプログラム規模が大きくなると、かなりわかりにくいバグになります。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -