2024.01.22作业

使用多文件编辑

定义商品信息:商品名称,商品单价,商品购买个数,商品描述

循环输入购买的商品,按单价排序,输出商品信息,计算最贵的商品以及一共花了多少钱

在create函数,请实现在堆区申请5个连续的内存

在input函数,请实现循环输入购买的商品

在bubble函数,请实现按单价排序

在Max函数,计算最贵的商品,输出名称

在Money函数,计算共花了多少钱

在output函数,请实现输出

在free_space函数,实现释放堆区内存

myfunc.h

#ifndef __MYFUNC_H__
#define __MYFUNC_H__

#include 
#include 

typedef struct a
{
    char name[16];
    float price;
    int num;
    char discription[32];
} goods;

goods* create(int n);
void input(int n, goods* p);
void bubble(int n, goods* p);
void Max(int n, goods* p);
void Money(int n, goods* p);
void output(int n, goods*p);
void free_space(goods* p);

#endif

myfunc.c

#include "myfunc.h"

goods* create(int n)
{
    goods* p = (goods*)malloc(sizeof(goods) * n);
    if (NULL == p)
    {
        return NULL;
    }
    return p;
}

void input(int n, goods* p)
{
    for (int i = 0; i < n; i++)
    {
        scanf("%s", (p + i)->name);
        scanf("%f", &(p + i)->price);
        scanf("%d", &(p + i)->num);
        scanf("%s", (p + i)->discription);
    }
}

void bubble(int n, goods* p)
{
    for (int i = 1; i < n; i++)
    {
        for (int j = 0; j < n - i; j++)
        {
            if ((p + j)->price > (p + j + 1)->price)
            {
                goods q = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = q;
            }
        }
    }
}

void Max(int n, goods* p)
{
    printf("最贵商品:%s\n", (p + n - 1)->name);
}

void Money(int n, goods* p)
{
    float sum = 0;
    for (int i = 0; i < n; i++)
    {
        sum += (p + i)->price * (p + i)->num;
    }
    printf("共花 %.2f 元\n", sum);
}

void output(int n, goods*p)
{
    printf("输出排序后商品:\n");
    for (int i = 0; i < n; i++)
    {
        printf("%s\t%.2f\t%d\t%s\n", (p + i)->name, (p + i)->price, (p + i)->num, (p + i)->discription);
    }
    printf("\n");
}

void free_space(goods* p)
{
    free(p);
    p = NULL;
}

test.c

#include "myfunc.h"

int main()
{
    int n = 5;

    goods* p = create(n);
    if (NULL == p)
    {
        printf("初始化内存失败\n");
        return -1;
    }
    input(n, p);
    bubble(n, p);
    output(n, p);
    Max(n, p);
    Money(n, p);
    free_space(p);

    return 0;
}

Makefile


CC=gcc
EXE=test
OBJS=$(patsubst %.c,%.o,$(wildcard *.c))
CFLAGS=-c -o

all:$(EXE)

$(EXE):$(OBJS)
	$(CC) $^ -o $@

%.o:%.c
	$(CC) $(CFLAGS) $@ $^

.PHONY:clean
clean:
	rm $(OBJS) $(EXE)

结果

2024.01.22作业_第1张图片

你可能感兴趣的:(其他)