C言語で私が作ったプログラムを
① ファイル(R7_in.txt)からN人分の個人識別番号、名前
(family name)、身長[cm]、体重[kg]のデータを読み取り、
各配列に格納する。確認のため、読み込んだすべての
データを画面に出力する。
② 身長と体重からBMI値を計算した結果をBMI用の配列に格
納する。
③ BMI値の降順になるように、個人識別番号、名前、身長、
体重、BMI値の各配列要素の値を並び替える。
④ ファイル(R7_out.txt)に、BMI値の降順に、各行が個人識
別番号、名前、身長、体重、BMI値となるようにデータを出
力する。
の4つの関数にして新しく作りたいです。
発生している問題・エラーメッセージ
既存のプログラムを関数に落とし込むことができない。
該当のソースコード
#include <stdio.h>
#include <string.h>
int main( void ){
int ID[15] = {0};
double hight[15] = {0};
double weight[15] = {0};
double BMI[15] = {0}; /* データを配列に格納する /
char name[15][25]={0};
int i, j, n = 15; / nはデータ数 */
FILE *fpin, fpout; / ファイルポインタ変数の宣言 /
fpin = fopen("R7_in.txt", "r"); / 入力(read)用ファイルをオープン /
fpout = fopen("R7_out.txt", "w"); / 出力(write)用ファイルをオープン */
if (fpin == NULL) { /* 安全対策:入力用ファイルのオープンに失敗したときの処置 /
printf("入力ファイルのオープンに失敗しました");
return 0; / 途中でプログラムを終了させる */
}
if (fpout == NULL) { /* 安全対策:出力用ファイルのオープンに失敗したときの処置 /
printf("出力ファイルのオープンに失敗しました");
return 0; / 途中でプログラムを終了させる */
}
//数値の読み取り
i = 0; while( fscanf(fpin, "%d %s %lf %le", &ID[i],name[i], &hight[i],&weight[i] )!= EOF ) { i++; } printf("ID NAME HIGHT[cm] WEIGHT[kg]\n"); for( i=0; i<15; i++ ){ printf("%d %-8s %.1lf %.1lf\n", ID[i], name[i], hight[i],weight[i] ); }
for (i=0; i<15; i++){//i=0~14まで繰り返す
BMI[i] = weight[i]/hight[i]/hight[i]*10000;//BMIの計算
}
double a = 0, b = 0, c = 0, d = 0;
char e[25] = {0};
printf("\n");
for (i=0; i<n-1; i++) { /* i=0(最初のデータ)からi=n-2まで繰り返す /
for (j=i+1; j<n; j++) { / j=i+1からj=n-1(最後のデータ)まで繰り返す /
if(BMI[i] < BMI[j]) { / もしdata[i]>data[j]なら中身を交換し、data[i]を小さい状態にする /
a = BMI[i]; / BMI[i]~name[i]の中身を一時、a~eに保存する /
b = ID[i];
c = weight[i];
d = hight[i];
strcpy(e,name[i]);
BMI[i] = BMI[j]; / BMI[j]の中身をdata[i]に移す */
ID[i] = ID[j];
weight[i] = weight[j];
hight[i] = hight[j];
strcpy(name[i],name[j]);
BMI[j] = a; /* 保存していたaの中身をdata[j]に移す */ ID[j] = b; weight[j] = c; hight[j] = d; strcpy(name[j],e); } }
}
for (i=0; i<n; i++) {
fprintf(fpout, "%d %-8s %.1lf %.1lf %.1lf \n", ID[i],name[i], hight[i],weight[i], BMI[i] ); /* 結果を出力ファイルへ出力 */
}
fclose(fpin); /* 入力用ファイルをクローズ /
fclose(fpout); / 出力用ファイルをクローズ */
return 0;
}
###R7_in.text
1001 Aoki 172.8 63.1
1002 Enomoto 167.5 68.9
1003 Fujita 182.6 69.3
1004 Hayashi 178.7 55.7
1005 Ishii 170.1 70.2
1006 Kawai 179.3 83.1
1007 Kubo 169.6 56.4
1008 Murakami 165.2 68.7
1009 Nakajima 187.6 61.0
1010 Nomura 172.0 71.5
1011 Okada 180.8 73.8
1012 Sakamoto 177.4 63.7
1013 Shibata 178.2 67.3
1014 Takeda 172.9 78.1
1015 Wada 170.7 65.4
回答3件
あなたの回答
tips
プレビュー