解答PDF

C 言語Ⅱ 演習(3-5) ~ファイル(5)~
C 言語Ⅱ
演習(3-5)
~ファイル(5)~
教科書 13章
解答例 1
解答例
*以下はプログラム例であり,全く同じである必要はありません.プログラム作成の参考として確認してください.
問題1.
// 演習(3-5) ファイル 問題1
#include<stdio.h>
#include<stdlib.h> //exit(1);用
}
fclose(fp);
printf("test452b.txt にデータを書き込みます。\n");
int main(void){
FILE *fp;
int data[5];
int i;
if( (fp=fopen("test452b.txt","w")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
printf("test451.txt からデータを読み込みます。\n");
for(i=0;i<5;i++){
sum=sum+data[i];
}
ave=sum/5;
if( (fp=fopen("test451.txt","r")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
fprintf(fp,"平均値:%f", ave);
for(i=0;i<5;i++){
fscanf(fp,"%d", &data[i]);
}
fclose(fp);
return 0;
fclose(fp);
}
printf("test451.txt にデータを書き込みます。\n");
if( (fp=fopen("test451.txt","w")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
for(i=0;i<5;i++){
fprintf(fp," %2d", data[i]*2);
}
問題3.
// 演習(3-5) ファイル 問題3
#include<stdio.h>
#include<stdlib.h> //exit(1);用
int main(void){
FILE *fp;
char filename[256];
char ch;
fclose(fp);
printf("ファイル名を入力してください。\n");
scanf("%s", filename);
return 0;
}
printf("%s ファイルを開きます。\n", filename);
printf("----------------------\n");
問題2.
// 演習(3-5) ファイル 問題2
#include<stdio.h>
#include<stdlib.h> //exit(1);用
if( (fp=fopen(filename,"r")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
int main(void){
FILE *fp;
double data[5];
double sum=0.0, ave;
int i;
for(;;){
//①
if( (fscanf(fp,"%c", &ch))==EOF ) break; //①
printf("%c", ch);
//①
}
//①
fclose(fp);
printf("test452a.txt からデータを読み込みます。\n");
if( (fp=fopen("test452a.txt","r")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
for(i=0;i<5;i++){
fscanf(fp,"%lf", &data[i]);
printf("\n"); //工夫点:最後に改行を入れる
return 0;
}
【別解】 ※上記①の部分は次のいずれかの解答例に置き換え
ても良い。
C 言語Ⅱ 演習(3-5) ~ファイル(5)~
[解答例2]:無限ループ(while)+終了条件で脱出
while(1) {
if( fscanf(fp,"%c",&ch)==EOF ) break;
printf("%c", ch);
}
[解答例3]:while 文(反復条件)
while( (fscanf(fp, "%c", &ch))!=EOF ) printf("%c", ch);
[解答例4]:while 文(反復条件),教 p.303
while( (ch=fgetc(fp))!=EOF ) putchar(ch);
問題4.
// 演習(3-5) ファイル 問題4
#include<stdio.h>
#include<stdlib.h> //exit(1);用
int main(void){
FILE *fp1, *fp2;
char ch;
printf("test454.txt ファイルを複製します。\n");
if( (fp1=fopen("test454.txt","r")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
if( (fp2=fopen("copy_test454.txt","w")) == NULL){
printf("ファイルを開けませんでした。\n");
exit(1); //return 1; も可
}
for(;;){
//①
if( (fscanf(fp1,"%c", &ch))==EOF ) break; //①
fprintf(fp2,"%c", ch);
//①
}
//①
fclose(fp2);
fclose(fp1);
printf("copy_test454.txt を作成しました。\n");
return 0;
}
【別解】 ※上記①の部分は次のいずれかの解答例に置き換え
ても良い。
[解答例2]:while 文(反復条件)
while( (fscanf(fp1, "%c", &ch))!=EOF )
fprintf(fp2, "%c", ch);
[解答例3]:while 文(反復条件),教 p.303
while( (ch=fgetc(fp1)) != EOF ) fputc(ch, fp2);
(以上)
解答例 2