结构体定义
结构体类型定义
- 用关键字
typedef
,WORKER
即相当于新创建的结构体类型,之后可以用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)
{
//略
}
}
}
小结
一个结构体数组 由数组变量及数组成员个数决定,因此传参数的时候只需要传这两个
对结构体数组某成员排序,同对普通数组排序类似,只需把该结构体当一个整体交换即可