采用结构体: Struct { Char code; //代号 Int score; //得分 }Candidates[N]; //候选人结构体数组 这里#define N 3; 采用二维数组,则行方向对应一张投票,列方向对应各候选人得分。 Candidate[M][N]; (1)输入部分 Char tmp[3]; //存放投票的中间变量 输入投票人数n; For(i=0;i<n;++i) //投票 { Scanf(“%s”,tmp); If(tmp[0]==tmp[1]||tmp[1]==tmp[2]||tmp[0]==tmp[2]) Printf(”该票无效!”); Else { Tmp[0]号候选人加5分; Tmp[1]号候选人加3分; Tmp[2]号候选人加2分; } } (2)统计部分 对候选人按照他们的得分排序(冒泡、插入、选择等),然后比较前两名得分是否相同。如果相同,则显示“重新投票”;否则显示三个候选者得分并输出“祝贺X当选冠军”,X为最高分候选者。C语言代码实现
时间: 2023-11-25 20:06:14 浏览: 65
c/c++结构体
好的,这是一个简单的C语言代码实现,实现了你所描述的投票和统计过程:
```c
#include <stdio.h>
#include <string.h>
#define N 3 // 候选人数
#define M 100 // 最大投票人数
// 候选人结构体
struct Candidate {
char code; // 代号
int score; // 得分
};
// 投票函数
void vote(struct Candidate candidates[N], int num) {
char tmp[3];
for (int i = 0; i < num; i++) {
scanf("%s", tmp);
// 判断是否有效
if (tmp[0] == tmp[1] || tmp[1] == tmp[2] || tmp[0] == tmp[2]) {
printf("该票无效!\n");
} else {
// 统计分数
candidates[tmp[0] - 'A'].score += 5;
candidates[tmp[1] - 'A'].score += 3;
candidates[tmp[2] - 'A'].score += 2;
}
}
}
// 排序函数
void sort(struct Candidate candidates[N]) {
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1 - i; j++) {
if (candidates[j].score < candidates[j + 1].score) {
struct Candidate tmp = candidates[j];
candidates[j] = candidates[j + 1];
candidates[j + 1] = tmp;
}
}
}
}
// 统计函数
void count(struct Candidate candidates[N]) {
sort(candidates);
// 判断是否需要重新投票
if (candidates[0].score == candidates[1].score) {
printf("重新投票!\n");
} else {
printf("得分排名:\n");
for (int i = 0; i < N; i++) {
printf("%c: %d分\n", candidates[i].code, candidates[i].score);
}
printf("祝贺%c当选冠军!\n", candidates[0].code);
}
}
int main() {
struct Candidate candidates[N] = {{'A', 0}, {'B', 0}, {'C', 0}};
int num;
printf("请输入投票人数:");
scanf("%d", &num);
printf("请输入投票结果(三个字母代号,中间用空格隔开):\n");
vote(candidates, num);
count(candidates);
return 0;
}
```
注意,这里用了一个结构体来表示候选人,其中包含代号和得分两个成员变量。同时,我们用了一个sort函数来对候选人按照得分进行排序。最后,我们在count函数中按照题目要求输出统计结果。
阅读全文