在C语言中,选班长的方法可以有多种,具体取决于你想要的选举制度和程序复杂度。以下是几种常见的方法:
方法一:基于投票数的选举
定义一个结构体来存储每个学生的姓名和票数。
输入每个学生的票数,并存储在结构体数组中。
按照票数从高到低排序,输出票数最多的学生姓名。
```c
include include struct person { char name; int count; }; int search_person(struct person p[], char *name, int n) { for (int i = 0; i < n; i++) { if (strcmp(p[i].name, name) == 0) { return i; } } return -1; } void new_person(struct person p[], char *name, int n) { strcpy(p[n].name, name); p[n].count = 1; } int main() { int n; printf("输入学生人数: "); scanf("%d", &n); struct person p = {0, 0}; int i, k; char name; for (i = 0; i < n; i++) { printf("输入第%d张选票: ", i + 1); scanf("%s", name); int index = search_person(p, name, n); if (index == -1) { new_person(p, name, n); k = 0; } else { p[index].count++; k = index; } for (k = k - 1; k >= 0; k--) { if (p[k].count > p[k + 1].count) { int temp = p[k].count; p[k].count = p[k + 1].count; p[k + 1].count = temp; } } printf("姓名%s, 票数:%d\n", p[i].name, p[i].count); } return 0; } ``` 方法二:基于轮流的选举 定义一个数组来存储所有候选人。 通过轮流的方式逐个淘汰票数最少的候选人,直到只剩下一个候选人。 ```c include int select() { int i = 0; int loop = 0; int loopSize = 2; int len = 5; int men; int out = 0; int start = 2; for (i = 0; i < len; i++) { men[i] = i + 1; } i = start - 1; while (out < len - 1) { if (men[i] != 0) { loop++; } if (loop == loopSize) { men[i] = 0; printf("现在出局的人是: men[%d]: %d\n", i, men[i]); out++; printf("现在已经淘汰了%d个人\n", out); loop = 0; } i++; if (i == len) { i = 0; } } for (i = 0; i < len; i++) { if (men[i] != 0) { printf("班长是: men[%d]: %d\n", i, men[i]); return men[i]; } } return 0; } int main() { int len = 5; int men = {1, 1, 1, 1, 1}; int result = select(); printf("当选班长是: %d\n", result); return 0; } ``` 方法三:基于意见传递的选举 定义一个结构体来存储每个学生的姓名和收到的票数。 输入每个学生的意见,并统计每个学生的票数。