结构学习NO.1

本文详细介绍了C语言中的结构体,包括结构体的定义、变量的声明与初始化、结构体的嵌套以及结构体变量的引用和整体赋值。通过示例解释了如何创建和操作结构体,例如用于表示学生的数据结构,并展示了如何找到平均分最高的学生信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构:

是C语言中一种新的结构数据类型,它能够把有内在联系的不同类型的数据汇聚成一个整体,使它们互相关联。结构类型是由用户根据需要,按规定的格式自行定义的数据类型。

结构类型定义的一般形式:

struct 结构名
{
   类型名 结构成员名1;
   类型名 结构成员名2;
   。。。
   类型名 结构成员名n;
};

大括号内的内容是结构所包括的结构成员,也叫结构分量。大括号中定义的成员信息被聚合成了一整体并形成了一个新的数据类型。

关键词struct和它后面的结构名一起组成一个新的数据类型名。结构的定义以分号结束。在c语言中把结构的定义看成一条语句。

例子:(平面的点坐标)

struct point
{
	double x;
	double y;
};

结构变量的定义以及初始化:

1.单独定义:

指先定义一个结构类型,在定义这种结构类型的变量。

关键字struct和结构名student必须联合使用,因为它们合起来表示一个数据类型名。

例子:

struct student
{
	int num;
	char name[10];
	int computer,ehglish,math;
	double average;
};


struct student max,stu;

2.混合定义:

指在定义结构类型的同时定义结构变量。

例:

struct student
{
	int num;
	char name[10];
	int computer,ehglish,math;
	double average;
}s1,s2;

这种方式的本质与方法1是一样的,都是即定义了结构类型,也定义了结构变量。

3.无类型名定义:

定义时省略结构名。但由于没有给出结构名,在此定义语句后无法在定义这个类型的其他结构变量。

例:

struct 
{
	int num;
	char name[10];
	int computer,ehglish,math;
	double average;
}s1,s2;

结构变量的初始化:

struct student stu={102,“zhang",78,79,89}

结构类型变量的存储布局按其类型定义中成员的先后顺序排列。

结构的嵌套定义:

struct address
{
	char city[10];
	char street [10];
	int zip;
};
struct nest_student
{
	int num;
	char name[10];
	struct adderss addr;
	int competer,math,english;
	double average;
};

结构类型struct nest_student的成员变量addr被定义成结构类型struct address,而struct address中又含有三个成员,即一个结构的成员被定义成另一个结构类型。使成员数据被进一步细分。

结构变量的使用:

1.结构变量的引用:

使用结构成员操作符 ‘.' 来引用结构成员,格式为:

结构变量名.结构成员名

结构成员运算符的优先级属最高级别。

2.结构变量的整体赋值:

如果两个结构变量具有相同的类型,则允许将一个结构变量的值直接赋给另一个结构变量。这是结构中唯一的整体操作方式。

s1=s2;
等价于:
s2.num=s1.num;
s2.math=s1.num ;
...
s2.average=s1.average;

结构变量代码:输出平均分最高的学生信息:

#include<stdio.h>

struct student
{
	int num;
	char name[10];
	int computer,ehglish,math;
	double average;
};
int main(void)
{
	int i,n;
	struct student max,stu;
	printf("enter n: ");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		printf("No %d:",i);
		scanf("%d%s%d%d%d",&stu.num,stu.name,&stu.computer,&stu.ehglish ,&stu.math  );
		stu.average =(stu.computer +stu.ehglish +stu.math )/3;
		if(i==1)
		{
			max =stu ;
		}
		if(stu.average >max.average )
		{
			max=stu;
		}
	}
	printf("num:%d,name:%s,average:%.2lf",max.num ,max.name ,max.average );
	
	
 } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值