プログラミングについて
目標
1.偏差値が一番良い学生の番号,科目A,B,C の得点,平均点,偏差値の表示.
2.合計点が181 点~210 点,211 点~240 点,241 点~270 点,271 点~300点
の学生の人数を数え,その度数分布の表示。
手順
1.クラスの標準偏差を求め,各学生の偏差値を求めよ.
その結果を画面に出力する。
2.成績優秀者(偏差値が一番良い学生)を見つけよ.
一番が複数いる場合は全員表示せよ.
3.度数分布と2.ををResults.txt ファイルに出力せよ。
要素数4 のint 型配列を作成して0 で初期化し,一人ひとり数える.
最後に度数分布を作れ(度数分布を作る際にはif文を使わない).
クラスのデータは与えられており、50人の2教科分の点数が与えられています。
これは構造配列を使い、Studentsに格納。もう1教科分の点数を整数の一様乱数により格納。
合計50人×3教科のテストデータの集計をするプログラムです。
というプログラミングを作りたいです。
途中まで作りましたが長くなりすぎてわからなくなりました。
どなたか教えてくださいお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SIZE 50
struct students{
int No;
int A;
int B;
int C;
int Sum;
double Avee;
double hensa;
};
double Average(int a){
double b;
b=(double)a/3.0;
return b;
}
double Hensachi(double a,double b,double c){
double d;
d=(double)50+10*(a-b)/c;
return d;
}
int main(void){
struct students Std[SIZE];
srand(1000);
int i;
double Ave,Sum=0,H,stand;
FILE *file=fopen("Data.txt","r");
for(i=0;i<SIZE;i++){
fscanf(file,"%d",&Std[i].No);
fscanf(file,"%d",&Std[i].A);
fscanf(file,"%d",&Std[i].B);
Std[i].C=(int)(rand()/(RAND_MAX +1.0)*31)+70;
Std[i].Sum=Std[i].A+Std[i].B+Std[i].C;
Std[i].Avee=Average(Std[i].Sum);
Sum+=Std[i].Avee;
}
fclose(file);
Ave=(double)Sum/(SIZE);
for(i=0;i<SIZE;i++){
H+=(double)pow(Std[i].Avee-Ave,2);
}
stand=sqrt(H/50);
for(i=0;i<SIZE;i++){
Std[i].hensa=Hensachi(Std[i].Avee,Ave, stand);
printf("%4d,%3.1lf,%3.1lf\n",Std[i].Sum,Std[i].Avee,Std[i].hensa);
}
return 0;
}
自分が作ったのはここまででです。
お礼
http://www.kab-studio.biz/Programing/Codian/iostream/04.html ここのサイトを参考にして作ったのですが・・・。 無事解決しました。ありがとうございます。