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

switch文で関数を呼び出して選挙の投票・開票を行うC言語プログラムの作り方

問題

C言語を使って、選挙に参加している各候補者への投票を受け付け、票数を集計して表示するには、どのようにプログラムを書けばよいのでしょうか。

解決策

ここでは、選挙に立候補した3人の候補者がいる場合を例に考えてみましょう。このプログラムには、次の2つの主要な機能が必要です。

  • 投票(Cast Vote) − 候補者の番号を選んで入力することで、その候補者に1票を投じます。

  • 得票数の集計(Vote Count) − 各候補者が獲得した総得票数を集計し、結果を一覧表示します。これにより誰が当選したかを確認できます。

サンプルコード

これらの操作はすべて、switch 文を使ってユーザーの選択に応じた関数を呼び出すことで実現しています。メニュー処理は do-while ループで繰り返し行い、「0」を入力するとプログラムが終了します。

#include <stdio.h>
#define CANDIDATE_COUNT
#define CANDIDATE1 "ABC"
#define CANDIDATE2 "XYZ"
#define CANDIDATE3 "PQR"

int votescount1 = 0, votescount2 = 0, votescount3 = 0;

/* 投票を行う関数 */
void castvote(){
    int choice;
    printf("\n\n ### Please choose your Candidate ####\n\n");
    printf("\n 1. %s", CANDIDATE1);
    printf("\n 2. %s", CANDIDATE2);
    printf("\n 3. %s", CANDIDATE3);
    printf("\n 4. %s", "None of These");
    printf("\n Input your choice (1 - 4) : ");
    scanf("%d", &choice);
    switch(choice){
        case 1: votescount1++; break;
        case 2: votescount2++; break;
        case 3: votescount3++; break;
        default: printf("\n Error: Wrong Choice !! Please retry");
        /* 画面を保持 */
        getchar();
    }
    printf("\n thanks for vote !!");
}

/* 得票数を集計・表示する関数 */
void votesCount(){
    printf("\n\n ##### Voting Statics ####");
    printf("\n %s - %d ", CANDIDATE1, votescount1);
    printf("\n %s - %d ", CANDIDATE2, votescount2);
    printf("\n %s - %d ", CANDIDATE3, votescount3);
}

int main(){
    int i;
    int choice;
    do{
        printf("\n\n ###### Welcome to Election/Voting 2019 #####");
        printf("\n\n 1. Cast the Vote");
        printf("\n 2. Find Vote Count");
        printf("\n 0. Exit");
        printf("\n Please enter your choice : ");
        scanf("%d", &choice);
        switch(choice){
            case 1: castvote(); break;
            case 2: votesCount(); break;
            default: printf("\n Error: Invalid Choice");
        }
    }while(choice != 0);
    /* 画面を保持 */
    getchar();
    return 0;
}

プログラムのポイント

  • 候補者名は #define マクロで定義しているため、名前を変更したい場合は定義部分だけを修正すれば済みます。

  • 各候補者の得票数はグローバル変数(votescount1〜3)で管理されており、case 文の中でインクリメント(++)されています。

  • 範囲外の番号が入力された場合、default 句でエラーメッセージを表示し、再入力を促します。

  • main 関数内の do-while ループにより、ユーザーが「0」を選ぶまでメニュー画面が繰り返し表示されます。

実行結果

###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 1
### Please choose your Candidate ####
1. ABC
2. XYZ
3. PQR
4. None of These
Input your choice (1 - 4) : 1
thanks for vote !!
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 1
### Please choose your Candidate ####
1. ABC
2. XYZ
3. PQR
4. None of These
Input your choice (1 - 4) : 1
thanks for vote !!
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice : 2
##### Voting Statics ####
ABC - 2
XYZ - 0
PQR - 0
###### Welcome to Election/Voting 2019 #####
1. Cast the Vote
2. Find Vote Count
0. Exit
Please enter your choice :

このように、switch文と関数を組み合わせることで、投票から開票までの一連の流れを簡潔かつ構造的に実装できます。応用として、候補者数を配列で管理したり、最多得票者を自動的に判定して「当選者」を表示する機能を追加したりすると、より実用的な投票システムになります。

  1. C言語でforループを使ってハート型パターンの中央に名前を出力するプログラム

    C言語のforループを活用すれば、星印(*)だけでハート型の図形を描き、その中央に好きな名前を表示することができます。この記事では、その仕組みと実装方法を順を追ってわかりやすく解説します。 課題 forループを使用して、星印(*)で描いたハート型のパターンの中に、名前を中央に表示するプログラムを作成します。 解決方法 まずユーザーに、中央に表示したい名前と、星印を表示する行数を入力してもらいます。プログラムはこれらの入力値をもとに、星印でハートの輪郭を描きながら、その中心部分に指定された名前を組み込んで出力します。 アルゴリズム forループを使ってハートパターン内に名前を表示する際は、以下

  2. 【C言語】ビット演算子を使って2倍・半分を計算する方法

    ビット演算子は、オペランドのビット単位(2進数の各桁)に対して直接操作を行う演算子です。シフト演算を活用すると、掛け算や割り算を高速に処理できるため、組み込み開発やパフォーマンスが求められる場面でよく使われます。C言語の主なビット演算子一覧演算子説明&ビットごとのAND(論理積)|ビットごとのOR(論理和)^ビットごとのXOR(排他的論理和)<<左シフト>>右シフト~1の補数(ビット反転)AND演算の真理値表ビットごとのANDaba & b000010100111OR演算の真理値表ビットごとのORaba | b000011101111XOR演算の真理値表