Day13课后作业

题1

main.c

#include "head11.h"

int main(int argc, const char *argv[])
{    
    int n;
    printf("请输入学校人员数量n:");
    scanf("%d",&n);
    person *p = Create(n);
    
    Input(p,n);
    Output(p,n);
    float ave = average_scores(p,n);
    printf("学生平均成绩为:%.2f\n",ave);
    int count = Count(p,n);
    printf("老师人数为:%d\n",count);
    p = free_fun(p);
    return 0;
}

test.c

#include "head11.h"

person *Create(int n)
{
    person *p = (person *)malloc(sizeof(person)*n);
    if(p == NULL)
        return NULL;
    else 
        return p;
}

void Input(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(" %c",&(p+i)->sex);
        printf("输入第%d个人员的职业:",i+1);
        scanf(" %c",&(p+i)->occ);
        if((p+i)->occ == 'S' || (p+i)->occ == 's')
        {
            printf("输入第%d个人员的分数:",i+1);
            scanf("%f",&(p+i)->score);
        }
        else
        {
            printf("输入第%d个人员的职务:",i+1);
            scanf("%s",(p+i)->post);
        }
    }

}

void Output(person *p,int n)
{
    printf("姓名\t性别\t职业\t分数/职业\n");
    for(int i=0;i<n;i++)
    {
        if((p+i)->occ == 'S' || (p+i)->occ == 's')
            printf("%s\t%c\t%c\t%.2f\n",(p+i)->name,(p+i)->sex,(p+i)->occ,(p+i)->score);
        else
            printf("%s\t%c\t%c\t%s\n",(p+i)->name,(p+i)->sex,(p+i)->occ,(p+i)->post);
    }
}

float average_scores(person *p,int n)
{
    float sum=0;
    float count=0;
    for(int i=0;i<n;i++)
    {
        if((p+i)->occ == 'S' || (p+i)->occ == 's')
        {
            sum += (p+i)->score;
            count++;
        }
    }
    //printf("%f",sum);
    return (sum/count);
}

int Count(person *p,int n)
{    
    int count=0;
    for(int i=0;i<n;i++)
    {
        if((p+i)->occ == 'T' || (p+i)->occ == 't')
            count++;
    }
    return count;
}

person *free_fun(person *p)
{
    if(p!=NULL)
    {
        free(p);
        p=NULL;
    }
    return p;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char name[32];
    char sex;
    char occ;
    union{
        float score;
        char post[32];
    };
}person;

person *Create(int n);
void Input(person *p,int n);
void Output(person *p,int n);
float average_scores(person *p,int n);
int Count(person *p,int n);
person *free_fun(person *p);

#endif

题2

main.c

#include "head22.h"

int main(int argc, const char *argv[])
{    
    printf("输入车的数量:n\n");
    int n;
    scanf("%d",&n);
    
    Car *p = Create(n);
    Input(p,n);
    Sort(p,n);
    Output(p,n);

    p = free_fun(p);

    return 0;
}

test.c

#include "head22.h"

Car *Create(int n)
{
    Car *p = (Car *)malloc(sizeof(Car)*n);
    if(p == NULL)
        return NULL;
    else
        return p;
}

void Input(Car *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)->colour);
        printf("请输入第%d辆车的价格:",i+1);
        scanf("%f",&(p+i)->price);
    }
}

void Output(Car *p,int n)
{
    printf("品牌\t颜色\t价格\n");
    for(int i=0;i<n;i++)
    {
        printf("%s\t%s\t%.2fW\n",(p+i)->name,(p+i)->colour,(p+i)->price);
    }
}

void Sort(Car *p,int n)
{
    for(int i=0;i<n-1;i++)
    {
        int count = 0;
        for(int j=0;j<n-i-1;j++)
        {
            if((p+j)->price > (p+j+1)->price)
            {
                Car *t = Create(1);
                *t = *(p+j);
                *(p+j) = *(p+j+1);
                *(p+j+1) = *t;
                count++;
            }
        }
        if(count == 0)
            break;
    }
}

Car *free_fun(Car *p)
{
    if(p != NULL)
    {
        free(p);
        p = NULL;
    }
    return p;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char name[32];
    char colour[8];
    float price;
}Car;
Car *Create(int n);
void Input(Car *p,int n);
void Output(Car *p,int n);
void Sort(Car *p,int n);
Car *free_fun(Car *p);

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值