题目描述
某个寝室选举寝室长,有3位候选人,有6名同学参与投票,而且只能投一个人,要求采用结构体编写统计选票的程序。先输入候选人名字,再输入同学所投的候选人名字,最后根据每位候选人的得票数排序输出显示
实现代码
#include <stdio.h>
#include <string.h>
// 定义候选人结构体
typedef struct {
char name[20]; // 候选人名字
int votes; // 候选人票数
} Candidate;
int main()
{
Candidate candidates[3] = { // 初始化3个候选人
{ "张三", 0 },
{ "李四", 0 },
{ "王五", 0 }
};
int numVoters; // 投票人数
printf("请输入投票人数:");
scanf("%d", &numVoters);
// 处理每个投票人
for (int i = 0; i < numVoters; i++)
{
char voteName[20]; // 存储投票人所投的候选人名字
printf("请输入第%d位投票人所投的候选人名字:", i + 1);
scanf("%s", voteName);
// 遍历候选人数组,找到被投票者并增加其票数
for (int j = 0; j < 3; j++)
{
if (strcmp(candidates[j].name, voteName) == 0)
{
candidates[j].votes++;
break;
}
}
}
// 排序
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2 - i; j++) {
if (candidates[j].votes < candidates[j + 1].votes) {
Candidate temp = candidates[j];
candidates[j] = candidates[j + 1];
candidates[j + 1] = temp;
}
}
}
// 输出得票情况
printf("得票情况:\n");
for (int i = 0; i < 3; i++)
{
printf("%s:%d票\n", candidates[i].name, candidates[i].votes);
}
return 0;
}
实现说明:
- 定义候选人结构体,包含名字和票数两个成员变量。
- 初始化3个候选人,每个人的票数都为0。
- 使用
scanf
输入投票人数,然后依次处理每个投票人的投票。 - 对于每位投票人,使用
scanf
输入所投的候选人名字,然后遍历候选人数组,找到被投票者并增加其票数。 - 使用冒泡排序对候选人数组按照票数从高到低进行排序。
- 遍历排好序的候选人数组,输出每个候选人的名字和票数。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END