/什么是结构体
1)不同类型的变量集合
2)结构体的目的是为了描述一个对象,一个对象有很多属性
为了表示这些属性就要用到不同的变量,而且变量不止一个
3)定义结构体
struct 结构体名
{
属性列表
};
比如;定义一个结构体,目的是为了描述一个工人
struct worker
{
char id[];
char name[];
char sex[];
int pay;
};这所定义的只是类型
定义结构体变量的方式
1:在定义结构体类型的时候,就定义结构体变量,相当于全局变量
2:在定义结构体类型之后,在定义结构体变量
3:可以定义结构体类型时,省略结构体类型名
4:可以通过typedef这个关键字为结构体取别名,且别名一般大写/
/*
#include<stdio.h>
typedef struct worker //这是在定义结构体类型
{
char id[10];
char name[10];
char sex[10];
int pay;
}WOR;
void main()
{
WOR w1 = { "001","小明","man",1200 }, w2 = { "002","小红","woman",1000 },w3;//w1,w2属性相同
w3 = w2;//整体赋值,赋值之后w2会把它的所有成员都赋给w3
printf("%s,%s,%s,%d\n", w1.id, w1.name, w1.sex, w1.pay);//只能分别输出不能整体输出
printf("%s,%s,%s,%d\n", w3.id, w3.name, w3.sex, w3.pay);
}
/
/
#include<stdio.h>
typedef struct worker
{
char id[10];
char name[10];
char sex[10];
int pay;
}WOR;
void output(WOR a[], int n)
{
int i;
printf("工号\t姓名\t性别\t工资\n");
for (i = 0; i < 6; i++)//a[i]代表一位工人
{
printf("%s\t%s\t%s\t%d\n", a[i].id, a[i].name, a[i].sex, a[i].pay);
}
}
void main()
{
WOR a[6] =
{
{ "0001","zhan","boy",1000 },
{ "0002","lisi","boy",1100 },
{ "0003","wanger","boy",1200 },
{ "0004","mazi","boy",1300 },
{ "0005","laoda","girl",10000 },
{ "0006","laoer","girl",12000 }
};
output(a, 6);
}
/
//编写一个函数目的是输出所有性别为男的员工
/
#include<stdio.h>
#include<string.h>
typedef struct worker
{
char id[10];
char name[10];
char sex[10];
int pay;
}WOR;
void output(WOR a[], int n)
{
int i;
printf("工号\t姓名\t性别\t工资\n");
for (i = 0; i < 6; i++)//a[i]代表一位工人
{
printf("%s\t%s\t%s\t%d\n", a[i].id, a[i].name, a[i].sex, a[i].pay);
}
}
void OutManWorker(WOR a[], int n)
{
int i;
printf("工号\t姓名\t性别\t工资\n");//输出标题
//访问数组a中每一个工人,如果发现性别是男的就输出这个男的信息
for (i = 0; i < n; i++)
{
if (strcmp(a[i].sex, "boy") == 0)
{
printf("%s\t%s\t%s\t%d\n", a[i].id, a[i].name, a[i].sex, a[i].pay);
}
}
}
void main()
{
WOR a[6] =
{
{ "0001","zhan","boy",1000 },
{ "0002","lisi","boy",1100 },
{ "0003","wanger","boy",1200 },
{ "0004","mazi","boy",1300 },
{ "0005","laoda","girl",10000 },
{ "0006","laoer","girl",12000 }
};
output(a, 6);//输出全部员工
printf("\n******************************\n");
OutManWorker(a, 6);//输出男员工
}
/
/
#include<stdio.h>
#include<string.h>
typedef struct worker
{
char id[10];
char name[10];
char sex[10];
int pay;
}WOR;
void output(WOR a[], int n)
{
int i;
printf("工号\t姓名\t性别\t工资\n");
for (i = 0; i < 6; i++)//a[i]代表一位工人
{
printf("%s\t%s\t%s\t%d\n", a[i].id, a[i].name, a[i].sex, a[i].pay);
}
}
//找男女员工
void OutSexWorker(WOR a[], int n,char *sex)//char sex[]==char *sex
{
int i;
printf("工号\t姓名\t性别\t工资\n");//输出标题
for (i = 0; i < n; i++)
{
if (strcmp(a[i].sex, sex) == 0)
{
printf("%s\t%s\t%s\t%d\n", a[i].id, a[i].name, a[i].sex, a[i].pay);
}
}
}
//找工资最高的员工
void max(WOR a[], int n)
{
WOR m = a[0];//假设第一个工人是最高工资的那个人
int i;
for (i = 1; i < n; i++)
{
if (m.pay < a[i].pay)//如果m的工资小于a[i],那就把a[i]赋给m
{
m = a[i];//整体赋值
}
}
printf("%s\t%s\t%s\t%d\n", m.id, m.name, m.sex, m.pay);
}
//找出所有工资大于平均工资的员工信息
void Aver(WOR a[], int n)
{
float aver;
int sum = 0, i;//求总工资
for (i = 0; i < n; i++)
{
sum += a[i].pay;
}
//求平均工资
aver = (float)sum / n;
for (i=0;i<n;i++)//访问每一个员工
{
if (a[i].pay>aver)
{
printf("%s\t%s\t%s\t%d\n", a[i].id, a[i].name, a[i].sex, a[i].pay);
}
}
}
void main()
{
WOR a[6] =
{
{ "0001","zhan","boy",1000 },
{ "0002","lisi","boy",1100 },
{ "0003","wanger","boy",1200 },
{ "0004","mazi","boy",1300 },
{ "0005","laoda","girl",10000 },
{ "0006","laoer","girl",12000 }
};
//char sex[10];
output(a, 6);//输出全部员工
printf("\n******************************\n");
//printf("请输入性别:\n");
//scanf("%s", sex);
//OutSexWorker(a, 6, sex);
//max(a, 6);
Aver(a, 6);
}
/
/
#include<stdio.h>
#include<string.h>
typedef struct stud
{
char Id[10];
char *Name;
int Chinese;
int Math;
int English;
}STU;
//求出所有学生的总分和平均分
void fun(STU a[], int n)
{
int i,sum;
float k;
//输出标题
printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
//要访问里面的每一个学生
for (i = 0; i < n; i++)
{
sum = a[i].Chinese + a[i].Math + a[i].English;
k = sum / 3.0;
printf("%s\t%s\t%d\t%d\t%d\t%d\t%.1f%\n",a[i].Id,a[i].Name, a[i].Chinese, a[i].Math, a[i].English, sum, k);
}
}
void main()
{
STU a[5]=
{
{"s1","小明",60,40,50},
{"s2","小军",40,80,60},
{"s3","小红",90,70,80},
{"s4","小刚",60,100,90},
{"s5","小傻",90,90,100}
};
fun(a, 5);
}
//
#include<stdio.h>
#include<string.h>
typedef struct stud
{
char Id[10];
char *Name;
int Chinese;
int Math;
int English;
}STU;
//求出每一个学生的优秀科目,然后输出科目名字
void Perfect(STU a[], int n)
{
int i;
char per[20];//用来保存最优秀科目的名称
int maxscore;//用来保存最有科目分数
//输出标题
printf("学号\t姓名\t语文\t数学\t英语\t最优科目\n");
for (i=0;i<5;i++)
{
maxscore = a[i].Chinese;//认为第i个学生语文最优秀
strcpy(per, "语文");
if (maxscore < a[i].Math)
{
maxscore = a[i].Math;
strcpy(per, "数学");
}
if (maxscore < a[i].English)
{
maxscore = a[i].English;
strcpy(per, "英语");
}
printf("%s\t%s\t%d\t%d\t%d\t%s\n", a[i].Id, a[i].Name, a[i].Chinese, a[i].Math, a[i].English,per);
}
}
void main()
{
STU a[5] =
{
{"s1","小明",60,40,50},
{"s2","小军",40,80,60},
{"s3","小红",90,70,80},
{"s4","小刚",60,100,90},
{"s5","小傻",90,90,100}
};
Perfect(a, 5);
}
*/
/*指向结构体的指针
a, *p = &a;
如何通过指针来访问结构体的成员
1;结构体变量名.成员名 a.name
2:(*结构体指针).成员名 (*p).name
3:结构体指针->成员名 p->name //用的最多
/
/
#include<stdio.h>
#include<string.h>
typedef struct stud
{
char Id[10];
char *Name;
int Chinese;
int Math;
int English;
}STU;
void main()
{
//STU a = { "S1","小明",56,87,90 },*p = &a;//p现在指向的是a,但是p和a都是结构体类型
//printf("%s", p->Name);
STU a[5] =
{
{"s1","小明",60,40,50},
{"s2","小军",40,80,60},
{"s3","小红",90,70,80},
{"s4","小刚",60,100,90},
{"s5","小傻",90,90,100}
},*p=a;
p++;
printf("%s", p->Name);
}
/
/
#include<stdio.h>
#include<string.h>
typedef struct stud
{
char Id[10];
char *Name;
int Chinese;
int Math;
int English;
}STU;
void output(STU *a,int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%s\n", a->Name);
a++;
}
}
void main()
{
STU a[5] =
{
{"s1","小明",60,40,50},
{"s2","小军",40,80,60},
{"s3","小红",90,70,80},
{"s4","小刚",60,100,90},
{"s5","小傻",90,90,100}
};
output(a, 5);
}
/
/
#include<stdio.h>
typedef struct data
{
int x;
int *y;
}DATA;
void main()
{
int a[4] = { 1,2,3,4 };
DATA k = { a[0],&a[0] }, *p = &k;
printf("%d", *(p->y));//1
}
/
/ k
p---->1
&a[0]----->a[0]
a[1]
a[2]
a[3]
*/