一、定义商品结构体:名称,单价,个数
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个字节,存储位置如下
0x00 | a |
0x01 | |
0x02 | |
0x03 | |
0x04 | b |
0x05 | |
0x06 | - |
0x07 | |
0x08 | c |
0x09 | |
0x10 | |
0x11 | |
0x12 | - |
0x13 | |
0x14 | |
0x15 | |
0x16 | d |
0x17 | |
0x18 | |
0x19 | |
0x20 | |
0x21 | |
0x22 | |
0x23 | |
0x24 | (*p)[3] |
0x25 | |
0x26 | |
0x27 | |
0x28 | |
0x29 | |
0x30 | |
0x31 |