• 締切済み

プログラミングについて

目標 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; } 自分が作ったのはここまででです。

みんなの回答

回答No.1

>自分が作ったのはここまででです。 ほう。あなたがやったのですか?それはそれは…。 自分が「コピー」したのはの間違いかと思いました。 なら3年前にも全く同じソースを考えた人がいるということですね。 すごい偶然ですね。 こちらのベストアンサーでもコピペして提出すればいいんじゃないですか? http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1417540299 専門学校に入校してコピペコピペで卒業ですか? 親も「なんて要領の良い子なんだ」と大喜びですね。

関連するQ&A

  • ファイル出力について

    ファイルの出力について質問させてください。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #define NUM 50 /*構造体宣言*/ struct Students{ int N; /*学籍番号*/ int A; /*科目Aの点数*/ int B; /*科目Bの点数*/ int C; /*科目Cの点数*/ int sum; /*3科目の合計*/ double ave; double dev; }; /*平均の関数*/ double Average(struct Students tmp) { return(double)(tmp.A+tmp.B+tmp.C)/3.0; } /*偏差値の関数*/ double Deviation(struct Students k,double l,double m) { return(double)(NUM+10*(k.ave-l)/m); } int main(void){ struct Students std[NUM]; /*構造型配列*/ int j=0,i,N,A,B,scannum; double csum=0,sdev=0,cave; /*csum:クラスの総合点、sdev:標準偏差値、cave:クラスの一科目あたりの平均*/ FILE*file; /*ファイルのポインタを用意*/ srand((unsigned)time(NULL)); /*乱数の初期化*/ file=fopen("Data.txt","r"); /*Dataファイルのオープン*/ /*ファイルのオープンチェック*/ if(file==NULL){ fprintf(stderr,"cannnot open file 'Data.txt'\n"); exit(1); } /*Studentsにデータを格納*/ for(i=0;i<NUM;i++){ scannum=fscanf(file,"%d%d%d",&N,&A,&B); /*ファイルが読み込めたかチェック if(scannum!=1){ fprintf(stderr,"cannnot read file 'Data.txt'\n"); exit(1); } */ std[i].N=N; std[i].A=A; std[i].B=B; std[i].C=70+(int)(rand()/(RAND_MAX+1.0)*31); std[i].sum=std[i].A+std[i].B+std[i].C; std[i].ave=Average(std[i]); csum=csum+std[i].sum; }fclose(file); /*標準偏差計算*/ cave=csum/150.0; for(i=0;i<NUM;i++){ sdev=sdev+(std[i].sum-cave)*(std[i].sum-cave); } sdev=sqrt(sdev/NUM); /*偏差値の計算,最高偏差値の出力*/ for(i=0;i<NUM;i++){ std[i].dev=Deviation(std[i],cave,sdev); if(std[i].dev > std[j].dev){ std[j]=std[i]; } printf("学籍番号:%d.\n",std[i].N); printf("科目A:%d.\n",std[i].A); printf("科目B:%d.\n",std[i].B); printf("科目C:%d.\n",std[i].C); printf("平均点:%lf.\n",std[i].ave); printf("偏差値は:%lf.\n",std[i].dev); } /*results.txtに書き込み if((file=fopen("results.txt","w"))==NULL){ printf("cannnot open\n"); return 1; } fprintf(file,"%d,%d,%d,%d,%lf,%lf",std[j].N,std[j].A,std[j].B,std[j].C,std[j].ave,std[j].dev); fclose(file); */ return 0; } このプログラムを実行させてみるとdata.txtの一番最初の学生番号のみ 表示されません。そのためファイルの読み込みのエラー確認を入れると ストップしてしまう状態です。学生番号は101~150なんですが実行結果 が102~150で表示されます。学生番号は変数Nに対応してるのでそこを 考えてみたのですがどこが悪いのか 発見できません。アドバイスを お願いします。

  • 答えがおかしい

    配列と関数を使って教科ごとの平均点を求めるC言語のプログラムを 作りました。しかし、結果がおかしくいろいろ考えてみたのですが、 よくわからないので質問に出すことにしました。 作ったものは以下です。どうすればよいでしょうか? #include <stdio.h> #define NUMBER 3 /*--- 要素数noの配列の平均値を求める ---*/ double ave_of(int vb[], int no) { int i, sum, ave; for (i=1;i<no; i++) sum+=vb[i]; ave=(double)sum/NUMBER; return(ave); } int main(void) { int i; int a[NUMBER]; int b[NUMBER]; int c[NUMBER]; double ave_a, ave_b, ave_c; printf("%d人の点数を入力してください。\n",NUMBER); for(i=0;i<NUMBER; i++){ printf("[%d番]理科:",i+1); scanf("%d",&a[i]); printf("   数学:"); scanf("%d",&b[i]); printf("   社会:"); scanf("%d",&c[i]); } ave_a=ave_of(a, NUMBER); ave_b=ave_of(b, NUMBER); ave_c=ave_of(c, NUMBER); printf("【理科】平均点:%.1f\n", ave_a); printf("【数学】平均点:%.1f\n", ave_b); printf("【社会】平均点:%.1f\n", ave_c); return(0); } 結果は例えば45.2 というような感じで出したいです。

  • javaでのプログラミング

    javaで平均と分散を求めるプログラムを作っているのですが、 分散の出力がうまくいきません。(出力が0になってしまいます) プログラミングとしておかしいところがあれば、教えていただけませんでしょうか 以下プログラムソースです。 public class test{ public static void main(String[] args){ int i,rand; double ave=0 double bun=0 double sum1=0 double sum2=0; int [] data = new int[10]; rand=(int)(Math.random()*100+0.5); for(i=0;i<10;i++){ data[i]=rand; } for(i=0;i<10;i++){ sum1+=data[i]; sum2+=data[i]*data[i]; } ave=sum1/10; bun=(sum2/10) - (ave*ave); System.out.println(ave); System.out.println(bun); } }

    • ベストアンサー
    • Java
  • プログラミング

    以下のC++で書かれた以下のプログラムのコンパイルができません。理由を教えてください。 #include <iostream> #include <vector> #include <algorithm> istream& read(istream&, std::vector<double>&); double median(std::vector<double>); int main(){ std::vector<double> a; read(std::cin, a); std::vector<double>::iterator itr; while(itr != a.end()){ std::cout << *itr; } std::cout << median(a) << std::endl; } istream& read(istream& is, std::vector<double>& v){ double b; if(is){ while(in >> b) v.push_back(b); } return is; } double median(std::vector<double> a){ int i; if(a.size() == 0) { return -1; } i = a.size() / 2; if(a.size()%2 == 1) return (a[i]); else return ((a[i] + a[i-1])/2); }

  • 平均値を関数を用いて出力したいのですが。。

    平均値を関数を用いて出力したいのですが一箇所でつまずいてしまい ました。ソースは #include <stdio.h> #include <stdlib.h> #include <time.h> /*構造体宣言*/ struct Students{ int N; int A; int B; int C; double ave; }; /*平均値を計算する関数*/ struct Students Average(struct Students std[i]){ std[i].ave=(double)(std[i].A+std[i].B+std[i].C)/3; return std[i]; } int main(void){ struct Students std[49]; /*構造型配列*/ int i,N,A,B,C,num,scannum; FILE*file; /*ファイルのポインタを用意*/ srand((unsigned)time(NULL)); /*乱数の初期化/ file=fopen("Data.txt","r"); /*Dataファイルの読み込み*/ /*ファイルのオープンチェック*/ if(file==NULL){ fprintf(stderr,"cannnot open file 'Data.txt'\n"); exit(1); } /*Studentsにデータを格納*/ for(i=0;i<=49;i++){ fscanf(file,"%d%d%d",&N,&A,&B); std[i].N=N; std[i].A=A; std[i].B=B; std[i].C=70+(rand()/(RAND_MAX+1.0)*31); std[i].ave=Average(std[i]); /*表示*/ printf("学籍番号:%d.",std[i].N); printf("科目A:%d.\n",std[i].A); printf("科目B:%d.\n",std[i].B); printf("科目C:%d.\n",std[i].C); printf("平均点:%d.\n",std[i].ave); fclose(file); return 0; } 目標はA,B,Cの平均を出したいのですが関数宣言の際にstd[i]を 用いると未定義扱いになってしまい実行が出来ない状態です。 自分としては↑のソースでi番目の配列の平均値を導出し、表示 させようとしてるのですが。。。。アドバイスをお願いします。 m(__)m

  • c言語超初心者です。2

    #include <stdio.h> int main(void) { int na,nb, nc; int sum; double ave; puts("三つの整数を入力してください."); printf("整数A:"); scanf("%d", &na); printf("整数B:"); scanf("%d", &nb); printf("整数C:"); scanf("%d", &nc); sum=na+nb+nc; ave=(double)sum/3; printf("それらの合計は%5dです。\n", sum); printf("それらの平均は%5.1fです。\n",ave); return(0); } とういうのを作ったんですが、最後のそれらの合計は%5dとやりその5の意味は整数を10進法で少なくても5桁で表示とありますが、例えば1,2,3と入力しても合計は6とでて5桁ででないんですけど。そういう意味ではありませんか?あとave=(double)sum/3;のところをave=sum/3.0としても問題なくできるのですが、どっちでやったほうがいいとかはありますか?もしあったらその理由も教えてください。

  • プログラミング 返り値

    #include <stdio.h> int sumn(double a); int main(void) { double b, answer; while(1){ printf("Input a number:"); scanf("%lf",&b); answer = sumn(b); printf("(4*3.14*a*a*a)/3=%f\n",answer); } return 0; } int sumn(double a){ double sum; sum=(4*3.14*a*a*a)/3; return sum; } これを実行してもwarning C4244: 'return' : conversion from 'double ' to 'int ', possible loss of dataと出てしまい小数点を切り捨てて表示されてしまいます。 どこが間違っているのでしょうか? 教えてくださいm(_ _ )m

  • 100x100行列の平均値を求めたい

    const int SIZE=100; for(int i=0; i< SIZE; i++){ for(int j=0; j< SIZE; j++){ fin >> array[i][j]; } } double sum=0.0; double ave=0.0; int J =3; for(int i=0; i< SIZE; i++){ sum += array[i][J]; } ave = sum / SIZE; cout << sum << endl; cout << ave << endl; 100x100行のファイルを読み込んで、すべての行の足し算および平均値を求めたいと思います。上のようある列(または行)を固定して求めることは出来るのですが、一度に0~99までの足し算および平均値を求めるやり方はどのようにしたらよろしいのでしょうか?たぶんfor文を使えば、できるのかなとは思うのですが、なかなか思うように行きません。 アドバイスよろしくお願いいたします。

  • プログラミングについて質問です

    プログラミングについて質問です 下のコードでaveに1.5を代入するにはどのようにコードを修正すればいいですか? main() { int a = 1, b = 2; double ave; ave = (a+b) / 2; }

  • C++の質問です

    C++の質問です。 c++をコンパイルしたとき、 出力されるのが次のように3つ同時にされるようにしたいのですが、 1、 名前 ○○○○ 番号 ○○○○ x= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}の平均 2、 x= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}の分散 y= {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}の標準偏差 3、 x={1,2,3,4,5,6,7,8,9,10}と y={10,9,8,7,6,5,4,3,2,1}の相関係数 下記のソースをどのように変えればいいでしょうか。 ちなみに、C言語ではなくC++なので C++形式でお願いします。 どうかお願いします。 #include <iostream> #include <cmath> using namespace std; double Mean(int *a, int size); double StandardDeviation(int *a, int size); double CoefficientOfCorrelation(int *a, int *b, int sizeA, int sizeB); int main() { int x[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int y[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}; cout << " 標準偏差 : " << StandardDeviation(x, sizeof(x) / sizeof(int)) << endl << " 相関係数 : " << CoefficientOfCorrelation(x, y, sizeof(x) / sizeof(int), sizeof(y) / sizeof(int)) << endl; return 0; } double Mean(int *a, int size) { if (size <= 0) { return -1.0; } double d = 0.0; for (int i = 0; i < size; i++) { d += *(a + i); } return d / size; } double StandardDeviation(int *a, int size) { if (size <= 0) { return -1.0; } double mean = Mean(a, size); double d = 0.0; for (int i = 0; i < size; i++) { d += pow(*(a + i) - mean, 2); } return sqrt(d / size); } double CoefficientOfCorrelation(int *a, int *b, int sizeA, int sizeB) { if (sizeA > 0 && sizeB > 0 && sizeA != sizeB) { return -1.0; } double meanX = Mean(a, sizeA); double meanY = Mean(b, sizeB); double sdX = StandardDeviation(a, sizeA); double sdY = StandardDeviation(b, sizeB); double coeff = 0.0; for (int i = 0; i < sizeA; i++) { coeff += (*(a + i) - meanX) * (*(b + i) - meanY); } return (coeff / (sizeA * sdX * sdY)); }

専門家に質問してみよう