请问如何编程统计候选人的得票数。设有3个候选人zhang、li、wang,10个选民,选民每次输入一个候选人的名字,若选民输错候选人的姓名,则按废票处理。选民投票结束后,程序自动显示各候选人的得票结果和废票数,要求利用结构体数组表示3个候选人的姓名和得票结果,将最终的统计结果显示输出并写入文本文件中。
定义候选人结构体,包含姓名、得票数,废票数用10-得票数,输入统计即可。
运行结果:
结果写入到文件:
代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义候选人结构体
typedef struct _player
{
char name[20]; //姓名
int tickets; //得票数
}Player;
int main()
{
//初始化3个候选人
Player player[3] = { {"zhang",0},{"li",0},{"wang",0} };
int i = 0, j;
int lose = 0; //废票数
char name[20] = { 0 };
int flag = 0;
FILE* fp = 0;
for (i = 0; i < 10; i++)
{
printf("请第%d位选民输入候选人名字:",i+1);
scanf("%s", name);
flag = 0;//用来判断姓名是否输入错误
for (j = 0; j < 3; j++)
{
if (strcmp(player[j].name, name) == 0)
{
flag = 1;//找到候选人
player[j].tickets += 1; //票数+1
}
}
if (flag == 0) //废票
lose += 1;
}
//输出结果
for (i = 0; i < 3; i++)
printf("%s得票数:%d\n", player[i].name, player[i].tickets);
printf("废票数:%d\n",lose);
//结果保存到文件
fp = fopen("record.txt", "w");
for (i = 0; i < 3; i++)
fprintf(fp,"%s得票数:%d\n", player[i].name, player[i].tickets);
fprintf(fp,"废票数:%d\n", lose);
fclose(fp);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
struct Candidate
{
char name[10];
int count;
};
int main()
{
struct Candidate arr[3] = {
"li",0,"zhang",0,"wang",0
};
int i = 0, j = 0;
char s[10];
int wrong = 0;
int flag = 0;
for (i = 0; i < 10; i++)
{
flag = 0;
printf("Input vote %d:", i + 1);
scanf("%s", s);
for (j = 0; j < 3; j++)
{
if (strcasecmp(arr[j].name, s) == 0)
{
arr[j].count++;
flag = 1;
}
}
if (flag == 0)
{
wrong++;
}
}
printf("Election results:\n");
for (i = 0; i < 3; i++)
{
printf("%8s:%d\n", arr[i].name, arr[i].count);
}
printf("Wrong election:%d\n", wrong);
}
问题解决方案:
由题目可知,需要统计3个候选人zhang、li、wang的得票数,每个选民会输入一个候选人的名字,如果选民输入的名字不是这3个候选人中的一个,则这张票将被视为废票。当选民投票结束时,程序应该自动显示每个候选人的得票结果以及废票数。利用结构体数组表示3个候选人的姓名和得票结果,并将最终的统计结果显示输出并写入文本文件中。
首先,定义结构体数组表示3个候选人的姓名和得票结果:
typedef struct Candidate {
char name[10];// 候选人姓名
int num;// 候选人得票数
}Candidate;
然后,定义一个main函数,其中声明一个结构体数组candidates用于存储候选人的姓名和得票结果,遍历所有的选民输入的选票,如果选票是有效的,则为相应的候选人增加得票数,否则增加废票数。最后,遍历统计结果,将各个候选人的得票数和废票数输出到终端和一个txt文件中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Candidate {
char name[10];// 候选人姓名
int num;// 候选人得票数
}Candidate;
int main()
{
Candidate candidates[3] = {{"zhang",0},{"li",0},{"wang",0}};// 定义结构体数组表示3个候选人的姓名和得票结果
int i, j, invalid = 0;//invalid用于记录废票的张数
char vote[10];//用于存储选民输入的选票
for (i = 0; i < 10; i++) {//遍历所有的选民输入的选票
printf("第%d个选民请投票:\n", i + 1);
scanf("%s", &vote);
for (j = 0; j < 3; j++) {//如果选票是有效的,则为相应的候选人增加得票数
if (strcmp(vote, candidates[j].name) == 0) {
candidates[j].num++;
break;
}
}
if (j == 3) {//否则增加废票数
invalid++;
}
}
FILE *fp = NULL;//将统计结果输出到一个txt文件中
fp = fopen("result.txt", "w");
if (fp == NULL) {
printf("无法打开文件\n");
exit(1);
}
for (i = 0; i < 3; i++) {//遍历统计结果,将各个候选人的得票数和废票数输出到终端和一个txt文件中
printf("%s 的得票数:%d\n", candidates[i].name, candidates[i].num);
fprintf(fp, "%s 的得票数:%d\n", candidates[i].name, candidates[i].num);
}
printf("废票数:%d\n", invalid);
fprintf(fp, "废票数:%d\n", invalid);
fclose(fp);
return 0;
}