ファイルの操作,難しかったですか?
今週は,先週に引き続き,ファイルの入出力の演習を行いましょう.
キーボード | ファイル |
#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]); }
これができた人は,標準偏差を求めてから各点数の偏差値を求めてみよう.
偏差値の求め方:
偏差値=(得点−平均値)/標準偏差*10+50
標準偏差:
標準偏差=
平方根は,sqrt()関数を用いて求めることができます.
使い方:
#include <math.h>
double sqrt(double x);
さらに,できた人は,関数の演習で作成した,入力されたアルファベットの小文字の文字列をabc順に並べ替えるプログラムを参考にして,成績のよい順に並べ替えてみよう.