用c语言编写一个投票程序,每张票只能填写一个人的名字,输入n(n<100),再依次输入n个选票中被选人的名字,然后输出得票最高者的姓名(可多人并列,先达到票数的排在前面))
时间: 2024-06-10 12:09:32 浏览: 63
```c
#include <stdio.h>
#include <string.h>
#define MAX_CANDIDATE_NUM 100
#define MAX_NAME_LEN 20
int main() {
char candidate_names[MAX_CANDIDATE_NUM][MAX_NAME_LEN];
int candidate_votes[MAX_CANDIDATE_NUM] = {0};
int n;
printf("请输入候选人数:");
scanf("%d", &n);
getchar(); // 消耗换行符
printf("请输入候选人姓名:\n");
for (int i = 0; i < n; i++) {
fgets(candidate_names[i], MAX_NAME_LEN, stdin);
// fgets 会将换行符也读入,需要将其替换为结束符
int len = strlen(candidate_names[i]);
if (candidate_names[i][len - 1] == '\n') {
candidate_names[i][len - 1] = '\0';
}
}
printf("请输入选票(每行一个姓名):\n");
char name[MAX_NAME_LEN];
while (fgets(name, MAX_NAME_LEN, stdin) != NULL) {
int len = strlen(name);
if (name[len - 1] == '\n') {
name[len - 1] = '\0';
}
for (int i = 0; i < n; i++) {
if (strcmp(name, candidate_names[i]) == 0) {
candidate_votes[i]++;
break;
}
}
}
int max_vote = 0;
for (int i = 0; i < n; i++) {
if (candidate_votes[i] > max_vote) {
max_vote = candidate_votes[i];
}
}
printf("得票最高者是:\n");
for (int i = 0; i < n; i++) {
if (candidate_votes[i] == max_vote) {
printf("%s\n", candidate_names[i]);
}
}
return 0;
}
```
程序说明:
1. 使用二维字符数组 `candidate_names` 存储候选人姓名,一维表示候选人编号,二维表示姓名字符数组。使用一维整型数组 `candidate_votes` 存储候选人得票数,下标与 `candidate_names` 对应。
2. 先读入候选人数 `n`,然后使用 `fgets` 逐行读入候选人姓名,注意将换行符替换为结束符。
3. 使用 `fgets` 逐行读入选票,将每个姓名与候选人姓名比较,如果匹配则对应候选人得票数加一。
4. 扫描一遍 `candidate_votes`,找到最大得票数 `max_vote`。
5. 再次扫描 `candidate_votes`,输出得票数等于 `max_vote` 的候选人姓名。
阅读全文