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