编程统计候选人的得票数。

设有3个候选人zhang、li、wang(候选人姓名不区分大小写),10个选民,选民每次输入一个得票的候选人的名字,若选民输错候选人姓名,则按废票处理。选民投票结束后程序自动显示各候选人的得票结果和废票信息。要求用结构体数组candidate表示3个候选人的姓名和得票结果。
输入提示:"Input vote %d:"
输入用gets();;
输出提示:"Election results:\n"
输出格式为:"%8s:%d\n","Wrong election:%d\n"

例如:
Input vote 1:li
Input vote 2:li
Input vote 3:Zhang
Input vote 4:WANG
Input vote 5:zhang
Input vote 6:Wang
Input vote 7:Zhang
Input vote 8:wan
Input vote 9:li
Input vote 10:lii
Election results:
      li:3
   zhang:3
    wang:2
Wrong election:2

以下是对于这道题的解答,希望大家喜欢,注意我这里与原题不一样的点在于,我将读取(结构体初始化)候选人的步骤做成了一个函数,你可以根据你的需求选择是否使用.

// 候选人结构体定义  
struct candidate
{
	char name[20];// 候选人名  
	int count;// 票数  
};

// 输入候选人和他们的票数  
// 传入一个空的候选人表格和人数  
void input_cand(struct candidate* p, int n)
{
	for (int i = 0; i < n; i++)
	{
		scanf("%s %d", &p[i].name, &p[i].count);
		getchar();  // 清除输入缓冲区中的换行符  
	}
}

// 统计选票  
// 传入候选人表格、人数、选票给谁(名字)、错误信箱(地址)  
void count_vote(struct candidate* p, int n, char* str, int* wrong)
{
	tran_str(str);// 将选票转为小写  
	for (int i = 0; i < n; i++)
	{
		if (strcmp(str, p[i].name) == 0)// 如果选票与候选人名字相同  
		{
			(p[i].count) += 1;  // 对应的票数加1  
			return;// 退出函数  
		}
	}
	(*wrong) += 1;// 如果之前没有找到对应的票,那么就是错误的  
}

int main()
{
	char vote[20];
	int wrong = 0;
	struct candidate list[3];  // 初始化候选人列表  
	input_cand(list, 3);  // 输入候选人及其票数  
	for (int i = 1; i < 11; i++)  // 循环10次进行投票  
	{
		printf("Input vote %d:", i);
		fgets(vote, 20, stdin);  // 从标准输入读取选票  
		vote[strlen(vote) - 1] = '\0';  // 删除换行符,确保选票匹配正确  
		count_vote(list, sizeof(list) / sizeof(list[0]), vote, &wrong);  // 统计选票并计算错误次数  
	}
	printf("Election results:\n");  // 输出选举结果  
	printf("      li:%d\n", list[0].count);  // 输出候选人li的票数  
	printf("   zhang:%d\n", list[2].count);  // 输出候选人zhang的票数(注意索引,因为数组是从0开始的)  
	printf("    wang:%d\n", list[1].count);  // 输出候选人wang的票数  
	printf("Wrong election:%d\n", wrong);  // 输出错误的选举次数  
	return 0;
}

如果你要更全面一点,可以将选民个数,设为动态,对于候选人信息的输出也可以根据结构体中的数据而变化,这些都比较容易实现.

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值