用c语言结构体1. 设计一个灵活的投票系统,能够完成至少 2 个候选人的投票统计工作:(1) 输入候选人个数和选举人个数;(2) 输入候选人姓名;(3) 投票:每个投票人输 入一次候选人的姓名;(4) 统计各个候选人的的票情况。
时间: 2024-03-22 16:37:31 浏览: 21
好的,我可以帮你设计这个投票系统。首先,我们可以使用结构体来表示候选人和投票人的信息。下面是一个基本的结构体定义:
```c
// 定义候选人结构体
typedef struct {
char name[20]; // 候选人姓名
int votes; // 候选人得票数
} Candidate;
// 定义投票人结构体
typedef struct {
char name[20]; // 投票人姓名
int voted; // 是否已投票,0表示未投票,1表示已投票
} Voter;
```
然后,我们可以在主函数中按照以下步骤设计投票系统:
1. 输入候选人个数和选举人个数;
2. 动态分配候选人结构体数组和投票人结构体数组;
3. 输入候选人姓名,并初始化候选人结构体数组;
4. 进行投票的循环,直到所有选民都投票完毕:
1. 输入投票人姓名,并检查其是否已经投票;
2. 输入投票给哪个候选人,并更新候选人结构体数组的得票数;
3. 更新投票人结构体数组的投票状态为已投票;
5. 统计各个候选人的得票情况,并输出结果。
下面是完整的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义候选人结构体
typedef struct {
char name[20]; // 候选人姓名
int votes; // 候选人得票数
} Candidate;
// 定义投票人结构体
typedef struct {
char name[20]; // 投票人姓名
int voted; // 是否已投票,0表示未投票,1表示已投票
} Voter;
int main() {
int num_candidates, num_voters;
printf("请输入候选人个数和选民个数:");
scanf("%d %d", &num_candidates, &num_voters);
// 动态分配候选人和投票人数组
Candidate *candidates = (Candidate*) malloc(num_candidates * sizeof(Candidate));
Voter *voters = (Voter*) malloc(num_voters * sizeof(Voter));
// 输入候选人姓名和初始化候选人数组
printf("请输入候选人姓名:\n");
for (int i = 0; i < num_candidates; i++) {
scanf("%s", candidates[i].name);
candidates[i].votes = 0;
}
// 进行投票
printf("请开始投票:\n");
int num_voted = 0;
while (num_voted < num_voters) {
char voter_name[20];
printf("请输入投票人姓名:");
scanf("%s", voter_name);
// 查找投票人在投票人数组中的位置
int voter_index = -1;
for (int i = 0; i < num_voters; i++) {
if (strcmp(voters[i].name, voter_name) == 0) {
voter_index = i;
break;
}
}
// 如果投票人不存在,则添加到投票人数组中
if (voter_index == -1) {
voter_index = num_voted;
strcpy(voters[num_voted].name, voter_name);
voters[num_voted].voted = 0;
num_voted++;
}
// 如果投票人已经投票,则重新输入
if (voters[voter_index].voted) {
printf("该选民已经投过票了,请重新输入!\n");
continue;
}
// 输入投票给哪个候选人
char candidate_name[20];
printf("请输入要投票给哪个候选人:");
scanf("%s", candidate_name);
// 查找候选人在候选人数组中的位置
int candidate_index = -1;
for (int i = 0; i < num_candidates; i++) {
if (strcmp(candidates[i].name, candidate_name) == 0) {
candidate_index = i;
break;
}
}
// 如果候选人不存在,则重新输入
if (candidate_index == -1) {
printf("该候选人不存在,请重新输入!\n");
continue;
}
// 更新候选人得票数和投票人投票状态
candidates[candidate_index].votes++;
voters[voter_index].voted = 1;
}
// 统计各个候选人的得票情况
printf("统计结果如下:\n");
for (int i = 0; i < num_candidates; i++) {
printf("%s: %d 票\n", candidates[i].name, candidates[i].votes);
}
// 释放动态分配的内存
free(candidates);
free(voters);
return 0;
}
```
希望这个投票系统能够满足你的需求!
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)