使用多文件编辑
定义商品信息:商品名称,商品单价,商品购买个数,商品描述
循环输入购买的商品,按单价排序,输出商品信息,计算最贵的商品以及一共花了多少钱
在create函数,请实现在堆区申请5个连续的内存
在input函数,请实现循环输入购买的商品
在bubble函数,请实现按单价排序
在Max函数,计算最贵的商品,输出名称
在Money函数,计算共花了多少钱
在output函数,请实现输出
在free_space函数,实现释放堆区内存
myfunc.h
#ifndef __MYFUNC_H__
#define __MYFUNC_H__
#include <stdio.h>
#include <stdlib.h>
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)
结果