这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战
《算法笔记》2.8小节——C/C++快速入门->结构体(struct)的使用 问题 A: C语言11.1
题目描述
完成一个对候选人得票的统计程序。假设有3个候选人,名字分别为Li,Zhang和Fun。使用结构体存储每一个候选人的名字和得票数。记录每一张选票的得票人名,输出每个候选人最终的得票数。结构体可以定义成如下的格式: struct person { char name[20]; int count; }leader[3] = {“Li”, 0, “Zhang”, 0, “Fun”, 0};
输入
第一行有一个整数n,表示以下有n张选票信息将会输入。保证n不大于100。 以后的n行中,每一行包含一个人名,为选票的得票人。保证每一个人名都是Li,Zhang和Fun中的某一个。
输出
有三行,分别为Li,Zhang和Fun每人的得票数。格式为首先输出人名,其后输出一个冒号,最后输出候选人的得票数。 请注意行尾输出换行。
样例输入
10
Li
Li
Fun
Zhang
Zhang
Fun
Li
Fun
Zhang
Li
样例输出
Li:4
Zhang:3
Fun:3
示例代码
#include<iostream>
#include<string.h>
using namespace std;
int main(){
struct person {
char name[20];
int count;
}leader[3] = {"Li", 0,"Zhang",0,"Fun",0};
int n;
scanf("%d",&n);
char a[10];
for(int i=0;i<n;i++){
scanf("%s",&a);
for(int j=0;j<3;j++){
if(strcmp(leader[j].name,a)==0){
leader[j].count++;
}
}
}
for(int j=0;j<3;j++){
printf("%s:%d",leader[j].name,leader[j].count);
printf("\n");
}
return 0;
}
借鉴代码
#include<stdio.h>
#include<string.h>
int main()
{
struct person {
char name[20];
int count;
}leader[3] = {"Li",0,"Zhang",0,"Fun",0};
int n;
scanf("%d",&n) ;
char a[20];
for(int i=0;i<n;i++){
scanf("%s",&a);//此处若写成 gets(a); 上一句for的条件就得变成 i<=n; 还没明白为啥
for(int j=0;j<3;j++){
if(!strcmp(a,leader[j].name)) leader[j].count++;
}
}
for(int i=0;i<3;i++){
printf("%s:%d\n",leader[i].name,leader[i].count);
}
return 0;
}
结构体有关知识
结构体的定义
只有先完成结构体的定义,才能声明并使用结构体变量,正如只有确定了名片上要印什么内容,才能开始印刷名片。结构体的定义即是为了说明结构体变量要存储什么信息的过程。
C语言提供了关键字struct来定义一个结构,一般形式的结构定义为:
struct
结构名称 /*
也称结构标识*/
{
存储数据列表; /*
也称成员变量列表*/
}
;
注意 在定义结构时,一定不要忘记花括号后的分号,因为结构的定义是一条完整的语句,否则编译器会报错。
举例来说。
struct person
{
char name[20];
int age;
char email[50];
};
上述代码定义了一个结构person,这相当于将name、age和email这3个数据打包,统一管理,这样,person可以像int、double型变量一样。利用person声明person类型的结构体变量,每个person型结构体变量都包括name、age和email这3个数据成员。 声明结构体变量
以上面的person结构为例,定义完毕后,person就可以看成是一种类型,可以通过以下形式声明结构体变量zhangsan。
struct person zhangsan
;
注意区分person和zhangsan。person只是结构体定义,是种规范说明,编译器并不为其分配内存空间。而zhangsan是实实在在的结构体变量,占据一定的内存空间。
在定义结构体的同时也可以完成一个或多个结构体变量的声明。举例来说。
struct person
{
char name[20];
int age;
char email[50];
}zhangsan
,lisi
,wangwu
,*zhaoliu;
上述代码在定义结构体person的同时,一口气声明了3个结构体变量:zhangsan,lisi,wangwu,甚至还声明了一个指向person结构的指针zhaoliu。