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