C言語ケーススタディ 1行の文字数の分布図




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



今回は授業の課題らしき次の問題を解いてみることにします。
入力行の長さを100文字以下であると仮定して、テキストを読み込み、
行の長さの分布と、平均を調べるプログラムを作る。
分布は配列カウンタに書き込み、平均はその配列を引数として取る関数に
よって計算するものとする。
分布状態をどのような形式で表示するのか指定がないので10文字単位の分布図を表示することにします。
ファイルを一行ごとに読み込んで処理をするプログラムなのでファイルの内容を表示するTYPEコマンドの作り方2のケーススタディのプログラムをベースにします。 読み込んだ行の長さはstrlen関数でカウントし分布図を作成するためにdist配列を更新し、さらに平均文字数を計算するためにsumに加えていきます。
ファイルTYPEコマンドはファイルの内容を読み込みながら画面に表示するだけの簡単なコマンドです。 読み込むファイルのファイル名はコマンドラインから指定できるようにします。 Study Cユーザーの方は専用講座に、コマンドラインからパラメータを受け取る方法が第18回講座に説明されているので参照してください。
ファイルを最後まで読み込んだら平均値と分布図を表示します。
#include <stdio.h>

#define LINE_SIZE       100

main(int argc, char *argv[])
{
        FILE    *fp;
        char    buff[LINE_SIZE+1];
        int     len, i1, i2, dist[LINE_SIZE/10], count, sum;

        if(argc != 2){
                printf("コマンドの入力形式が間違っています.\n");
                return;
        }
        fp = fopen(argv[1], "rb");
        if(fp == NULL){
                printf("ファイルがオープンできません[%s].\n", argv[1]);
                return;
        }

        for(i1 = 0; i1 < LINE_SIZE/10; i1++){
                dist[i1] = 0;
        }

        count = sum = 0;
        for(;;){
                if(fgets(buff, sizeof(buff)-1, fp) == NULL)
                        break;
                len = strlen(buff);
                sum += len;
                dist[len/10]++;
                count++;
        }
        fclose(fp);

        printf("平均 : %d文字\n", sum / count);
        for(i1 = 0; i1 < LINE_SIZE/10; i1++){
                printf("%2d - %2d : ", i1, (i1+1)*10 - 1);
                for(i2 = 0; i2 < dist[i1]; i2++){
                        printf("*");
                }
                printf("\n");
        }
}
Study Cにロードする Study Cにロードし編集する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて... 「run file」のように実行する必要があるので実行ボタンはありません


[an error occurred while processing this directive]