偶数・奇数・素数を別々のファイルに保存するCプログラム
はじめに
ファイルとはディスク上に存在する物理的な保存場所であり、ディレクトリはファイルを整理・管理するための論理的なパスです。すべてのファイルは必ずいずれかのディレクトリの中に格納されます。
C言語でファイルに対して行える基本的な操作は、主に次の3つです。
- ファイルを開く
- ファイルを処理する(読み取り・書き込み・変更)
- ファイルを保存して閉じる
本記事では、入力ファイルから整数を読み込み、偶数・奇数・素数をそれぞれ別のファイルに振り分けて保存するCプログラムを紹介します。
偶数・奇数・素数を別ファイルに保存するCプログラム
以下のプログラムは、入力ファイル「numbers.txt」から整数を1つずつ読み込み、素数であれば「prime-numbers.txt」へ、素数以外の偶数であれば「even-numbers.txt」へ、それ以外の数値は「odd-numbers.txt」へ書き込みます。
#include <stdio.h>
#include <stdlib.h>
/* 関数のプロトタイプ宣言 */
int even(const int num);
int prime(const int num);
int main(){
FILE * fptrinput,
* fptreven,
* fptrodd,
* fptrprime;
int num, success;
fptrinput = fopen("numbers.txt", "r");
fptreven = fopen("even-numbers.txt", "w");
fptrodd = fopen("odd-numbers.txt", "w");
fptrprime = fopen("prime-numbers.txt", "w");
if(fptrinput == NULL || fptreven == NULL || fptrodd == NULL || fptrprime == NULL){
/* ファイルを開けなかった場合は終了 */
printf("Unable to open file.\n");
exit(EXIT_FAILURE);
}
/* ファイルが正常に開けた旨のメッセージ */
printf("File opened successfully. Reading integers from file. \n\n");
/* 整数を1つ読み込み、読み込み結果をsuccessに格納 */
while (fscanf(fptrinput, "%d", &num) != -1){
if (prime(num))
fprintf(fptrprime, "%d\n", num);
else if (even(num))
fprintf(fptreven, "%d\n", num);
else
fprintf(fptrodd, "%d\n", num);
}
fclose(fptrinput);
fclose(fptreven);
fclose(fptrodd);
fclose(fptrprime);
printf("Data written successfully.");
return 0;
}
int even(const int num){
return !(num & 1);
}
int prime(const int num){
int i;
if (num < 0)
return 0;
for ( i=2; i<=num/2; i++ ) {
if (num % i == 0) {
return 0;
}
}
return 1;
}
プログラムのポイント
- even()関数: ビット演算
num & 1を利用して偶数を判定します。最下位ビットが0であれば偶数です。 - prime()関数: 2から num/2 までの整数で順に割り切れるかを調べ、1つも約数がなければ素数と判定します。
- 判定の優先順位: ループ内では素数判定を先に行うため、偶数である2は「prime-numbers.txt」に保存されます。
- 注意点: このプログラムでは1も素数として扱われます。数学的には1は素数ではありませんが、出力例では素数ファイルに含まれています。
実行結果
上記のプログラムをコンパイルして実行すると、次のような出力が得られます。
File opened successfully. Reading integers from file. Data written successfully.
処理の流れと解説
入力ファイル「numbers.txt」には、あらかじめ次のような整数が格納されているものとします。このファイルは読み取りモード("r")で開かれるため、プログラムの実行前に作成しておく必要があります。
numbers.txt: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
プログラムを実行すると、各数値が判定され、次のように3つのファイルへ振り分けられます。
even-numbers.txt: 4 6 8 10 12 14 16 odd-numbers.txt: 9 15 prime-numbers.txt: 1 2 3 5 7 11 13 17
このように、fopen()で複数のファイルを同時に開き、fscanf()で読み込んだ値を条件分岐で振り分け、fprintf()で対応するファイルへ書き込むことで、データの分類処理を簡単に実現できます。処理が完了したら、fclose()ですべてのファイルを確実に閉じることが重要です。
-
Pythonでテキストファイルを読み書きする方法|open関数とアクセスモードの使い方を徹底解説
このチュートリアルでは、Pythonにおけるファイル操作(ファイルハンドリング)の基本について学びます。Pythonでは、組み込み関数を使うだけで、ファイルを簡単に編集・操作できるのが魅力です。 Pythonで扱えるファイルは2種類 Pythonで編集できるファイルには、主に次の2種類があります。それぞれの特徴を見ていきましょう。 テキストファイル テキストファイルとは、英字などの文字データが含まれた一般的なファイルです。ファイル内に記録されている内容を「テキスト」と呼びます。 バイナリファイル バイナリファイルは、0と1のデータで構成されるファイルです。そのままでは人間が理解できない形
-
【Python入門】偶数と奇数の要素を2つのリストに分割する方法
この記事では、ユーザーが入力したリスト(偶数と奇数が混在した要素を含む)を、偶数のみのリストと奇数のみのリストという2つの異なるリストに分割するPythonプログラムを紹介します。 リスト内の各要素を2で割った余りを判定することで、偶数か奇数かを簡単に見分けることができます。これはPythonの条件分岐とループ処理を学ぶのに最適な例題です。 実行例 Input: [1, 2, 3, 4, 5, 9, 8, 6] Output Even lists: [2, 4, 8, 6] Odd lists: [1, 3, 5, 9] アルゴリズム プログラムの流れは以下のステップで構成されています。