数据结构作业2024.1.22

文章讲述了如何使用C语言实现一个简单的商品管理程序,包括在堆区动态分配内存、循环输入商品信息、按单价排序、找出最贵商品及计算总花费,最后释放内存。
摘要由CSDN通过智能技术生成

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>
#include <math.h>
#include <unistd.h>

// 商品结构体
typedef struct G 
{
    char name[20];
    float price;
    int num;
    char description[50];
}Product;
Product *create(int n);
void input(Product* p,int n); 
void bubble(Product* p,int n); 
char*Max(Product *p,int n);
void money(Product* p,int n);
void output(Product *p,int n);
void free_space(Product* p);

#endif

 main.c文件

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>

// 商品结构体
typedef struct G 
{
    char name[20];
    float price;
    int num;
    char description[50];
}Product;
Product *create(int n);
void input(Product* p,int n); 
void bubble(Product* p,int n); 
char*Max(Product *p,int n);
void money(Product* p,int n);
void output(Product *p,int n);
void free_space(Product* p);

#endif
ubuntu@ubuntu:day2$ cat main.c
#include "head.h"
int main(int argc, const char *argv[])
{
	int n=3;
	Product *p=create(n);
	input(p,n);
	bubble(p,n);
	char *name=Max(p,n);
	printf("最贵商品的名称是%s\n",name);
	money(p,n);
	output(p,n);
	free_space(p);
	return 0;
}

 封装函数

#include "head.h"
int main(int argc, const char *argv[])
{
	int n=3;
	Product *p=create(n);
	input(p,n);
	bubble(p,n);
	char *name=Max(p,n);
	printf("最贵商品的名称是%s\n",name);
	money(p,n);
	output(p,n);
	free_space(p);
	return 0;
}
ubuntu@ubuntu:day2$ cat test.c
#include "head.h"
// 在堆区申请5个连续的内存空间
Product *create(int n) 
{
    Product *p=(Product*) malloc(sizeof(Product)*n);  
	if (p==NULL) 
	{
        return NULL;
    }
    return p;
}

// 循环输入商品信息
void input(Product *p,int n) 
{
    for (int i=0;i<n;i++) 
	{
        printf("Enter product name: ");
        scanf("%s", (p+i)->name);
        printf("Enter product price: ");
        scanf("%f", &(p+i)->price);
        printf("Enter product num: ");
        scanf("%d", &(p+i)->num);
        printf("Enter product description: ");
        scanf("%s", (p+i)->description);
    }
}

// 按照单价排序商品信息
void bubble(Product* p,int n) 
{
    for (int i=1;i<n;i++) 
	{
        for (int j=0;j<n-i;j++) 
		{
            if ((p+i)->price>(p+j)->price) 
			{
                Product t=*(p+i);
                *(p+i)=*(p+j);
                *(p+j)=t;
            }
        }
    }
}
//计算最贵商品名称
char* Max(Product *p,int n)
{
	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 (p+maxi)->name;
	}
}
// 计算总共花了多少钱
void money(Product* p,int n)
{
  float sum=0;
	for(int i=0;i<n;i++)
	{
		sum+=p[i].price*p[i].num;
	}
    printf("总价为:%.2f\n",sum); 
}
//输出商品信息
void output(Product *p,int n)
{
 for (int i=0;i<n;i++) 
	{      
        printf("%s\n", p[i].name);
        printf("%.2f\n", p[i].price);
        printf("%d\n", p[i].num);  
		printf("%s\n", p[i].description);
 
    }
}

// 释放堆区内存空间
void free_space(Product* p) 
{
    free(p);
	p=NULL;
}

 

思维导图

 

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值