编写程序,利用结构体对候选人得票情况进行统计。设有3个候选人,最终1人当选。今有10人参与投票,从键盘先后输入这10个人所投候选人的名字。要求最后输出各个候选人得票结果。
时间: 2023-05-31 08:19:46 浏览: 181
结构体数组应用举例-C++结构体struct
### 回答1:
可以定义一个结构体来表示候选人的得票情况,包括候选人的名字和得票数。然后,可以定义一个数组来存储3个候选人的得票情况。最后,从键盘输入10个人所投的候选人的名字,根据输入的名字更新候选人的得票数。最终,输出各个候选人的得票结果。
以下是一个示例代码:
```
#include <stdio.h>
#include <string.h>
#define NUM_CANDIDATES 3
struct candidate {
char name[20];
int votes;
};
int main() {
struct candidate candidates[NUM_CANDIDATES] = {
{"Candidate 1", },
{"Candidate 2", },
{"Candidate 3", }
};
char name[20];
for (int i = ; i < 10; i++) {
printf("Please enter the name of the candidate voted by person %d: ", i+1);
scanf("%s", name);
for (int j = ; j < NUM_CANDIDATES; j++) {
if (strcmp(name, candidates[j].name) == ) {
candidates[j].votes++;
break;
}
}
}
printf("The vote results are:\n");
for (int i = ; i < NUM_CANDIDATES; i++) {
printf("%s: %d votes\n", candidates[i].name, candidates[i].votes);
}
return ;
}
```
运行程序后,依次输入10个人所投的候选人的名字,最终输出各个候选人的得票结果。
### 回答2:
借助结构体来处理候选人得票情况,可能是解决这个问题的最佳方法了。结构体允许将不同类型的变量打包到一起,以便将来更方便地提取和处理其中的信息。
我们可以先定义一个结构体类型,用于存储候选人的名字和得票数:
```c
typedef struct {
char name[20];
int votes;
} Candidate;
```
接着,我们声明一个长度为3的Candidate数组,代表我们的三个候选人:
```c
Candidate candidates[3] = {
{"John", 0},
{"Jane", 0},
{"Jack", 0}
};
```
以上代码将初始化每个候选人的名字和得票数,得票数都初始化为0。
然后,我们可以通过循环来读入每个投票者对应的候选人,并更新候选人的票数:
```c
for (int i = 0; i < 10; i++) {
char name[20];
printf("请输入第 %d 个投票者的候选人名字:", i + 1);
scanf("%s", name);
for (int j = 0; j < 3; j++) {
if (strcmp(candidates[j].name, name) == 0) {
candidates[j].votes++;
break;
}
}
}
```
以上代码将首先读入每个投票者选择的候选人名字,然后它会在数组candidates中遍历查找相应的结构体,如果找到了对应的候选人,就将其得票数加1。如果没有找到,就不做任何操作。
最终,我们可以通过循环遍历数组candidates,输出每个候选人的名字和得票数:
```c
printf("各候选人得票情况如下:\n");
for (int i = 0; i < 3; i++) {
printf("%s : %d 票\n", candidates[i].name, candidates[i].votes);
}
```
以上代码将输出一个报告,其中包含每个候选人的名字和得票数。从中,我们可以看到哪个候选人最终胜出了!
### 回答3:
这道题的基本思路是利用结构体来存储候选人的姓名和得票数,然后从键盘读入投票数据,统计每个候选人的得票情况。具体的实现步骤可以分为以下几个步骤:
第一步,定义结构体
我们可以定义一个结构体来存储候选人的名字和得票数,如下:
struct Candidate {
char name[20];
int votes;
};
第二步,初始化候选人信息
因为题目中已经告诉我们有3个候选人,所以我们可以先用一个数组来存储他们的信息,初始化每个候选人的得票数为0:
Candidate candidates[3] = {
{"Candidate A", 0},
{"Candidate B", 0},
{"Candidate C", 0}
};
第三步,读入投票数据
为了方便输入,我们可以用一个循环来从键盘读入每个人所投的候选人的名字,并将得票数加1:
for (int i = 0; i < 10; i++) {
char name[20];
printf("Please input the name of candidate voted by person %d: ", i+1);
scanf("%s", name);
for (int j = 0; j < 3; j++) {
if (strcmp(name, candidates[j].name) == 0) {
candidates[j].votes += 1;
}
}
}
第四步,输出各个候选人得票结果
最后我们可以用一个循环来输出每个候选人的姓名和得票数:
for (int i = 0; i < 3; i++) {
printf("Candidate %s: %d votes\n", candidates[i].name, candidates[i].votes);
}
最终的程序如下:
#include <stdio.h>
#include <string.h>
struct Candidate {
char name[20];
int votes;
};
int main() {
Candidate candidates[3] = {
{"Candidate A", 0},
{"Candidate B", 0},
{"Candidate C", 0}
};
for (int i = 0; i < 10; i++) {
char name[20];
printf("Please input the name of candidate voted by person %d: ", i+1);
scanf("%s", name);
for (int j = 0; j < 3; j++) {
if (strcmp(name, candidates[j].name) == 0) {
candidates[j].votes += 1;
}
}
}
for (int i = 0; i < 3; i++) {
printf("Candidate %s: %d votes\n", candidates[i].name, candidates[i].votes);
}
return 0;
}
阅读全文