用vc2010c语言编写一个程序要求编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个候选人的名字,若选民输错候选人的姓名,则按废票处理。选民投票结束后,程序自动显示各候选人的得票结果和废票数,要求利用结构体数组表示3个候选人的姓名和得票结果,将最终的统计结果显示输出并写入文本文件中。
时间: 2024-02-15 22:02:29 浏览: 99
好的,我来帮你解答这个问题。以下是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define CANDIDATE_NUM 3
#define VOTER_NUM 10
typedef struct {
char name[20];
int vote_count;
} Candidate;
int main() {
Candidate candidates[CANDIDATE_NUM] = {
{"zhang", 0},
{"li", 0},
{"wang", 0}
};
char voter[CANDIDATE_NUM][20];
int invalid_vote_count = 0;
for (int i = 0; i < VOTER_NUM; i++) {
printf("Please input the candidate name you want to vote: ");
char name[20];
scanf("%s", name);
int voted = 0;
for (int j = 0; j < CANDIDATE_NUM; j++) {
if (strcmp(name, candidates[j].name) == 0) {
candidates[j].vote_count++;
voted = 1;
strcpy(voter[i], name);
break;
}
}
if (!voted) {
printf("Invalid candidate name, the vote is invalid.\n");
invalid_vote_count++;
strcpy(voter[i], "Invalid");
}
}
printf("Vote result:\n");
for (int i = 0; i < CANDIDATE_NUM; i++) {
printf("%s: %d votes\n", candidates[i].name, candidates[i].vote_count);
}
printf("Invalid votes: %d\n", invalid_vote_count);
FILE *fp;
fp = fopen("vote_result.txt", "w");
fprintf(fp, "Vote result:\n");
for (int i = 0; i < CANDIDATE_NUM; i++) {
fprintf(fp, "%s: %d votes\n", candidates[i].name, candidates[i].vote_count);
}
fprintf(fp, "Invalid votes: %d\n", invalid_vote_count);
fprintf(fp, "Voters:\n");
for (int i = 0; i < VOTER_NUM; i++) {
fprintf(fp, "%d: %s\n", i+1, voter[i]);
}
fclose(fp);
return 0;
}
```
程序中使用了结构体数组表示3个候选人的姓名和得票结果,还定义了一个二维数组用于记录每个选民的投票情况。在程序运行时,依次读入每个选民输入的候选人姓名,判断该姓名是否在候选人列表中,如果存在则为该候选人增加一票,同时将该选民的投票结果记录在二维数组中;如果不存在则将该投票视为废票,将该选民的投票结果记录为“Invalid”。最后统计得票结果和废票数,输出到控制台和一个名为“vote_result.txt”的文本文件中。
希望能够帮到你!
阅读全文