C语言实现学生会主席投票选举程序

问题描述:

计算机学院 2022届学生会主席投票选举工作定于5月6日在教学楼前隆重举行。本次投票将采用电脑统计选票的方式,当投票选举正式开始后,同学们将排队一一走到电脑前,投上自己神圣的一票:在电脑前输入一个姓名,然后输入回车表示确当所同学投票结束,工作人员只需要输入一人''并回车确认,表示投票结束,电脑立即显示出得票最高的同学姓名,该同学将当选为新一届计算机与通信工程学院学生会主席。假定票数相等时先输入的姓名为主席。选举大会的准备工作正在紧张进行,编程统计投票的工作就交给你了。入本题为单实例测试。输入包含多行,每行是一个由小写英文字母组成的字符串,表示一个姓名,遇到时表示输入结束你可以假定,参加投票学生的人数不超过200人,每个学生姓名字符串的长度小于20。

输出:

输出为一个字符串,当选为学生会主席的学生姓名。

**代码实现:**c#include <stdio.h>#include <string.h>

#define MAX_CANDIDATES 200#define MAX_NAME_LENGTH 20

struct candidate { char name[MAX_NAME_LENGTH]; // 姓名 int votes; // 票数} candidates[MAX_CANDIDATES];

int find_candidate(char *name, int num_candidates) { for (int i = 0; i < num_candidates; i++) { if (strcmp(name, candidates[i].name) == 0) { return i; } } return -1; // 如果找不到,返回-1}

int main() { char name[MAX_NAME_LENGTH]; int num_candidates = 0;

while (fgets(name, MAX_NAME_LENGTH, stdin) != NULL) {        if (name[0] == '*') {            break;  // 如果输入为*,退出循环        }        name[strlen(name) - 1] = '�';  // 去掉输入字符串的换行符

    int index = find_candidate(name, num_candidates);        if (index == -1) {            // 如果该候选人还没有被记录,则将其添加到数组末尾            strcpy(candidates[num_candidates].name, name);            candidates[num_candidates].votes = 1;            num_candidates++;        } else {            // 否则,给其票数加1            candidates[index].votes++;        }    }

int max_votes = 0;    int max_index = 0;    for (int i = 0; i < num_candidates; i++) {        if (candidates[i].votes > max_votes ||            (candidates[i].votes == max_votes && strcmp(candidates[i].name, candidates[max_index].name) < 0)) {            max_votes = candidates[i].votes;            max_index = i;        }    }

printf('%s

', candidates[max_index].name);

return 0;}

代码解析:

  1. 结构体定义: 使用 struct candidate 定义一个结构体来存储每个候选人的姓名和票数。2. 查找候选人函数: find_candidate 函数用于查找某个姓名在 candidates 数组中的位置,如果找到则返回索引,否则返回 -1。3. 输入处理: 使用 while 循环读取输入,并对每个输入进行处理: * 如果输入为 *,则退出循环。 * 否则,调用 find_candidate 函数查找该姓名是否已经存在。 * 如果存在,则将其票数加 1。 * 如果不存在,则将其添加到 candidates 数组中,并将其票数设置为 1。4. 统计票数: 使用 for 循环遍历 candidates 数组,找到得票最高的候选人。5. 输出结果: 打印得票最高的候选人姓名。

示例输入:

johnmaryjohnalicemary*

示例输出:

john

注意:

本程序假设每个候选人姓名都是由小写英文字母组成,并且长度小于 20 个字符

C语言实现学生会主席投票选举程序

原文地址: https://www.cveoy.top/t/topic/ojJG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录