C语言~结构体


为了使规模较大的程序更便于修改和使用,常常将结构体类型的声明放在一个头文件中,这样在其他源文件中如果需要使用该结构体类型则可以用 #include 命令将该头文件包含到源文件中。

1、结构体变量引用

#include<stdio.h>

struct Product				/*声明结构*/
{
	char cName[10];			/*产品的名称*/
	char cShape[20];		/*形状*/
	char cColor[10];		/*颜色*/
	int	 iPrice;			/*价格*/
	char cArea[20];			/*产地*/
};			

int main()
{
	struct Product product1;			/*定义结构体变量*/

	printf("please enter product's name\n");	/*信息提示*/
	scanf("%s",&product1.cName);	/*输出结构成员*/

	printf("please enter product's shape\n");/*信息提示*/
	scanf("%s",&product1.cShape);	/*输出结构成员*/

	printf("please enter product's color\n");/*信息提示*/
	scanf("%s",&product1.cColor);	/*输出结构成员*/

	printf("please enter product's price\n");/*信息提示*/
	scanf("%d",&product1.iPrice);	/*输出结构成员*/

	printf("please enter product's area\n");/*信息提示*/
	scanf("%s",&product1.cArea);	/*输出结构成员*/

	printf("Name: %s\n",product1.cName);	/*将成员变量输出*/
	printf("Shape: %s\n",product1.cShape);
	printf("Color: %s\n",product1.cColor);	
	printf("Price: %d\n",product1.iPrice);
	printf("Area: %s\n",product1.cArea);

	return 0;
}

输出结果:
在这里插入图片描述

2、结构体类型初始化

#include<stdio.h>

struct Student					/*学生结构*/
{
	char cName[20];				/*姓名*/
	char cSex;					/*性别*/
	int iGrade;					/*年级*/
} student1={"HanXue",'W',3};					/*定义变量并设置初始值*/


int main()
{
	struct Student student2={"WangJiasheng",'M',3};/*定义变量并设置初始值*/
	
	/*将第一个结构体中的数据输出*/
	printf("the student1's information:\n");
	printf("Name: %s\n",student1.cName);
	printf("Sex: %c\n",student1.cSex);
	printf("Grade: %d\n",student1.iGrade);
	/*将第二个结构体中的数据输出*/
	printf("the student2's information:\n");
	printf("Name: %s\n",student2.cName);
	printf("Sex: %c\n",student2.cSex);
	printf("Grade: %d\n",student2.iGrade);
	return 0;
}

输出结果:
在这里插入图片描述

3、结构体数组

输出学生信息

#include<stdio.h>

struct Student								/*学生结构*/
{
	char cName[20];						/*姓名*/
	int  iNumber;						/*学号*/
	char cSex;							/*性别*/
	int iGrade;								/*年级*/
} student[5]={{"WangJiasheng",12062212,'M',3},
				{"YuLongjiao",12062213,'W',3},
				{"JiangXuehuan",12062214,'W',3},
				{"ZhangMeng",12062215,'W',3},
				{"HanLiang",12062216,'M',3}};	/*定义数组并设置初始值*/

int main()
{
	int i;					/*循环控制变量*/
	for(i=0;i<5;i++)		/*使用for进行5次循环*/
	{
		printf("NO%d student:\n",i+1);		/*首先输出学生的名次*/
		printf("Name: %s, Number: %d\n",student[i].cName,student[i].iNumber);     /*使用变量i做下标,输出数组中的元素数据*/
		printf("Sex: %c, Grade: %d\n",student[i].cSex,student[i]. iGrade);
		printf("\n");		/*空格行*/
	}
	return 0;  
}

输出结果:
在这里插入图片描述

4、指向结构体变量的指针

一个指向变量的指针表示的是变量所占内存中的起始地址。如果一个指针指向结构体变量,那么该指针指向的是结构体变量的起始地址。

#include<stdio.h>

