五、投票程序 1、需求分析 实现键盘输入投票人数和投票结果,进行统计时实现排序功能,输出结果。 2、总体设计 该程序可以分为数据输入部分和统计部分。 3、详细设计 采用结构体: 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语言实现代码
时间: 2024-03-25 22:42:12 浏览: 117
下面是实现该投票程序的C语言代码:
```c
#include <stdio.h>
#define N 3
#define M 100
struct Candidate {
char code; //代号
int score; //得分
};
int main() {
struct Candidate candidates[N] = {
{'A', 0},
{'B', 0},
{'C', 0}
};
int candidate_scores[M][N] = {0};
int n, i, j, k, tmp;
printf("请输入投票人数:");
scanf("%d", &n);
for (i = 0; i < n; ++i) {
printf("请输入第%d票的投票结果:", i + 1);
for (j = 0; j < N; ++j) {
scanf("%d", &tmp);
if (tmp < 1 || tmp > N) {
printf("该票无效!\n");
j--;
} else {
candidate_scores[i][tmp - 1]++;
}
}
}
for (i = 0; i < N; ++i) {
for (j = 0; j < n; ++j) {
candidates[i].score += candidate_scores[j][i] == 0 ? 0 : (candidate_scores[j][i] == 1 ? 5 : (candidate_scores[j][i] == 2 ? 3 : 2));
}
}
// 冒泡排序
for (i = 0; i < N - 1; ++i) {
for (j = 0; j < N - i - 1; ++j) {
if (candidates[j].score < candidates[j + 1].score) {
tmp = candidates[j].score;
candidates[j].score = candidates[j + 1].score;
candidates[j + 1].score = tmp;
}
}
}
if (candidates[0].score == candidates[1].score) {
printf("重新投票!\n");
} else {
printf("候选人得分:\n");
for (i = 0; i < N; ++i) {
printf("%c:%d分\n", candidates[i].code, candidates[i].score);
}
printf("祝贺%c当选冠军!\n", candidates[0].code);
}
return 0;
}
```
程序中首先定义了一个结构体`Candidate`,用于存储每个候选人的代号和得分。然后定义了一个二维数组`candidate_scores`,用于存储每张投票中各个候选人得到的票数。接着,程序通过循环输入每张投票的结果,并将结果存储到`candidate_scores`中。在输入完成后,程序根据`candidate_scores`计算每个候选人的得分,并存储到`candidates`结构体数组中。
接下来,程序使用冒泡排序对`candidates`结构体数组按照得分进行排序。最后,程序判断前两名得分是否相同。如果相同,则显示“重新投票”,否则显示三个候选者得分并输出“祝贺X当选冠军”,其中X为最高分候选者。
注意程序中对用户输入的合法性进行了判断,如果用户输入的不是1、2、3中的一个,则视为该票无效。
阅读全文