第10回:ファイル(2)

 ファイルの操作,難しかったですか?

 今週は,先週に引き続き,ファイルの入出力の演習を行いましょう.


ファイル操作の復習

キーボード ファイル
#include <stdio.h>

void main()
{











    printf("test");


}
#include <stdio.h>

void main()
{
    char filename[20];
    FILE *fp;

    printf("作成するファイル名を入力してください : ");
    scanf("%s", filename);

    fp = fopen(filename, "w");
    if(fp == NULL){
        printf("ファイルを作れませんでした");
        return;
    }
    fprintf(fp, "test");
   
    fclose(fp);
}  
キーボード ファイル
#include <stdio.h>

void main()
{
    char s[20];











    scanf("&s", s);

    printf("%s", s);

}
#include <stdio.h>

void main()
{
    char s[20];
    char filename[20];
    FILE *fp;

    printf("読み込むファイル名を入力してください : ");
    scanf("%s", filename);

    fp = fopen(filename, "r");
    if(fp == NULL){
        printf("ファイルがありませんでした");
        return;
    }
    fscanf(fp, "&s", s);
   
    printf("%s", s);
    fclose(fp);
}  

ファイルからデータを読み込む際に,データの個数が未知だとしたら,どうしたらよいだろう.

ファイルの終わりを調べるには,feof()関数を使います.この関数は,ファイルの終わりに達すると,trueになります.

この関数を使って,整数データの並んだファイルから,配列にデータを読み込んでみよう.

#include <stdio.h>

void main()
{
    int i, n;
    int data[256];
    char filename[20];
    FILE *fp;

    printf("読み込むデータファイル名を入力してください : ");
    scanf("%s", filename);

    fp = fopen(filename, "r");
    if(fp == NULL){
        printf("ファイルがありませんでした");
        return;
    }

    i = 0;
    do{
        fscanf(fp, "&d", &(data[i]));
        i++;
    }while(!(feof(fp)));

    fclose(fp);

    n = i; 
    for(i=0; i<n; i++) printf("%d\n", data[i]);
}  

または,for文を使って,

#include <stdio.h>

void main()
{
    int i, n;
    int data[256];
    char filename[20];
    FILE *fp;

    printf("読み込むデータファイル名を入力してください : ");
    scanf("%s", filename);

    fp = fopen(filename, "r");
    if(fp == NULL){
        printf("ファイルがありませんでした");
        return;
    }

    for(i = 0; !(feof(fp)); i++)  fscanf(fp, "%d", &(data[i]));

    fclose(fp);

    n = i; 
    for(i=0; i<n; i++) printf("%d\n", data[i]);
}  

【演習】

100人の試験結果のデータ testdata.txt(100点満点で正の整数)を読み込んで,試験の平均値を求めるプログラムを作ろう.

これができた人は,標準偏差を求めてから各点数の偏差値を求めてみよう.

偏差値の求め方:

 偏差値=(得点−平均値)/標準偏差*10+50

標準偏差:

 標準偏差=

平方根は,sqrt()関数を用いて求めることができます.

使い方:

 #include <math.h>

 double sqrt(double x);

さらに,できた人は,関数の演習で作成した,入力されたアルファベットの小文字の文字列をabc順に並べ替えるプログラムを参考にして,成績のよい順に並べ替えてみよう.