struct Student								/*学生结构*/
	{
		char cName[20];							/*姓名*/
		int  iNumber;							/*学号*/
		char cSex;								/*性别*/
		int iGrade;								/*年级*/
	}student={"SuYuQun",12061212,'W',2};		/*对结构变量进行初始化*/


int main()
{
	
	struct Student* pStruct;			/*定义结构体类型指针*/
	pStruct=&student;					/*指针指向结构体变量*/
	printf("-----the student's information-----\n");	/*消息提示*/
	printf("Name: %s\n",(*pStruct).cName);		/*使用指针引用变量中的成员*/
	printf("Number: %d\n",(*pStruct).iNumber);
	printf("Sex: %c\n",(*pStruct).cSex);
	printf("Grade: %d\n",(*pStruct).iGrade);

	return 0;
}

输出结果:

在这里插入图片描述
注意:声明结构的位置可以放在 main 函数外也可以放在 main 函数内。

5、指向结构体数组的指针

 #include<stdio.h>

struct Student								/*学生结构*/
{
	char cName[20];							/*姓名*/
	int  iNumber;							/*学号*/
	char cSex;								/*性别*/
	int iGrade;								/*年级*/
} student[5]={{"WangJiasheng",12062212,'M',3},
		{"YuLongjiao",12062213,'W',3},
		{"JiangXuehuan",12062214,'W',3},
		{"ZhangMeng",12062215,'W',3},
		{"HanLiang",12062216,'M',3}};			/*定义数组并设置初始值*/


int main()
{
	struct Student* pStruct;
	int index;
	pStruct=student;
	for(index=0;index<5;index++,pStruct++)
	{
		printf("NO%d student:\n",index+1);			/*首先输出学生的名次*/
		/*使用变量index做下标,输出数组中的元素数据*/
		printf("Name: %s, Number: %d\n",pStruct->cName,pStruct->iNumber);
		printf("Sex: %c, Grade: %d\n",pStruct->cSex,pStruct->iGrade);
		printf("\n");						/*空格行*/
	}
	return 0;
}

输出结果:
在这里插入图片描述

6、结构体做为函数参数

#include<stdio.h>

struct Student								/*学生结构*/
{
	char cName[20];							/*姓名*/
	float fScore[3];						/*分数*/
}student={"SuYuQun",98.5f,89.0,93.5f};									/*定义变量*/

void Display(struct Student stu)	/*形参为结构体变量*/
{
	printf("-----Information-----\n");	/*提示信息*/
	printf("Name: %s\n",stu.cName);		/*引用结构成员*/
	printf("Chinese: %.2f\n",stu.fScore[0]);
	printf("Math: %.2f\n",stu.fScore[1]);
	printf("English: %.2f\n",stu.fScore[2]);
	/*计算平均分数*/
	printf("Average score:%.2f\n",(stu.fScore[0]+stu.fScore[1]+stu.fScore[2])/3);
	
}

int main()
{
	Display(student);	/*调用函数,结构变量作为实参进行传递*/
	return 0;
}

输出结果:
在这里插入图片描述

7、包含结构的结构

结构体嵌套

#include<stdio.h>

struct date								/*时间结构*/
{
	int year;								/*年*/
	int month;								/*月*/
	int day;								/*日*/
};

struct student								/*学生信息结构*/
{
	char name[30];							/*姓名*/
	int num;								/*学号*/
	char sex;								/*性别*/
	struct date birthday;						/*出生日期*/
}student={"SuYuQun",12061212,'W',{1986,12,6}};	/*为结构变量初始化*/

int main()
{
	printf("-----Information-----\n");
	printf("Name: %s\n",student.name);	/*输出结构成员*/
	printf("Number: %d\n",student.num);
	printf("Sex: %c\n",student.sex);
	printf("Birthday: %d,%d,%d\n",student.birthday.year,
			student.birthday.month,student.birthday.day);/*将成员结构体数据输出*/

	return 0;
}

输出结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值