(1)試験結果のデータファイルtestdata.txt(右クリック-->[対象をファイルに保存] )を読み込んで,
を第5回(3)のプログラムを元に求め,画面に表示するプログラムを作成せよ.データ数はEOFを元に判断すること.
結果は平均44.84,最高点98,最低点1点となる.
#include <stdio.h>
int read(float *p)
{
int n;
FILE *fp;
fp = fopen("testdata.txt", "r");
if(fp == NULL) {
printf("ファイルを開くことが出来ませんでした.¥n");
return;
}
n = 0;
while ( ! feof(fp) && n < 512) {
fscanf(fp, "%f", p+n);
n++;
}
fclose(fp);
return(n-1);
}
float average(float *p, int n)
{
int i;
float ave=0.0;
for(i=0;i<n;i++) {
ave += *(p+i);
}
ave /= n;
return ave;
}
void max_min(float *p, int n, float *max, float *min)
{
int i;
*max = *min = *p;
for(i=1;i<n;i++){
if(*max < *(p+i)){
*max = *(p+i);
}
}
for(i=1;i<n;i++){
if(*min > *(p+i)){
*min = *(p+i);
}
}
}
void main()
{
int n;
float data[512];
float max, min;
n =read(data);
printf("平均値 = %.2f¥n",average(data,n));
max_min(data,n,&max,&min);
printf("最大値 = %.0f,最小値 = %.0f¥n",max,min);
}
(2)次に各点数に成績をつけて,ファイル("result.csv")に保存するプログラムを作成せよ.
結果については,データと成績両方をファイルに書き込むこと.
csvファイルに書き込む時,fprintf関数における値の型を書く所をカンマ区切りすることによって,
セルの列を区別することができる.
点数 | 成績 |
90点以上 | S |
80点以上90点未満 | A |
70点以上80点未満 | B |
60点以上70点未満 | C |
60点未満 | F |
#include <stdio.h>
int read(float *p)
{
int n;
FILE *fp;
fp = fopen("testdata.txt", "r");
if(fp == NULL) {
printf("ファイルを開くことが出来ませんでした.¥n");
return;
}
n = 0;
while ( ! feof(fp) && n < 512) {
fscanf(fp, "%f", p+n);
n++;
}
fclose(fp);
return(n-1);
}
void write(float *p, int n)
{
int i;
FILE *fp;
fp = fopen("result.csv", "w");
if(fp == NULL){
printf("ファイルを作れませんでした");
return;
}
for(i=0;i<n;i++){
if(*(p+i)>=90){
fprintf(fp, "%f, S¥n",*(p+i));
}else if(*(p+i)>=80){
fprintf(fp, "%f, A¥n",*(p+i));
}else if(*(p+i)>=70){
fprintf(fp, "%f, B¥n",*(p+i));
}else if(*(p+i)>=60){
fprintf(fp, "%f, C¥n",*(p+i));
}else{
fprintf(fp, "%f, F¥n",*(p+i));
}
}
fclose(fp);
}
void main()
{
int n;
float data[512];
n = read(data);
write(data,n);
}
(3)最後に各成績に何人いるか計算し,その数をファイル(number.txt)に書き出すプログラムを作成せよ.
結果は, S:6 A : 5 B:11 C : 12 F:66 となる.
#include <stdio.h>
int read(float *p)
{
int n;
FILE *fp;
fp = fopen("testdata.txt", "r");
if(fp == NULL) {
printf("ファイルを開くことが出来ませんでした.¥n");
return;
}
n = 0;
while ( ! feof(fp) && n < 512) {
fscanf(fp, "%f", p+n);
n++;
}
fclose(fp);
return(n-1);
}
void write(int s, int a, int b, int c, int f)
{
FILE *fp;
fp = fopen("number.txt", "w");
if(fp == NULL){
printf("ファイルを作れませんでした");
return;
}
fprintf(fp,"S:%d¥nA:%d¥nB:%d¥nC:%d¥nF:%d¥n",s,a,b,c,f);
fclose(fp);
}
void main()
{
int i, n, s, a, b, c, f;
float data[512];
s = 0;
a = 0;
b = 0;
c = 0;
f = 0;
n = read(data);
for(i=0;i<n;i++){
if(data[i]>=90){
s++;
}else if(data[i]>=80){
a++;
}else if(data[i]>=70){
b++;
}else if(data[i]>=60){
c++;
}else{
f++;
}
}
write(s,a,b,c,f);
}
(4)キーボードから入力した文字列をファイル(moji.txt)に保存し,その文字列の文字数を数えるプログラムを作成せよ.
文字列については過去のページで各自確認すること.
#include <stdio.h>
void main()
{
char str[100];
int i;
int count=0;
FILE *fp;
printf("文字を入力してください:");
scanf("%s", str);
fp = fopen("moji.txt", "w");
if(fp == NULL){
printf("ファイルを作れませんでした");
return;
}
fprintf(fp, "%s",str);
fclose(fp);
for(i=0;str[i]!='¥0';i++){
count++;
}
printf("入力された文字数は%dです¥n",count);
}