構造体のバブルソート
Posted: 2015年4月28日(火) 22:49
学校の課題なのですがあと一歩のところで行き詰まっています
質問文の通り構造体内のメンバでバブルソートをしたいのですが
なかなかうまく考えられません
とりあえず今できているだけ貼っときます
こういう要件です→http://goo.gl/To6WVf
プログラミングは1年やってますが
学校ではまだメインではないので知っていることは少ないです
丸々の答えでももちろんありがたいのですが考え方や各部の役割を
少しづつ教えていただけるとありがたいです
初めて利用させていただくので至らぬ点もあると思いますがよろしくお願いします
質問文の通り構造体内のメンバでバブルソートをしたいのですが
なかなかうまく考えられません
とりあえず今できているだけ貼っときます
#include <stdio.h>
#include <string.h>
#define NUM 5 //学生の人数
#define ORDER 1 //0:昇順 1:降順
#define MAX 301 //ソートに使う配列の数(0点~300点)
typedef struct {
char id[5]; //学籍番号
int pt[3]; //各科目(3科目固定)の点数(成績)
double ave; //全科目の平均点]
int sub; //合計点
} student;
void bucket_sort(student *, int, int);
int main(int argc, char const *argv[])
{
FILE *fp;
int i, j, dust = 0, score = 0;
char name[6] = {""};
char subject[3][64] = {"", "", ""}; //各科目名
student s[NUM] = {}; //構造体の配列
student *sp = s; //配列sを指すstudent型のポインタ
for(i = 0; i < 3; i++){
if((fp = fopen(argv[i + 1], "r")) == NULL)
printf("\aファイルをオープンできません。\n");
else {
sscanf(argv[i + 1], "%[^.]", &subject[i]);
while((dust = fgetc(fp)) != '\n'); //1行目のスキップ
j = 0;
while(fscanf(fp, "%[^,],%d", name, &score) != EOF){
fgetc(fp);
strcpy(sp[j].id,name);
(sp[j].pt[i]) = score;
(sp[j].sub) += score;
j++;
}
}
fclose(fp);
}
for(i = 0; i < NUM; i++)
sp[i].ave = (double)sp[i].sub / 3.0;
bucket_sort(sp, NUM, ORDER);
if((fp = fopen(argv[4], "w")) == NULL)
printf("\aファイルをオープンできません。\n");
else {
fprintf(fp,"studnt,%s,%s,%s,average\n", subject[0], subject[1], subject[2]);
for(i = 0; i < NUM; i++)
fprintf(fp,"%s,%d,%d,%d,%.1f", s[i].id, s[i].pt[0], s[i].pt[1], s[i].pt[2], s[i].ave);
fprintf(fp, "\n");
}
fclose(fp);
return 0;
}
//この中身がわかりません
void bucket_sort(student std[], int number, int x)
{
}
プログラミングは1年やってますが
学校ではまだメインではないので知っていることは少ないです
丸々の答えでももちろんありがたいのですが考え方や各部の役割を
少しづつ教えていただけるとありがたいです
初めて利用させていただくので至らぬ点もあると思いますがよろしくお願いします