C语言-结构体

结构体定义

结构体类型定义

  • 用关键字typedefWORKER即相当于新创建的结构体类型,之后可以用WORKER来定义结构体变量。如定义结构体数组有WORKER wor[N];此处WORKER是类型,wor是数组变量
typedef struct worker{
	char name[20];
	char sex;
	int wage[6];
}WORKER;
  • 不用关键字typedef,则定义结构体变量为 struct worker wor[N];
struct worker{
	char name[20];
	char sex;
	int wage[6];
};

结构体变量成员的访问

访问方式有两种
: ①结构体变量名字.成员
: ②指针->成员

//定义结构体类型
typedef struct worker{
	char name[20];
	char sex;
	int wage[6];
}WORKER;

//定义结构体变量
WORKER wor;
WORKER *p_wor=wor;  //指针p_wor指向结构体变量wor

//访问方式①
wor.char='B';
//访问方式②
p_wor->char='b';

常规例题

公司员工管理系统(年龄、性别、工资及工资钞票数目,工资排序。。)

#include<stdio.h>
#include<stdlib.h> 
#define N 10     //定义员工数为10,可修改 

typedef struct worker{
	char name[20];
	char sex;
	int work_age;
	int salary;
	int wage[6];
}WORKER;

void input_worker_message(WORKER*wor,int n);
void output_worker_message(WORKER*wor,int n);

int main()
{
	WORKER work[N]; //定义结构体数组 
	input_worker_message(work,N);
	output_worker_message(work,N);
} 
 
void input_worker_message(WORKER*wor,int n)
{
	int i;
	int d_money;//中间变量 
	//输入员工信息 
	for(i=0;i<n;i++)
	{
		printf("输入第%d个员工信息\n",i+1);
		printf("name:");
	    scanf("%s",wor[i].name);
		printf("sex(男性:1 女性:0):\n");
		scanf("%d",&wor[i].sex);
		printf("work_age:\n");
		scanf("%d",&wor[i].work_age);
		printf("salary:\n");
		scanf("%d",&wor[i].salary);
	}
	//计算钞票数目 100 50 20 10 5 1 
	for(i=0;i<n;i++) 
	{ 
	   wor[i].wage[0]=wor[i].salary/100;   //100的数量 
	   d_money=wor[i].salary%100;
	   
	   wor[i].wage[1]= d_money/50; 
	   d_money=d_money%50;
	   
	   wor[i].wage[2]= d_money/20; 
	   d_money=d_money%20;
	   
	   wor[i].wage[3]= d_money/10; 
	   d_money=d_money%10;
	   
	   wor[i].wage[4]= d_money/5; 
	   d_money=d_money%5;
	   
	   wor[i].wage[5]= d_money;
	}
}

void output_worker_message(WORKER*wor,int n)
{
	int i,j;
	int unit[6]={100,50,20,10,5,1};
	for(i=0;i<n;i++)
	{
		if(wor[i].sex==1&&wor[i].salary>5000&&wor[i].work_age>20)
		{
			printf("name:%-15s",wor[i].name);			
			printf("sex:%-2d ",wor[i].sex); 
			printf("work_age:%-2d ",wor[i].work_age);
			printf("salary:%-5d ",wor[i].salary);
			printf("\n");
			//输出钱的数目 
			for(j=0;j<6;j++) 
			 printf("%-3d:%d张 ",unit[j],wor[i].wage[j]); 			
		}
	}
}

学生成绩管理系统(各科成绩,年龄、性别,成绩排名,是否及格计算。。。)

没有写完…

#include<stdio.h>
#include<stdlib.h>
#define N  3

typedef struct student{
	int id;
	char name[10];
	char sex;
	int score[4];
	int total_score;
	int flag;//单科达线为1 
}STU;

void input_meg(STU *stu,int n);
void output_meg(STU *stu,int n);
void search_meg(STU *stu,int n,int*stard );
void sort_meg(STU *stu,int n);

int main()
{
	int stard_score[4]={60,60,60,60};
	STU stu[N];

 }
 
void input_meg(STU *stu,int n)
{   
    int i,j;
    //输入信息 
    for (i=0;i<n;i++)
    {
		printf("输入第%d个学习信息\n",i);
		printf("id:");
		scanf("%d",&stu[1].id);
		printf("name:");
		scanf("%s",stu[1].name);
		printf("sex:");
		scanf("%c",&stu[1].sex);
		for(j=0;j<4;j++)
	    {
	       printf("输入第%d门成绩\n",j);
		   printf("%d",&stu[i].score[j]);	
		}
	}
	//计算总分 及初始化及格flag 
	for (i=0;i<n;i++) 
	{
		for(j=0;j<4;j++)
		  stu[i].total_score=stu[i].score[j];
		
		stu[i].flag=1;//初始均为及格 
	}
} 

void sort_meg(STU *stu,int n)
{
	int i,j;
	STU temp;  //中间变量 
	//冒泡排序 
	for(i=0;i<n-1;i++)
	  for(j=0;j<n-i-1;j++)
	  {
	  	if(stu[j+1].total_score>stu[j].total_score)
	  	{
		  	temp=stu[j+1];
		  	stu[j+1]=stu[j];
		  	stu[j]=temp;
		}
	  }
}

void search_meg(STU *stu,int n,int*stard )
{
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<4;j++)
		{
			if(stu[i].score[j]<stard[j]);
			   stu[i].flag=0;
			   break; 			 
		}
	}
}


void print_meg(STU *stu,int n)
{
	int i,j;
	for(i=0;i<n*0.2;i++)//排名前20% 
	{ 
	 if(stu[i].flag==1)
	 {
	 //略	
	 }
		
	}
}

小结

   一个结构体数组 由数组变量及数组成员个数决定,因此传参数的时候只需要传这两个
  对结构体数组某成员排序,同对普通数组排序类似,只需把该结构体当一个整体交换即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值