结构体入门(超详解)

/什么是结构体
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]
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值