![](https://i-blog.csdnimg.cn/blog_migrate/6c898648480d33386d620ca1b3a7e3e7.png)
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char name[20];
char sex;
char position;
union{
float score;
char post[20];
};
}person;
person *Creat(int n);
int Input_person(person *p,int n);
int Output_person(person *p,int n);
float score_average(person *p,int n);
int teacher_num(person *p,int n);
#endif
main.c
#include "head.h"
int main(int argc,const char *argv[])
{
int n;
printf("请输入人员个数:");
scanf("%d",&n);
//申请空间
person *p=Creat(n);
//录入信息
int i=Input_person(p,n);
if(-1==i){
printf("input person information error!\n");
return -1;
}
//输出信息
Output_person(p,n);
//计算学生平均成绩
float aver = score_average(p,n);
if(0 == aver){
printf("student score average error!\n");
return 0;
}else
printf("学生平均成绩为:%.2f\n",aver);
//计算老师的个数
int num = teacher_num(p,n);
printf("老师的个数:%d\n",num);
//释放空间
free(p);
p=NULL;
return 0;
}
txt.c
#include "head.h"
int main(int argc,const char *argv[])
{
int n;
printf("请输入人员个数:");
scanf("%d",&n);
//申请空间
person *p=Creat(n);
//录入信息
int i=Input_person(p,n);
if(-1==i){
printf("input person information error!\n");
return -1;
}
//输出信息
Output_person(p,n);
//计算学生平均成绩
float aver = score_average(p,n);
if(0 == aver){
printf("student score average error!\n");
return 0;
}else
printf("学生平均成绩为:%.2f\n",aver);
//计算老师的个数
int num = teacher_num(p,n);
printf("老师的个数:%d\n",num);
//释放空间
free(p);
p=NULL;
return 0;
}
linux@ubuntu:~/23021/data_structure/2day/zuoye/1zuoye$
linux@ubuntu:~/23021/data_structure/2day/zuoye/1zuoye$ cat txt.c
#include "head.h"
//功能:在堆区申请空间,并返回空间首地址
//参数:
//返回值:成功返回申请空间的首地址,失败返回NULL
person *Creat(int n){
person *p=(person*)malloc(sizeof(person)*n);
if(NULL == p)
return NULL;
else
return p;
}
//功能:录入信息
//参数:空间首地址,个数
//返回值:成功返回1,失败返回-1;
int Input_person(person *p,int n){
for(int i=0;i<n;i++){
printf("第%d个人的信息\n",i+1);
printf("input name> ");
scanf("%s",(p+i)->name);
printf("input sex(W/M)> ");
scanf(" %c",&(p+i)->sex);
printf("input position(s/S or t/T)> ");
scanf(" %c",&(p+i)->position);
if((p+i)->position=='s'||(p+i)->position=='S'){
printf("input score> ");
scanf("%f",&(p+i)->score);
}else if((p+i)->position=='t'||(p+i)->position=='T'){
printf("input post> ");
scanf("%s",(p+i)->post);
}else{
printf("input position error!\n");
return -1;
}
}
return 1;
}
//功能:输出信息
//参数:空间首地址,个数
//返回值:成功返回1,失败返回-1;
int Output_person(person *p,int n){
if(NULL == p)
return -1;
printf("\t姓名\t性别\t职业\t分数/职务\n");
for(int i=0;i<n;i++){
if((p+i)->position=='s'||(p+i)->position=='S'){
printf("%d\t%s\t%c\t%c\t%.2f\n",i+1,(p+i)->name,(p+i)->sex,(p+i)->position,(p+i)->score);
}else if((p+i)->position=='t'||(p+i)->position=='T'){
printf("%d\t%s\t%c\t%c\t%s\n",i+1,(p+i)->name,(p+i)->sex,(p+i)->position,(p+i)->post);
}
}
return 1;
}
//功能:计算学生平均成绩
//参数:空间首地址,个数
//返回值:成功返回平均值,失败返回-1
float score_average(person *p,int n){
float sum=0;
int num = 0;
for(int i=0;i<n;i++){
if((p+i)->position=='s'||(p+i)->position=='S'){
sum += (p+i)->score;
num++;
}
}
if(0==sum)
return -1;
return sum/num;
}
//功能:计算老师的个数
//参数:空间首地址,个数
//返回值:老师的个数
int teacher_num(person *p,int n){
int num=0;
for(int i=0;i<n;i++){
if((p+i)->position=='t'||(p+i)->position=='T'){
num++;
}
}
return num;
}
![](https://i-blog.csdnimg.cn/blog_migrate/f2ff4222d23eb8cd4755b7d951c1c944.png)
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char brand[20];
char color[10];
int price;
}car_data;
car_data *Creat(int n);
void Input(car_data *p,int len);
void price_sort(car_data *p,int n);
void Output(car_data *p,int len);
#endif
main.c
#include "head.h"
int main(int argc,const char *argv[])
{
//申请空间
car_data *p=Creat(5);
if(NULL ==p){
printf("未申请到空间\n");
return 0;
}
//循环输入五辆车的信息
Input(p,5);
//依据价格排序
price_sort(p,5);
//输出五辆车的信息
Output(p,5);
//释放空间
free(p);
p=NULL;
return 0;
}
txt.c
#include "head.h"
//功能:申请空间
//参数:
//返回值:成功返回申请空间的首地址,失败返回NULL
car_data *Creat(int n){
car_data *p=(car_data *)malloc(sizeof(car_data)*n);
if(NULL == p)
return NULL;
return p;
}
//功能:输入车的信息
//参数:数组首地址,车的辆数
//返回值:无
void Input(car_data *p,int len){
for(int i=0;i<len;i++){
printf("第%d辆车\n",i+1);
printf("brand> ");
scanf("%s",(p+i)->brand);
printf("color> ");
scanf("%s",(p+i)->color);
printf("price> ");
scanf("%d",&((p+i)->price));
}
}
//功能:依据车辆价格对车辆进行排序(升序)
//参数:空间首地址,个数
//返回值:无
void price_sort(car_data *p,int n){
for(int i=1;i<n;i++){
int count=0;
for(int j=0;j<n-i;j++){
if((p+j)->price > (p+j+1)->price){
car_data temp = *(p+j);
*(p+j) = *(p+j+1);
*(p+j+1) = temp;
count++;
}
}
if(0 == count)
break;
}
}
//功能:输出车的信息
//参数:数组首地址,车的辆数
//返回值:无
void Output(car_data *p,int len){
printf("\t品牌\t颜色\t价格\n");
for(int i=0;i<len;i++){
printf("第%d辆车\t%s\t%s\t%d\n",i+1,(p+i)->brand,(p+i)->color,(p+i)->price);
}
}