演習課題
(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); /* 結果を保存する */
}