利用c语言程序,有以下题目,目前土木专业4个班共87人,要选出一个同学作为“创新之星”,候选人有五人,请将五个人名字输入到字符数组,然后每人一票,即输入一个姓名,可以弃权不投票,最后打印五位候选人的姓名和票数。按照票数降序打印
时间: 2024-06-08 10:11:58 浏览: 32
好的,以下是利用C语言编写的程序,可以实现以上需求:
```c
#include <stdio.h>
#include <string.h>
#define MAX_CANDIDATES 5
#define MAX_NAME_LENGTH 20
#define TOTAL_STUDENTS 87
int main() {
char candidates[MAX_CANDIDATES][MAX_NAME_LENGTH];
int votes[MAX_CANDIDATES] = {0};
int total_votes = 0;
int i, j;
// 输入候选人姓名
printf("请输入%d个候选人的姓名:\n", MAX_CANDIDATES);
for (i = 0; i < MAX_CANDIDATES; i++) {
scanf("%s", candidates[i]);
}
// 进行投票
printf("请进行投票,每人一票,共%d人参选,可以弃权不投票。\n", TOTAL_STUDENTS);
for (i = 0; i < TOTAL_STUDENTS; i++) {
char name[MAX_NAME_LENGTH];
printf("第%d位同学,请输入你的选票:\n", i + 1);
scanf("%s", name);
for (j = 0; j < MAX_CANDIDATES; j++) {
if (strcmp(name, candidates[j]) == 0) {
votes[j]++;
total_votes++;
printf("投票成功!\n");
break;
}
}
if (j == MAX_CANDIDATES) {
printf("输入的姓名不在候选人名单中,投票无效!\n");
}
}
// 打印候选人和票数
printf("最终的投票结果如下:\n");
for (i = 0; i < MAX_CANDIDATES; i++) {
printf("%s: %d票\n", candidates[i], votes[i]);
}
// 按票数降序打印
printf("按票数降序打印:\n");
for (i = 0; i < MAX_CANDIDATES-1; i++) {
for (j = i+1; j < MAX_CANDIDATES; j++) {
if (votes[i] < votes[j]) {
// 交换票数和姓名
int temp_votes = votes[i];
votes[i] = votes[j];
votes[j] = temp_votes;
char temp_name[MAX_NAME_LENGTH];
strcpy(temp_name, candidates[i]);
strcpy(candidates[i], candidates[j]);
strcpy(candidates[j], temp_name);
}
}
}
for (i = 0; i < MAX_CANDIDATES; i++) {
printf("%s: %d票\n", candidates[i], votes[i]);
}
return 0;
}
```
程序中使用了一个二维字符数组 `candidates` 来存储候选人的姓名,一个一维整型数组 `votes` 来存储每个候选人的票数,以及一个整型变量 `total_votes` 来记录总共的投票数。
程序首先让用户输入候选人的姓名,然后进行投票。在投票过程中,程序会依次询问每位同学的选票,如果输入的姓名不在候选人名单中,则投票无效。投票成功后,程序会将对应候选人的票数加 1,并更新总共的投票数。
投票结束后,程序会打印出每个候选人的姓名和票数。然后,程序会按照票数降序打印候选人的姓名和票数,以展示最终的投票结果。
阅读全文