Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

whileループを使って文章の平均単語長を計算するCプログラムの作成方法

この記事では、whileループを使用して、入力された文章に含まれる単語の平均文字数(平均単語長)を計算するCプログラムを紹介します。

問題

実行時に文章を1行入力し、その文章内に存在する単語の平均の長さを計算するコードを作成してください。

解決策

基本的な考え方は以下の通りです。

  • 空白文字以外の文字をカウントして「総文字数」を求める
  • 空白文字の数から「単語数」を求める(初期値は1)
  • 総文字数を単語数で割ることで平均単語長を計算する

アルゴリズム

START
Step 1: 文字型・int型・double型の変数を宣言する
Step 2: 任意の文章を入力する
Step 3: whileループ
        条件 stmt[i]=getchar()) != '\n' をチェック
        真ならループ内へ入り、iをインクリメントしてステップ5の関数を呼び出す準備をする
Step 4: ステップ5の関数が返した平均長を出力する
Step 5: 呼び出される関数 calculatewordlength
        i. 変数を宣言・初期化する
           charcount=0、wordcount=1
        ii. whileループ
            条件 (*stmt != '\n') をチェック
            真ならループ内に入り:
            1. if(*stmt != ' ') の場合
            2. charcount++;
            3. else if(*stmt == ' ') の場合
            4. wordcount++;
            5. stmt++;
        iii. return (double)charcount/wordcount;
STOP

プログラム

#include<stdio.h>
#include<string.h>
double calculatewordlength(const char *stmt);
int main(){
    char stmt[100];
    int i=0;
    double avglen;
    printf("enter any statement:");
    while((stmt[i]=getchar()) != '\n')
      i++;
    stmt[i]='\n';
    avglen=calculatewordlength(stmt);
    printf("average length of word is:%f.\n ", avglen);
}
double calculatewordlength(const char *stmt){
    int charcount=0;
    int wordcount=1;
    while(*stmt != '\n'){
      if(*stmt != ' ')
         charcount++;
      else if(*stmt == ' ')
         wordcount++;
      stmt++;
   }
   return (double)charcount/wordcount;
}

実行結果

enter any statement:Tutorials Point is the best resource for online education average length of word: 5.444444444.

プログラムのポイント

  • main関数ではgetchar()を使って1文字ずつ標準入力から読み込み、改行文字('\n')が現れるまで配列に格納します。
  • calculatewordlength関数にはポインタで文字列を渡し、NULL終端の代わりに改行文字を終端条件として扱っています。
  • 空白文字が出現するたびにwordcountをインクリメントすることで、単語数を数えています。初期値が1なのは、「最後の単語の後ろには空白がない」ためです。
  • 戻り値では(charcount/wordcount)のようにキャストしてdouble型で計算することで、小数点以下まで正確な平均値を得られます。
  1. 連結リスト(リンクリスト)の長さを求めるC言語プログラム

    連結リスト(リンクリスト)は動的メモリ割り当てを利用するデータ構造であり、要素の追加や削除に応じてサイズが柔軟に変化します。連結リストは「ノード」と呼ばれる要素の集合として定義され、各ノードはデータ部とリンク部(次のノードへのポインタ)の2つの部分で構成されています。データ・リンク・連結リストの関係は、以下のように表現できます。連結リストの種類連結リストには主に以下の4種類があります。単方向連結リスト(シングルリンクリスト)双方向連結リスト(ダブルリンクリスト)循環単方向連結リスト循環双方向連結リスト再帰を使って長さを求めるロジック本記事では、再帰呼び出しを利用して連結リストの長さ(ノード数)

  2. C言語で十角形の周囲長を計算する方法を解説

    十角形(デカゴン)とは? 十角形(デカゴン)とは、10個の辺を持つ多角形のことで、「10角形」とも呼ばれます。10個の頂点と10本の辺を持ちます。特に正十角形の場合、すべての辺の長さが等しく、それぞれの内角は144度になります。 以下は十角形の図です。 十角形の周囲長を求めるには、次のシンプルな公式を使用します。 周囲長 = 10 × 辺の長さ 計算例 入力:side = 10 出力:十角形の周囲長:100 入力:side = 20 出力:十角形の周囲長:200 アルゴリズム 開始 ステップ1 → 周囲長を求める関数を宣言する void perimeter(int n)