C语言基础之结构体三

165 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第四天,点击查看活动详情

结构体与共用体

前言

接上篇,继续学习结构体~

结构体数组的初始化

  • 结构体整体空间是占用空间最大的成员(的类型)所占字节数的整数倍。

  • 结构体数组要在定义时初始化,先定义再赋初值是错误的

  • 结构体数组初始化由两种方式:

  1. 第一种,在创建结构体的时候就定义数组
#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"}
    };
  1. 先定义结构体,在声明结构体数组
//第二种
struct student{
    int num;
    ```
};
struct student str[]{{```},{```},{```}};

实践一下

下面举个栗子来加深对结构体初始化的认识吧

题目要求:对动画片的评选投票统计程序。设有5个候选动画片,每次输入一个得票的候选动画片的名字,要求最后输出各个动画片得票结果以及获奖动漫。

思路分析

  1. 首先定义一个结构体数组,用来存放候选动画片以及投票数

  2. 判断输入的动画片名是否与结构体数组的名字相同,若相同,则该动画片票数加一,若不相同,则视为废票,不加一。

  3. 最后在用一个函数指针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;
}

运行结果

image.png

是不是也没有那么难啊~

声明

小编是跟着b站上的小甲鱼视频学习的,希望每天都能进步一点点!

链接附上:C语言学习之小甲鱼视频链接