c语言结构体

出一期教学吧
结构体==套娃。
1.结构体定义

//结构体入门 
#include<stdio.h>
//结构体定义
struct Student
{
	char cName[20];
	char cSex;
	int iGrade;
}student1={"hanXue",'W',3};
//student1和下面的student2都是这个结构体类型的变量;
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("Grand:%d\n",student1.iGrade);

	//将第二个结构体中的数据输出	
	printf("the student2's information:\n");
	printf("Name: %s\n",student2.cName);
	printf("Sex:%c\n",student2.cSex);
	printf("Grand:%d\n",student2.iGrade);
	return 0;
}

在这里插入图片描述

2.结构体数组

//结构体数组

#include<stdio.h>

struct Student
{
	char cName[20];
	int iNumber;
	char cSex;
	int iGrade;
}student[5]={{"Wangjiasheng",12062212,'M',3},
			 {"Yulongjiao",12062213,'W',3},
			 {"Jiangxuehua",12062214,'W',3},
			 {"Zhangmeng",12062215,'W',3},
			 {"Hanliang",12062216,'W',3}};
			 
int main()
{
	int i;
	for(i=0;i<5;i++)
	{
		printf("NO%d student:\n",i+1);
	 
		printf("Name:%s,Number:%d\n",student[i].cName,student[i].iNumber);
		printf("Sex:%c,Grade:%d\n",student[i].cSex,student[i].iGrade);
		printf("\n");
	}
	return 0;
 } 
 

在这里插入图片描述
3.结构体指针
读五遍书不如动手敲一遍。

//结构体指针 
#include<stdio.h>

int main()
{
	struct Student{
		char cName[20];
		int iNumber;
		char cSex;
		int iGrade; 
	}student={"SuYuQun",12061212,'W',3};
	
	struct Student* pStruct;
	pStruct=&student;
	printf("----the studet's information----\n");
	//以下三种效果是等效的 
	//student.成员名
	//(*pStudent).成员名
	//pStudent.成员名 
	scanf("%s",&student.cName); 
	printf("Name:%s\n",student.cName);//用结构体变量引用 
	printf("Name:%s\n",(*pStruct).cName);//用指针引用 
	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;
 } 

4.结构体数组指针

#include<stdio.h>

struct Student{
	char cName[20];
	int iNumber;
	char cSex;
	int iGrade;
}student[5]={{"Wangjiasheng",12062212,'M',3},
			 {"Yulongjiao",12062213,'W',3},
			 {"Jiangxuehua",12062214,'W',3},
			 {"Zhangmeng",12062215,'W',3},
			 {"Hanliang",12062216,'W',3}};
			 
int main()
{
	struct Student* pStruct;
	int index;
	pStruct=student;//数组名就是首元素的地址
	for(index=0;index<5;index++,pStruct++)
	{
		printf("NO%d student:\n",index+1);
	 
		printf("Name:%s,Number:%d\n",pStruct->cName,pStruct->iNumber);
		printf("Sex:%c,Grade:%d\n",pStruct->cSex,pStruct->iGrade);
		printf("\n");
	}
}

5.使用结构体变量作为函数参数

//使用结构体变量作为函数参数 

#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;
}

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);
	stu->fScore[2]=90.0f;
} 

int main()
{
	struct Student* pStruct=&student;
	 
	Display(pStruct);
	printf("Change English:%.2f\n",pStruct->fScore[2]);
	return 0;
}

7.包含结构的结构
结构体中的结构体==套娃中套娃

//包含结构的结构
#include<stdio.h>

struct data
{
	int year;
	int month;
	int day;
}; 
 
struct student
{
	char name[20];
	int num;
	char sex;
	struct data 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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值