個人毎の成績の合計・平均点と教科ごとの平均点を出力するプログラムを作りたい。※未完成

  • 3
    いいね
  • 17
    コメント

C言語のとある課題

大学でやっている、やらされている課題。
"クラスの人数は最大30名、科目数は4、成績は0~100(整数)
⑴試験の成績はキーボードから入力。
⑵各科目の平均点を求める。
⑶個人毎の合計と平均点を求める。
"
という課題に取り組む。


/*現時点での完成度はこの程度*/
#include <stdio.h>
int main(void){

  int i,n,totala,totalb,totalc,totald;
  float avea,aveb,avec,aved;
  float a[n];
  float b[n];
  float c[n];
  float d[n];
  float ave[n];

  printf("個人の合計、平均、教科ごとの平均を求める。\n");
  printf("人数は?:");
  scanf("%d",&n);

 for(i=0;i<n;i++){
   printf("%d人目\n",i+1);
   printf("科目1:  ");scanf("%f",&a[i]);
   printf("科目2:  ");scanf("%f",&b[i]);
   printf("科目3:  ");scanf("%f",&c[i]);
   printf("科目4:  ");scanf("%f",&d[i]);
   ave[i]=(a[i]+b[i]+c[i]+d[i])/4;
}

 avea=totala/n;
 aveb=totalb/n;
 avec=totalc/n;
 aved=totald/n;

 printf("          科目1  科目2  科目3  科目4  平均\n");

 for(i=0;i<n;i++){
   printf(" %3d人目    %3f   %3f   %3f   %3f     %2.3f\n",i+1,a[i],b[i],c[i],d[i],ave[i]);
 }

 for(i=0;i<n;i++){
   totala += a[i];
   totalb += b[i];
   totalc += c[i];
   totald += d[i];
 }


 printf("平均       %2.3f   %2.3f   %2.3f   %2.3f \n",avea,aveb,avec,aved);

  return 0;
}

で、あらかじめ少し保険を掛けさせていただく。恐らくこの投稿がQiitaに投稿する初記事(?)になるが、こんな感じ投稿すればいいのだろうか。
私は情報系専攻の大学二年次の学生。大学でC言語をやる羽目になったが如何せん苦労している。

なのでプログラミングは初心者だ。だが「コードを見せれば上手くなる」とどこかで耳にしたので恥ずかしながら晒してみようと思う。

ちなみに上記のコードは一応コンパイルは出来た。しかし、数値が上手く表示されない。それと問題の条件を満たしていない。出力をするとこんな感じに表示される。

スクリーンショット (518).png

はい。上手くいかないのがお分かりいただけるかと思います。そこで色々な疑問を投げます。いつか自分が見返した時の反省も込めて・・・

疑問

・大学側にインストールするように指示を受け、「Tera Term」というアプリケーションを使用している。が、「Tera Term」とは一体何なのか。「Tera term」というのはOS?というものなのか?よく「環境」「開発環境」という言葉を耳にするが、「Tera term」というのはそういう環境ということで正しいのか。

・大学のサーバーを使っているっぽいことはなんとなくわかっている。だが、どうしてそんなものが必要になるのか。「Tera term」だけネット環境が必要なのだろうか。

・「mkdir [ファイル名]」でファイルを作り、「cd [ファイル名]」でそのファイル名の場所に飛ぶということを"おまじない"として習ったがこれ何ですか?分かりやすくプログラムを整理するためって認識で正しいのか。

・QiitaというWebサービスの使い方がイマイチ分からない。私としてはプログラミングをやっていく中で壁にぶつかった時に疑問を投げるような使い方をしたいと思うが・・・・・yahoo知恵袋のような「〇〇という課題を解いてください!」という投稿はQiitaにはあるのか。そのような丸投げ質問はしたくないが、どの程度プログラムが書ける腕があればいいのか。私のような初心者丸出しがこんなところにいていいのか。

・大学のプログラミング学習は学生に課題を丸投げでという方式だ。この方式の是非を知りたい。

C言語 vs 学生

今まで学習してきた中でプログラミングほど学びにくい学習は無いように思える。どのようなモノを使用して何をしているかという説明が大学で学ぶプログラミングには一切無い。

大学生になって初めて自分のパソコンを持った学生がほとんどである上、学生にほとんど丸投げであるプログラミング講義。

多くの学生がプログラミングを毛嫌いする理由はただ"情報が見つからない"という事だと思っている。高校までの学習は教科書通り、あるいは参考書通りに読み進めれば同じようなことが出来たが、プログラミングの参考書は実際使用する環境(?)や使い方などの細かな違いが多すぎる気がする。

だからと言って教授に聞いても訳の分からない話しかされないし、ネットで調べたとしても情報が古く、読めなかったり、使えない情報だったりすることがしばしば。プログラミングの参考書も分かりにくい情報がやたら多い。読めない訳ではないが、正直読むのは骨が折れる。

プログラマーの方々はどうやってC言語とかJavaとか学んでるのだろうか?

なにか"作りたいもの"があってそれを目指して勉強をしているのだろうか。・・・・・・一体C言語で僕たち学生は何を作ればいいのだろうか。大学側で"作る喜び"を体験できるカリキュラムに変えない限り、ただやみくもに課題をこなすだけの無為な講義にしかなっていない気がする。

終わりに

・・・・・今からコードを書き直してやり直す。

プログラミングってどうして敷居が高く感じられるのだろうか。

追記。
丁寧にコメントありがとうございます。
なにも考えず飛び込みでここでキーボードを叩きましたが正解でした。

有益な情報、知識を共有できる程度になれるよう足掻いてみます。

本当にありがとうございます。

追記。

出来ました

#include <stdio.h>
int main(void){

  int i,n,totala=0,totalb=0,totalc=0,totald=0;
  int sum[n];
  float avea,aveb,avec,aved;
  float a[n];
  float b[n];
  float c[n];
  float d[n];
  float ave[n];

  printf("個人の合計、平均、教科ごとの平均を求める。\n");
  printf("人数は?:");
  scanf("%d",&n);

 for(i=0;i<n;i++){
   printf("%d人目\n",i+1);
   printf("科目1:  ");scanf("%f",&a[i]);
   printf("科目2:  ");scanf("%f",&b[i]);
   printf("科目3:  ");scanf("%f",&c[i]);
   printf("科目4:  ");scanf("%f",&d[i]);
   ave[i]=(a[i]+b[i]+c[i]+d[i])/4;
}
 printf("          科目1  科目2  科目3  科目4   合計  平均\n");

 for(i=0;i<n;i++){
   sum[i] = a[i]+b[i]+c[i]+d[i];
}


 for(i=0;i<n;i++){
   printf(" %3d人目     %.0f      %.0f     %.0f     %.0f     %d     %.0f\n",i+1\
,a[i],b[i],c[i],d[i],sum[i],ave[i]);
 }

 for(i=0;i<n;i++){
   totala += a[i];
   totalb += b[i];
   totalc += c[i];
   totald += d[i];
 }
 avea=totala/n;
 aveb=totalb/n;
 avec=totalc/n;
 aved=totald/n;

printf("平均       %2.3f   %2.3f   %2.3f   %2.3f \n",avea,aveb,avec,aved);

  return 0;
}

つ・・・疲れた・・・・。何とかこれで上手く計算できました。