c语言:编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个候选人的名字,若选民输错候选人的姓名,则按废票处理。选民投票结束后,程序自动显示各候选人的得票结果和废票数,要求利用结构体数组表示3个候选人的姓名和得票结果,将最终的统计结果显示输出并写入文本文件中。
时间: 2024-02-15 09:03:44 浏览: 62
请设计一个统计选票的程序。-c语言课件(大学教程)
好的,这是一个实现该功能的 C 语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_CANDIDATES 3
struct Candidate {
char name[10];
int votes;
};
int main() {
struct Candidate candidates[MAX_CANDIDATES];
strcpy(candidates[0].name, "zhang");
strcpy(candidates[1].name, "li");
strcpy(candidates[2].name, "wang");
for (int i = 0; i < MAX_CANDIDATES; i++) {
candidates[i].votes = 0;
}
int invalid_votes = 0;
char vote[10];
for (int i = 0; i < 10; i++) {
printf("Please enter the name of the candidate you want to vote for: ");
scanf("%s", vote);
int valid_vote = 0;
for (int j = 0; j < MAX_CANDIDATES; j++) {
if (strcasecmp(vote, candidates[j].name) == 0) {
candidates[j].votes++;
valid_vote = 1;
break;
}
}
if (!valid_vote) {
invalid_votes++;
}
}
FILE *outfile = fopen("vote_results.txt", "w");
for (int i = 0; i < MAX_CANDIDATES; i++) {
fprintf(outfile, "%s: %d\n", candidates[i].name, candidates[i].votes);
}
fprintf(outfile, "Invalid votes: %d\n", invalid_votes);
fclose(outfile);
printf("The vote results have been written to vote_results.txt\n");
return 0;
}
```
程序中同样创建了一个结构体 `Candidate`,其中包含候选人的姓名和得票数。定义了一个长度为 3 的结构体数组 `candidates`,用于存储三个候选人的信息。程序首先将每个候选人的得票数初始化为 0。随后,程序通过循环,让 10 个选民分别输入他们想要投票的候选人的姓名,如果输入的姓名是正确的,则为相应的候选人的得票数加 1,否则将该票视为废票。最后,程序将统计出来的结果写入到一个名为 `vote_results.txt` 的文本文件中,并在控制台输出完成的信息。
需要注意的是,程序中同样使用了 `strcasecmp` 函数将输入的候选人姓名与候选人数组中的姓名进行比较。因为 C 语言中没有 `string` 类型,所以在结构体中使用了字符数组来存储候选人的姓名。另外,程序中使用了标准库函数 `fopen` 和 `fclose` 来打开和关闭文件,使用了 `fprintf` 函数来将结果写入到文件中。
阅读全文