struct candidate { char name[20]; int count; }c[3] = {"li",0, "zhang",0, "wang",0}; int main() { int i, j, flag , wrong = 0; char name[20]; for (i=0; i<NUM_ELECTORATE; i++) { scanf("%s", name); flag = 1; for (j=0; j<NUM_CANDIDATE; j++) if ( 5 分 ) { 5 分 ; flag = 0; } if (flag) wrong++; /* 废票计数 */ } printf("Election results:\n"); for (i=0; i<NUM_CANDIDATE; i++) printf("%s:%d\n", 5 分 ); printf("Wrong election:%d\n", wrong); return 0; }
时间: 2024-01-21 13:03:08 浏览: 73
这段代码实现了一个简单的计票程序,用结构体数组 `c` 存储了三个候选人的姓名和得票数。程序通过循环读取选民输入的候选人姓名,统计每位候选人的得票数,最后输出各候选人的得票数和废票数。
以下是对代码的逐行解析:
```
struct candidate {
char name[20];
int count;
} c[3] = {"li",0, "zhang",0, "wang",0};
```
定义了一个结构体 `candidate`,包含候选人的姓名和得票数。然后定义了一个结构体数组 `c`,用来存储三个候选人的姓名和得票结果。初始化了每个候选人的得票数为 0。
```
int main() {
int i, j, flag , wrong = 0;
char name[20];
for (i=0; i<NUM_ELECTORATE; i++) {
scanf("%s", name);
flag = 1;
for (j=0; j<NUM_CANDIDATE; j++)
if (strcmp(name, c[j].name) == 0) {
c[j].count++;
flag = 0;
}
if (flag)
wrong++; /* 废票计数 */
}
printf("Election results:\n");
for (i=0; i<NUM_CANDIDATE; i++)
printf("%s:%d\n", c[i].name, c[i].count);
printf("Wrong election:%d\n", wrong);
return 0;
}
```
主函数中,定义了循环计数器 `i`、`j`,以及两个标志变量 `flag` 和 `wrong`。其中,`flag` 表示当前投票是否有效,`wrong` 表示废票数量。
然后通过循环读取选民输入的候选人姓名,将 `flag` 设为 1,表示该票作废。然后遍历候选人数组 `c`,如果输入的候选人姓名和某个候选人的姓名一致,将该候选人的得票数加 1,并将 `flag` 设为 0,表示该票有效。最后,如果 `flag` 为 1,说明该票作废,将废票计数 `wrong` 加 1。
循环结束后,输出候选人的得票结果和废票信息。遍历候选人数组 `c`,输出每个候选人的姓名和得票数。最后输出废票计数 `wrong` 即可。
需要注意的是,本代码中的 `NUM_ELECTORATE` 和 `NUM_CANDIDATE` 没有定义,需要根据实际情况进行定义。同时,由于输入的候选人姓名可能包含空格,因此建议使用 `scanf("%[^\n]", name)` 读取选民输入的候选人姓名,以避免输入错误。
阅读全文