ファイルの操作,難しかったですか?
今週は,先週に引き続き,ファイルの入出力の演習を行いましょう.
| キーボード | ファイル |
#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順に並べ替えるプログラムを参考にして,成績のよい順に並べ替えてみよう.