2023.04.18 数据结构day2

一、定义商品结构体:名称,单价,个数

1,定义函数在堆区申请空间

2,定义函数实现输入

3,计算商品总价格

4,计算最贵的商品信息

5,输入一个商品名称,查找单价信息

6,实现商品按单价排序

7,释放空间

(1)头文件head.h

#ifndef __HEAD_H__
#define __HEAD_H__

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
	char name[20];
	float price;
	int num;
} goods_t;

goods_t *CreateSpace(int n);
goods_t *FreeSpace(goods_t *p);
void Input(goods_t *p,int n);
void Output(goods_t *p,int n);
float TotalPrice(goods_t *p,int n);
void Max(goods_t *p,int n);
void Search(goods_t *p,int n);
void Sort(goods_t *p,int n);
#endif

(2)功能函数test.c

#include "head.h"

goods_t *CreateSpace(int n)
{
	goods_t *p = (goods_t *)malloc(sizeof(goods_t)*n);
	if(p == NULL)
		return NULL;
	return p;
}

goods_t *FreeSpace(goods_t *p)
{
	if(p == NULL)
		return NULL;
	free(p);
	p = NULL;
	return p;
}

void Input(goods_t *p,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("输入名称:");
		scanf("%s",(p+i)->name);
		printf("输入价格:");
		scanf("%f",&(p+i)->price);
		printf("输入个数:");
		scanf("%d",&(p+i)->num);
	}
}

void Output(goods_t *p,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("名称:%s 价格:%.2f 个数:%d\n",(p+i)->name,(p+i)->price,(p+i)->num);
	}
}

float TotalPrice(goods_t *p,int n)
{
	int sum = 0;
	for(int i=0;i<n;i++)
		sum += ((p+i)->price)*((p+i)->num);
	return sum;
}

void Max(goods_t *p,int n)
{
	int flag=0;   //记录最贵商品位置
	float max = p->price;
	for(int i=0;i<n;i++)
	{
		if((p+i)->price > max)
		{
			max = (p+i)->price;
			flag = i;
		}
	}
	printf("最贵的商品的信息为:\n");
	printf("名称:%s 价格:%.2f 个数:%d\n",(p+flag)->name,(p+flag)->price,(p+flag)->num);
}

void Search(goods_t *p,int n)
{
	char str[20];
	printf("请输入查找商品:");
	scanf("%s",str);
	for(int i=0;i<n;i++)
	{
		if(!strcmp((p+i)->name,str))
		{
			printf("查询结果如下:\n");
			printf("名称:%s 价格:%.2f 个数:%d\n",(p+i)->name,(p+i)->price,(p+i)->num);
			return;
		}
	}
	printf("没有查找到该商品\n");
}

void Sort(goods_t *p,int n)
{
	for(int i=1;i<n;i++)
	{
		int count = 0;
		for(int j=0;j<n-i;j++)
		{
			if((p+j)->price>(p+j+1)->price)
			{
				goods_t temp = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp;
				count++;
			}
		}
		if(count == 0)
			return;
	}
}

(3)主函数main.c

#include "head.h"

int main(int argc, const char *argv[])
{
	int n = 5;
	goods_t *p = CreateSpace(n);
	Input(p,n);
	Output(p,n);
	printf("------------------------------\n");
	Max(p,n);
	printf("商品的总价格为%.2f\n",TotalPrice(p,n));
	printf("------------------------------\n");
	Search(p,n);
	printf("------------------------------\n");
	Sort(p,n);
	Output(p,n);
	p = FreeSpace(p);
	return 0;
}

(4)运行结果

zzy@zzy-vm:~/hqrj/struct/day2/test_3$ gcc *.c
zzy@zzy-vm:~/hqrj/struct/day2/test_3$ ./a.out 
输入名称:aaa
输入价格:150
输入个数:1
输入名称:bbb
输入价格:600
输入个数:2
输入名称:ccc
输入价格:520
输入个数:3
输入名称:ddd
输入价格:100
输入个数:4
输入名称:eee
输入价格:80
输入个数:5
名称:aaa 价格:150.00 个数:1
名称:bbb 价格:600.00 个数:2
名称:ccc 价格:520.00 个数:3
名称:ddd 价格:100.00 个数:4
名称:eee 价格:80.00 个数:5
------------------------------
最贵的商品的信息为:
名称:bbb 价格:600.00 个数:2
商品的总价格为3710.00
------------------------------
请输入查找商品:ddd
查询结果如下:
名称:ddd 价格:100.00 个数:4
------------------------------
名称:eee 价格:80.00 个数:5
名称:ddd 价格:100.00 个数:4
名称:aaa 价格:150.00 个数:1
名称:ccc 价格:520.00 个数:3
名称:bbb 价格:600.00 个数:2

二、计算下列结构体的所占字节数

typedef struct 
{
    int a;
    short b;
    float c;
    double d;
    int (*p)[3];
};

该结构体占32个字节,存储位置如下

0x00a
0x01
0x02
0x03
0x04b
0x05
0x06-
0x07
0x08c
0x09
0x10
0x11
0x12-
0x13
0x14
0x15
0x16d
0x17
0x18
0x19
0x20
0x21
0x22
0x23
0x24(*p)[3]
0x25
0x26
0x27
0x28
0x29
0x30
0x31
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值