数据库DAY2-共用体,联合
迪丽瓦拉
2025-05-28 04:23:39
0

作业一、

多文件编译

有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。

1,定义函数在堆区申请空间n

struct B *p= (struct B * )malloc(sizeof(struct B)* n );

2,定义函数实现录入学校人员信息

3,定义函数输出学校人员信息

4,定义函数计算学生平均成绩

5,定义函数计算老师的个数

6,释放存储空间

main.c

#include "head.h"int main(int argc,const char * argv[])
{int n;printf("请输入需要录入校园人员信息的个数:");scanf("%d",&n);getchar();person *p=Create(n);In(p,n);Out(p,n);Student(p,n);Teacher(p,n);p=Free(p);return 0;
}

test.c

#include "head.h"person *Create(int n)
{person *p=(person *)malloc(sizeof(person)*n);if(p==NULL){return NULL;}return p;
}void In(person *p,int n)
{for(int i=0;iname);printf("请输入第%d个人的性别:",i+1);scanf(" %s",(p+i)->sex);printf("请输入第%d个人的身份:",i+1);scanf(" %c",&(p+i)->career);if((p+i)->career=='S' || (p+i)->career=='s'){printf("请输入学生的分数:");scanf("%f",&(p+i)->score);}else{printf("请输入教师的职称:");scanf("%s",(p+i)->job);}}
}void Out(person *p,int n)
{printf("name\tsex\tcareer\tjob\\score\n");for(int i=0;icareer=='S' || (p+i)->career=='s') printf("%s\t%s\t%c\t%.2f\n",(p+i)->name,(p+i)->sex,(p+i)->career,(p+i)->score);if((p+i)->career=='T' || (p+i)->career=='t')printf("%s\t%s\t%c\t%s\n",(p+i)->name,(p+i)->sex,(p+i)->career,(p+i)->job);}
}void Student(person *p,int n)
{float sum=0,avg=0;int count=0; for(int i=0;icareer=='S' || (p+i)->career=='s'){sum+=(p+i)->score;count++;}}avg=sum/count;printf("学生的平均成绩是%.2f\n",avg);
}void Teacher(person *p,int n)
{int count=0;for(int i=0;icareer=='T' || (p+i)->career=='t'){count++;}}printf("老师的人数有%d人\n",count);
}person *Free(person *p)
{if(p!=NULL){free(p);p==NULL;}return p;
}

head.h

#ifndef __HEAD_H_
#define __HEAD_H_
#include 
#include 
#include typedef struct 
{char name[50];char sex[50];  char career;  //Ss  Ttunion {char job[20];float score;}; }person;person *Create(int n);
void In(person *p,int n);
void Out(person *p,int n);
void Student(person *p,int n);
person *Free(person *p);#include "test.c"
#endif

结果:

作业二、

多文件编译

在堆区申请5个连续的存储空间,实现车辆信息的输入(品牌,颜色,价格)

1>调用函数在堆区申请空间

2>调用函数实现输入

3>调用函数对价格排序

1>if(条件) 条件是价格的比较 (p+j)->price (p+j+1)->price

2> 交换的是整个车的信息

例如: (p+j)表示整个车的地址

*(p+j)表示整个车的信息

交换的是*(p+j) 和*(p+j+1) 对应的整体信息

3> 注意中间变量t的类型,应该是结构体类型

4>调用函数输出

5>释放堆区空间

main.c

#include "head.h"int main(int argc,const char * argv[])
{int n;printf("请输入要填写车辆的个数:");scanf("%d",&n);car *p=Create(p,n);In(p,n);Bubble(p,n);Put(p,n);p=Free(p);return 0;
}

test.c

#include "head.h"void In(car *p,int n)
{for(int i=0;ibrand);printf("请输入第%d俩车的颜色:",i+1);scanf("%s",(p+i)->colour);printf("请输入第%d俩车的价格:",i+1);scanf("%lf",&(p+i)->price);}
}car *Create(car *p,int n)
{p=(car *)malloc(sizeof(car)*n);if(p==NULL){return NULL;}else{return p;}
}void Bubble(car *p,int n)
{for(int i=0;iprice)>((p+j+1)->price)){car t;t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;}}}
}void Put(car *p,int n)
{printf("brand\tcolour\tprice\n");for(int i=0;i<5;i++){printf("%s\t%s\t%.2lf\t",(p+i)->brand,(p+i)->colour,(p+i)->price);printf("\n");}
}car *Free(car *p)
{if(p!=NULL){free(p);p==NULL;}return p;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__#include 
#include 
#include typedef struct 
{char brand[50];char colour[50];double price;}car;car *Create(car *p,int n);
void In(car *p,int n);
void Put(car *p,int n);
void Bubble(car *p,int n);
car *Free(car *p);#include "test.c"#endif

结果:

相关内容