请用c语言编写:编程统计候选人的得票数。设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个候选人的名字,若选民输错候选人的姓名,则按废票处理。选民投票结束后,程序自动显示各候选人的得票结果和废票数,要求利用结构体数组表示3个候选人的姓名和得票结果,将最终的统计结果显示输出并写入文本文件中。
时间: 2024-02-09 14:11:20 浏览: 60
以下是使用C语言编写的程序,实现统计候选人得票数的功能:
```c
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define NUM_CANDIDATES 3
#define NUM_VOTERS 10
struct candidate {
char name[MAX_NAME_LEN + 1];
int votes;
};
int main() {
struct candidate candidates[NUM_CANDIDATES] = {
{"zhang", 0},
{"li", 0},
{"wang", 0}
};
int spoiled_votes = 0;
char input_name[MAX_NAME_LEN + 1];
for (int i = 0; i < NUM_VOTERS; i++) {
printf("请输入选民编号为 %d 的投票结果:", i + 1);
scanf("%s", input_name);
int found_candidate = 0;
for (int j = 0; j < NUM_CANDIDATES; j++) {
if (strcasecmp(input_name, candidates[j].name) == 0) {
candidates[j].votes++;
found_candidate = 1;
break;
}
}
if (!found_candidate) {
spoiled_votes++;
}
}
printf("\n统计结果如下:\n");
for (int i = 0; i < NUM_CANDIDATES; i++) {
printf("%s 得票数:%d\n", candidates[i].name, candidates[i].votes);
}
printf("废票数:%d\n", spoiled_votes);
FILE *fp;
fp = fopen("result.txt", "w");
if (fp == NULL) {
printf("无法写入文件!\n");
return 1;
}
fprintf(fp, "统计结果如下:\n");
for (int i = 0; i < NUM_CANDIDATES; i++) {
fprintf(fp, "%s 得票数:%d\n", candidates[i].name, candidates[i].votes);
}
fprintf(fp, "废票数:%d\n", spoiled_votes);
fclose(fp);
return 0;
}
```
程序中定义了一个结构体数组`candidates`,用于存储3个候选人的姓名和得票结果。循环读入10个选民的投票结果,如果输入的候选人姓名与`candidates`数组中的某个元素的姓名相同,则将该元素的得票数加1;否则,废票数加1。最终输出各候选人的得票结果和废票数,并将统计结果写入`result.txt`文本文件中。程序中使用了`strcasecmp`函数进行字符串比较,忽略大小写。
阅读全文