出一期教学吧
结构体==套娃。
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;
}