1.使用多文件编辑:
定义商品信息:商品名称,商品单价,商品购买个数,商品描述,循环输入购买的商品,按单价排序,输出商品信息,计算最贵的商品以及一共花了多少钱?
在create函数,请实现在堆区申请内存5个连续的内存
在input函数,请实现循环输入购买的商品
在bubble函数,请实现按单价排序
在Max函数,计算最贵的商品名称
在Money函数,计算共花了多少钱
在output函数,请实现输出
在free_space函数。实现释放堆区内存
程序代码:
head.h
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct goods
{
char name[20];
float price;
int num;
char describe[20];
}g_t,*p_t;
p_t create();
void input(p_t p);
void Bubble(p_t p);
void Max(p_t p);
int Money(p_t p);
void output(p_t p);
p_t free_space(p_t p);
#endif
test.c
#include "head.h"
//申请内存
p_t create()
{
p_t p=(p_t)malloc(sizeof(g_t)*5);
if(NULL==p)
return NULL;
return p;
}
//输入商品信息
void input(p_t p)
{
for(int i=0;i<5;i++)
{
scanf("%s",(p+i)->name);
scanf("%f",&(p+i)->price);
scanf("%d",&(p+i)->num);
scanf("%s",(p+i)->describe);
}
}
//按照单价排序
void Bubble(p_t p)
{
for(int i=1;i<5;i++)
{
for(int j=0;j<5-i;j++)
{
if((p+j)->price<(p+j+1)->price){
g_t t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
}
//找出最贵的商品名称
void Max(p_t p)
{
int i=0,index=0;
int max=(p+i)->price;
for(i=0;i<5;i++)
{
if(max<(p+i)->price){
max=(p+i)->price;
index=i;
}
}
printf("max_name=%s\n",(p+index)->name);
}
//计算花费了多少钱
int Money(p_t p)
{
int sum=0;
for(int i=0;i<5;i++)
{
sum+=(p+i)->price * (p+i)->num;
}
return sum;
}
//输出商品信息
void output(p_t p)
{
for(int i=0;i<5;i++)
{
printf("%s\t%f\t%d\t%s\n",(p+i)->name,(p+i)->price,(p+i)->num,(p+i)->describe);
}
}
//释放内存
p_t free_space(p_t p)
{
if(NULL==p)
return NULL;
free(p);
return p;
}
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
//申请内存
p_t p=create();
//输入
input(p);
//排序
Bubble(p);
//找最贵商品
Max(p);
//计算花费多少钱
int money=Money(p);
printf("money=%d\n",money);
//输出
output(p);
//释放内存
p=free_space(p);
return 0;
}
效果显示:
2.思维导图