一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第四天,点击查看活动详情。
结构体与共用体
前言
接上篇,继续学习结构体~
结构体数组的初始化
-
结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。
-
结构体数组要在定义时初始化,先定义再赋初值是错误的
-
结构体数组初始化由两种方式:
- 第一种,在创建结构体的时候就定义数组
#include<stdio.h>
int main(){
struct student{
int num;
char *name;
char sex;
float score;
}stu[2] = {
{101,"LiLin",'M',18,87.5,"Beijing"},
{102,"zhang","F",19,99,"Shanghai"}
};
- 先定义结构体,在声明结构体数组
//第二种
struct student{
int num;
```
};
struct student str[]{{```},{```},{```}};
实践一下
下面举个栗子来加深对结构体初始化的认识吧
题目要求:对动画片的评选投票统计程序。设有5个候选动画片,每次输入一个得票的候选动画片的名字,要求最后输出各个动画片得票结果以及获奖动漫。
思路分析
-
首先定义一个结构体数组,用来存放候选动画片以及投票数
-
判断输入的动画片名是否与结构体数组的名字相同,若相同,则该动画片票数加一,若不相同,则视为废票,不加一。
-
最后在用一个函数指针winner()判断出得票最高的动画片。
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUM 5
struct person{
char name[20];
int count;
}candidate[NUM] = {
{"大耳朵图图",0},
{"黑猫警长",0},
{"蜡笔小新",0},
{"虹猫蓝兔",0},
{"熊出没",0}
};
char *winner();
int main(){
int i, j;
char candidate_name[20];
printf("------------------------------------------\n");
printf("欢迎进入最佳忆童年动画片的评选投票系统:\n\n");
printf("------------------------------------------\n");
printf("候选动漫有大耳朵图图,黑猫警长,蜡笔小新,虹猫蓝兔,熊出没\n\n");
for(i = 1; i <= 10; i++){ //假定有十个评委
printf("第 %2d 位投票,请写下要支持的动漫名字:",i);
scanf("%s",candidate_name);
for(j = 0; j < NUM; j++){
if( 0 == strcmp(candidate_name,candidate[j].name)){
candidate[j].count++;
}
}
}
printf("\n");
for(i = 0 ; i < 5; i++){
printf("%s 动漫得票数为:%d\n",candidate[i].name,candidate[i].count);
}
printf("\n");
printf("本次年度最佳忆童年动画片为:%s",winner());
printf("\n");
system("pause");
}
char *winner(){
int i = 0, winner = i;
for(i = 1; i < NUM; i++){
if(candidate[i].count > candidate[winner].count){
winner = i;
}
}
return candidate[winner].name;
}
运行结果
是不是也没有那么难啊~
声明
小编是跟着b站上的小甲鱼视频学习的,希望每天都能进步一点点!
链接附上:C语言学习之小甲鱼视频链接