アプリ版:「スタンプのみでお礼する」機能のリリースについて

多重ループを用いて、クラス数、生徒数,生徒の点数を入力したときに、各クラスの平均点,
及びクラス全体の平均点を算出するプログラムを作成しているのですが、どこが間違えているかわかりません。どなたか間違えているところ、答えを教えて頂けないでしょうか。

これが、自分で作成したプログラムです。


#include<stdio.h>

int main(void){
int a,b,c=0,i,j,sum=0;
double ave=0;

printf("クラス数を入力してください:"); scanf("%d",&a);
printf("生徒数を入力してください:"); scanf("%d",&b);


for(i=1; i<=a; i++){
for(j=1; j<=b; j++){
printf("クラス%d:%d人目の点数を入力してください:",i,j,c); scanf("%d",&c);
sum=sum+c;

}

printf("クラス%dの平均点は%fです。\n",i,ave=sum/b);


}

printf("クラス全体の平均は%dです。",i,ave/a);

return 0;
}

A 回答 (5件)

#include <stdio.h>



int c_sum(int nsu)
{
  int sum;
  int sc;
  int n;

  sum = 0;    // 1クラス分の得点合計の初期化
  for (n = 0; n < nsu; n++)
  {
    printf("%d 人めの成績 :\n", n + 1);
    scanf("%d", &sc);
    sum += sc;
  }
  return (sum);
}

int main()
{
  int m;
  int csu;
  int nsu;
  int sum;
  int g_nsu;    // 全クラス人数合計
  int g_sum;    // 全クラス得点合計
  double ave;

  printf("クラス数:\n");
  scanf("%d", &csu);
//  printf("クラス %d の生徒数:\n", m);
//  scanf("%d", &nsu);

  g_nsu = 0;
  g_sum = 0;
  for (m = 1; m <= csu; m++)
  {
    printf("クラス %d の生徒数:\n", m);
    scanf("%d", &nsu);
    sum = c_sum(nsu);
    g_nsu += nsu;
    g_sum += sum;

    printf("クラス %d の合計 : %d\n", m, sum);
    printf("クラス %d の人数 : %d\n", m, nsu);
    ave = (double)sum / (double)nsu;
    printf("クラス %d の平均 : %lf\n\n", m, ave);
  }
  printf("全クラスの合計 : %d\n", g_sum);
  printf("全クラスの人数 : %d\n", g_nsu);
  ave = (double)g_sum / (double)g_nsu;
  printf("全クラスの平均 : %lf\n", ave);
}
    • good
    • 0

とりあえず、追加、修正した箇所にコメントいれてあります。



#include<stdio.h>

int main(void){
int a,b,c=0,i,j,sum=0;
int allsum = 0; //追加
double ave=0;

printf("クラス数を入力してください:"); scanf("%d",&a);
printf("生徒数を入力してください:"); scanf("%d",&b);


for(i=1; i<=a; i++){
sum = 0; //追加
for(j=1; j<=b; j++){
printf("クラス%d:%d人目の点数を入力してください:",i,j,c); scanf("%d",&c);
sum=sum+c;
allsum=allsum+c; //追加

}

printf("クラス%dの平均点は%fです。\n",i,ave=sum/b);


}

printf("クラス全体の平均は%fです。\n",ave=allsum/(a*b)); //修正

return 0;
}
    • good
    • 0

>答えを教えて頂けないでしょうか。


えっとプログラムは正しく動かすために「デバッグ」と言うことを行います。
プログラムはデバッグをする行為がプログラミング行為と言っても過言ではありません。
ですので、例えばですが、プログラム実行中のある時点で、自分が期待しているように処理が流れているか、その時に各変数が期待している通りの値になっているか、要所要所で情報を出力してみることです。

今後二度とC言語のプログラムを社会にでて触らないのであれば答えだけ得られればいいのかもしれませんが、基礎教科と違って情報は実践的な力を身につけなければ意味ないですよね。
    • good
    • 0

「どこが間違えているかわかりません」とのことですが, そのように考えるということは


なにが間違っているのかはわからないけどなにかが間違っていると思っている
ということですよね. では, なぜ「このプログラムが間違っている」と思ったのですか?
    • good
    • 0
この回答へのお礼

クラス数、生徒数を2と入力したとき、クラス1の点数を2人分入力したときの平均の値はちゃんとした値が出るのですが、クラス2の点数を2人分入力したときの平均の値はクラス1と2の合計の数値を生徒数(2人分)で割った数が出たので間違っていると思いました。

お礼日時:2017/06/18 21:18

for(i=1; i<=a; i++){


 sum = 0; //クラスiの合計点数を0クリア
 for(j=1; j<=b; j++){

 }
 printf("クラス%dの平均点は%fです。\n",i, sum/b);
}

>クラス全体の平均点
設問の解釈として、クラス毎に生徒数が異なるという事はないのでしょうか?
それと、通常はクラス平均値をクラス数で割って、平均値を求める事はしません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!