初识结构体

本文介绍了C语言中的结构体,包括如何定义、初始化及访问结构体成员。接着讲解了结构体数组的概念和使用示例,展示了如何操作数组中的结构体元素。最后,阐述了枚举类型,包括枚举的定义、赋值以及如何在实际场景中使用枚举。通过示例代码详细解释了结构体和枚举在程序设计中的应用。
摘要由CSDN通过智能技术生成

一.什么是结构体

在c语言中,可以用结构体来存放一组不同类型的数据。结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都 称为结构体的成员。

结构体和数组类似,也是一组数据的集合,整体使用没有太大的意义,数组使用下标[]来获取单个元素,而结构体使用点号.来获取单个成员。
例如:
#include<stdio.h>
	int main()
	{
	struct{
		char *name;//姓名
		int num;//学号
		int age;//年龄
		char group;//所在小组
		float score;//成绩
	}stul;
	//给结构体成员赋值
	stul.name="Tom";
	stul.num=12;
	stul.age=18;
	stul.group='A';
	stul.score=136.5;
	//读取结构体成员的值 
	printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.f!\n",stul.name,stul.num,stul.age,stul.group,stul.score);
	return 0;			
}

运行结果是:

除了可以对成员进行逐一赋值,也可以定义时整体赋值:

#include<stdio.h>
	int main()
	{
	struct stu{
		char *name;//姓名
		int num;//学号
		int age;//年龄
		char group;//所在小组
		float score;//成绩
	}stu1={"Tom",12,18,'A',136.5};
	//读取结构体成员的值 
	printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.f!\n",stu1.name,stu1.num,stu1.age,stu1.group,stu1.score);
	return 0;			
}

运行结果如下:

 如图,运行结果是一样的。

二.结构体数组

结构体数组是指数组中的每个元素都是一个结构体。

在C语言中,定义结构体数组和定义结构体变量的方法类似,结构体数组在定义时也可以初始化,当对数组中全部元素赋值时,也可以不给出数组长度;

结构体数组的使用也很简单,例如,获取 Wang ming 的成绩:
class[4].score;
修改 Li ping 的学习小组:
class[0].group = 'B';
例如:
计算全班学生的总成绩、平均成绩、140分以下的人数:

#include<stdio.h>
struct{
	char *name;//姓名
	int num;//学号
	int age;//年龄
	char group;//所在小组 
	float score;//成绩
}class[]={
	{"Li ping",5,18,'C',145.0},
	{"Zhang ping",4,19,'A',130.5},
	{"He fang",1,18,'A',148.5},
	{"Cheng ling",2,17,'F',139.0},
	{"Wang ming",3,17,'B',144.5}
};
int main()
{
	int i,num_140=0;
	float sum=0;
	for(i=0;i<5;i++)
	{
		sum +=class[i].score;
		if(class[i].score<140)
		num_140++;
	}
	printf("sum=%.2f\naverage=%.2f\nnum_140=%d\n", sum, sum/5, num_140);
	return 0;
}

运行结果如下:

三.枚举

枚举(Enum)类型能够列出所有可能的取值,并给它们取一个名字。

Enum是一个新的关键字,专门用来定义枚举类型;

枚举类型的定义形式为:

enum typeName{ valueName1, valueName2, valueName3, ...... };

例如,列出一个星期有几天:

enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
枚举值默认从 0 开始,往后逐个加1递增,可以只给第一个值赋值,同时也可以在定义枚举类型的时候定义变量:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
或:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;
例如:
判断用户输入的是星期几:
#include <stdio.h>
int main(){
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
scanf("%d", &day);
switch(day){
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
case Fri: puts("Friday"); break;
 case Sat: puts("Saturday"); break;
 case Sun: puts("Sunday"); break;
default: puts("Error!");
 }
 return 0;
 }

例如输入五,结果如下:

注意:

(1) 枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。
(2) Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值