一、思维导图
二、习题
使用多文件编辑
定义商品信息:商品名称,商品单价,商品购买个数,商品描述,循环输入购买的
商品,按单价排序,输出商品信息,计算最贵的商品以及一共花了多少钱?
在create函数,请实现在堆区申请内存5个连续的内存
在input函数,请实现循环输入购买的商品
在bubble函数,请实现按单价排序
在Max函数,计算最贵的商品名称
在Money函数计算共花了多少钱
在output函数,请实现输出
在free space函数。实现释放堆区内存
主函数文件main.c
#include "head.h"
int main(int argc, const char *argv[])
{
int n; //定义商品个数
printf("请输入商品种类数:");
scanf("%d",&n);
getchar();
g_t *p=create();
input(n,p);
int maxi=Max(n,p);
printf("价格最贵的商品是:%s\n",(p+maxi)->name);
Bubble(n,p);
Output(n,p);
double sum=Money(n,p);
printf("%.2f",sum);
p=free_speace(p);
return 0;
}
头文件head.h
#ifndef ___HEAD_H___
#define ___HEAD_H___
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//创建结构体
typedef struct goods
{
char name[100];
float prince;
int num;
char des[100];
}g_t;
//声明函数
g_t *create();
void input(int n,g_t *p);
int Max(int n,g_t *p);
g_t *free_speace(g_t *p);
void Bubble(int n,g_t *p);
void Output(int n,g_t *p);
float Money(int n,g_t *p);
#endif
自定义文件test.c
#include "head.h"
/*
* function: 堆区申请内存
* @param [ in]
* @param [out]
* @return
*/
g_t *create()
{
g_t *p=(g_t*)malloc(sizeof(g_t)*5);
if(p==NULL)
return NULL;
return p;
}
/*
* function: 循环输入
* @param [ in]
* @param [out]
* @return
*/
void input(int n,g_t *p)
{
for(int i=0;i<n;i++)
{
printf("请输入商品名称\n");
scanf("%s",(p+i)->name);
printf("请输入商品价格\n");
scanf("%f",&(p+i)->prince);
printf("请输入商品购买数量\n");
scanf("%d",&(p+i)->num);
printf("请输入商品介绍\n");
scanf("%s",(p+i)->des);
}
}
/*
* function: 价格比较
* @param [ in]
* @param [out]
* @return
*/
int Max(int n,g_t *p)
{
float max=p->prince;
int maxi=0;
for(int i=0;i<n;i++)
{
if(((p+i)->prince)>max)
{
max=(p+i)->prince;
maxi=i;
}
}
return maxi;
}
/*
* function: 单价排序
* @param [ in]
* @param [out]
* @return
*/
void Bubble(int n,g_t *p)
{
for(int i=1;i<n;i++)
{
for(int j=0;j<n-i;j++)
{
if((p+j)->prince>(p+j+1)->prince)
{
g_t t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
}
}
}
}
/*
* function: 循环输出
* @param [ in]
* @param [out]
* @return
*/
void Output(int n,g_t *p)
{
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)->prince,(p+i)->num,(p+i)->des);
}
puts("");
}
/*
* function: 计算总共花费
* @param [ in]
* @param [out]
* @return
*/
float Money(int n,g_t *p)
{
float sum=0;
for(int i=0;i<n;i++)
{
sum+=(p+i)->num*(p+i)->prince;
}
return sum;
}
/*
* function: 释放内存
* @param [ in]
* @param [out]
* @return
*/
g_t *free_speace(g_t *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
}
输出结果