结构体,共用体练习(多文件编译)

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;
}

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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值