プロが教える店舗&オフィスのセキュリティ対策術

下のコードに平均を昇順に並び替える関数を組み込みたいのですがどのようにプログラムを組めばよいかわかりません。誰かわかる方いらっしゃいましたら教えて下さい。




/*成績管理システム*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#define NAME_LEN 128
#define NUM_LEN 64
#define NUMBER 5

/*学生を表す構造体*/
typedef struct{
char name[NAME_LEN]; //名前
char number[NUM_LEN]; //学籍番号
double math; //数学の得点
double eng; //英語の得点
double phy; //物理の得点
}Student;

/*x,yで指す学生の入れ替え*/
void swap_Student(Student *x,Student *y)
{
Student temp = *x;
*x = *y;
*y = temp;
}

/*3教科それぞれの平均点を求める*/
void sum_Student(Student a[],int n,double *ave1,double *ave2,double *ave3)
{
int i=0;
double sum1=0;
double sum2=0;
double sum3=0;

for(i=0;i<n;i++){
sum1 += a[i].math;
sum2 += a[i].eng;
sum3 += a[i].phy;
}

*ave1 = sum1/n;
*ave2 = sum2/n;
*ave3 = sum3/n;
}

/*ファイルの読み込み*/
int out_file(Student a[])
{
FILE *fp;
int i = 0;

if((fp = fopen("File1","r")) == NULL)
printf("\aファイルをオープンできません\n");
else{
while(fscanf(fp,"%s %s %lf %lf %lf",a[i].name,a[i].number,&a[i].math,&a[i].eng,&a[i].phy)==5){
printf("%-10s %-10s %5.1f %5.1f %5.1f\n",a[i].name,a[i].number,a[i].math,a[i].eng,a[i].phy);
i++;
}
fclose(fp);
}
return i;
}


int main(void)
{
int a;
int flag=0;
int i=0;
int cnt=0;
double ave1;
double ave2;
double ave3;
Student human[40];


do{
printf("ファイル読み込み:1 終了:0  :");
scanf("%d",&flag);
if(flag==1)
out_file(human);
}while(flag!=0);


printf("平均点を表示しますか? はい:1 いいえ:2  :");
scanf("%d",&a);

if(a==1){
sum_Student(human,cnt,&ave1,&ave2,&ave3);
printf("数学の平均点は%3.1lfです。",ave1);
printf("英語の平均点は%3.1lfです。",ave2);
printf("物理の平均点は%3.1lfです。",ave3);
}

return 0;
}

A 回答 (1件)

昇順に並べるアルゴリズムが分からないという事でしょうか。



この場合、”平均” なんて考えず。3つの数字を並べ替える方法として考えればいい。

printf("数学の平均点は%3.1lfです。",ave1);
の、
 "数学の平均点は%3.1lfです。",ave1
を、一つの変数として扱えばいい。
何なら配列変数に入れちゃおう。
コードがスマートになる。
    • good
    • 0

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