第8回演習の解答例

演習課題

(1)試験結果のデータファイルtestdata.txt(右クリック-->[対象をファイルに保存] )を読み込んで,大きい順に並べ替え,別のファイルに出力するプログラムを,第6回(3)を元にして作成せよ。


#include <stdio.h>

/*ファイル入力の関数 ファイル名と配列のアドレスを受取,データの読み取り個数を戻す*/
int load(char *filename, int *data)	
{
    int i=0;
    FILE *fp;

    fp = fopen(filename, "r");
 
    while(!feop(fp)){
        fscanf(fp, "%d", &(data[i]);
        i++;
    }

    fclose(fp);

    return (i-1); /* どうしてi-1がデータ数なのか,理解しておこう! */
}

 
}

void swap(int *a, int *b)
{
    int tmp;

    tmp = *a;
    *a = *b;
    *b = tmp;
}

/*並べ替えの関数*/
void sort(int *p, int n)
{
    int i, j;

    for(i=0;i<n-1;i++){
        for(j=i+1;j<n;j++){
            if(*(p+i) < *(p+j)){
                swap(p+i, p+j);
            }
        }
    }
}

/*ファイル出力の関数*/
void store(char *filename, int *data, int n)	
{
    int i;
    FILE *fp;

    fp = fopen(filename, "w");
 
    for(i=0; i<n; i++){
        fprintf(fp, "%d\n", &(data[i]);
    }

    fclose(fp);

}

/*メイン関数*/
void main()
{
    int data[256];  /* データ用配列 */
    int n;         /* データ数 */

    n = load("testdata.txt", data);  /* ファイルからデータを配列に読み取り,データ数を戻す */  
    sort(data, n);   /* 配列を並べ替える */
    store("result.txt", data, n);  /* 結果を保存する */
}