作业一、
多文件编译
有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业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;i<n;i++)
{
printf("请输第%d个人的姓名:",i+1);
scanf("%s",(p+i)->name);
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;i<n;i++)
{
if((p+i)->career=='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;i<n;i++)
{
if((p+i)->career=='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;i<n;i++)
{
if((p+i)->career=='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 <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char name[50];
char sex[50];
char career; //Ss Tt
union
{
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;i<n;i++)
{
printf("请输入第%d俩车的品牌:",i+1);
scanf("%s",(p+i)->brand);
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;i<n-1;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(((p+j)->price)>((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 <stdio.h>
#include <string.h>
#include <stdlib.h>
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
结果:
