【アルゴリズム】システムとファイル操作

3024 ワード

小続
データ構造とアルゴリズムに対して、すべて思想の方面のもので、実際の運用の中で、多くはシステムとファイルと連絡しているので、データ構造とアルゴリズムを学ぶことに対して、オペレーティングシステムの中のいくつかのコードの実現を参照することができて、結局それはすべて大牛の再三の修正を経て得た精華です.
しかし、私の知っている限りでは、多くの人がひたすらアルゴリズム自体を研究しています.アルゴリズムは主に問題を解決するために使われています.問題に遭遇したとき、どのように解決するか知っていますが、どこから着手するか分かりません.これは悲劇的なことです.実際の応用では、多くの操作はファイルに相当しています.だから、私はここで2つのファイルに関する例を挙げました.アルゴリズムを学ぶ目的を忘れないように注意し、助けてほしい.
 
 
ファイル接続
 
プログラミング:コマンドラインで指定した最初のテキストファイルの内容を2番目のファイルに追加します.
インスタンスの解析:
この例では、コマンドラインから2つのファイル名を指定する必要があるため、パラメータ付きmain()関数を定義する必要があります.
プログラムコード:
#include <stdio.h>
int main(int argc, char* argv[])
{
    FILE *fp1,*fp2;
    int ch;
    if(argc != 3)
    {
        printf(“      !”);
        exit(0);
    }
    if((fp1 = fopen(argv[1], ”r”)) == NULL)
    {
        printf(“    :%s  
”, argv[1]); exit(1); } if((fp2 = fopen(argv[2], ”a”)) == NULL) { printf(“ :%s
”, argv[2]); exit(1); } while((ch = fgetc(fp1)) != EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); return 0; }

 
 
ファイルの読み書き操作
ファイルdatは学生情報(氏名,数学,物理,化学の3科目成績,総点)を格納するために用いられる.1つの関数を書いて、キーボードから10人の学生の3科の成績を入力してファイルに保存することができて、更に1つの関数を書いて、これらの点数を読み取って、総点を計算してそして総点をファイルに書きます.
インスタンスの解析:
1人当たり5つのデータを格納する必要があるため、まず構造体を定義します.
typedef  struct
{
    char name[10];
    int score[3];
    int sum;
}STU;

 
最初の関数はファイルを書くために使用され、「wb」または「w」で開く必要があり、2番目のファイルは「読み書き」ファイルで、「rb+」または「r+」で開く必要があります.
2つの関数のコードは次のとおりです.
void  input()
{
    FILE *fp;
    int i;
    STU s;
    if((fp = fopen(“student.dat”, “wb”)) == NULL)
    {
           printf(“      
”);     exit(0); } for(i = 0; i <= 9; i++) {     scanf(“%s”, s.name);     scanf(“%d%d%d”, &s.score[0],&s.score[1],&s.score[2]); fwrite(&s, sizeof(STU), 1, fp); } fclose(fp); } void calculate() { FILE *fp; int i; STU s; if((fp = fopen("student.dat", "r+")) == NULL) { printf("
"); exit(0); } for(i = 0; i <= 9; i++) { fseek(fp, sizeof(STU)*i, 0); fread(&s, sizeof(STU), 1, fp); s.sum = s.score[0] + s.score[1] + s.score[2]; fseek(fp, -2, 1); fwrite(&s.sum, 2, 1, fp); } fclose(fp); }

 
 
 
 
この文書は「成鵬致遠」ブログから出ています.この出典http://infohacker.blog.51cto.com/6751239/1171369は必ず保持してください.