思维导图
练习
使用多文件编辑,
定义商品信息:商品名称,商品单价,商品购买个数,商品描述,循环输入购买的商品,按单价排序,输出商品信息,计算最贵的商品以及一共花了多少钱?
头文件
1 #ifndef __HEAD_1_22_H__
2 #define __HEAD_1_22_H__
3
4 #include <stdio.h>
5 #include <string.h>
6 #include <stdlib.h>
7 typedef struct all_goods
8 {
9 char name[40];
10 float price;
11 float quantity;
12 char describe[40];
13 }goods;
14
15 goods* creat();
16 void Input(goods *p);
17 void bubble(goods *p);
18 float Max(goods *p);
19 float Money(goods *p);
20 void Output(goods *p);
21 goods *free_space(goods *p);
22 #endif
自定义函数
1 #include "head_1_22.h"
2
3
4 goods* creat()
5 {
6 goods *p =(goods*)malloc(sizeof( goods)*5);
7 if(NULL==p)
8 return NULL;
9 return p;
10 }
11
12 void Input(goods *p)
13 {
14 for(int i=0;i<5;i++)
15 {
16 scanf("%s",(p+i)->name);
17 getchar();
18 scanf("%f",&(p+i)->price);
19 getchar();
20 scanf("%f",&(p+i)->quantity);
21 getchar();
22 scanf("%s",(p+i)->describe);
23 getchar();
24 }
25 }
26
27 void bubble(goods *p)
28 {
29 for(int i=0;i<5;i++)
30 {
31 for(int j=0;j<5-i-1;j++)
32 {
33 if((*(p+j)).price<(*(p+j+1)).price)
34 {
35 goods temp=*(p+j);
36 *(p+j)=*(p+j+1);
37 *(p+j+1)=temp;
38 }
39 }
40 }
41 }
42
43 float Max(goods *p)
44 {
45 int max=0;
46 for(int i=0;i<5;i++)
47 {
48 if(max<(*(p+i)).price)
49 max=(*(p+i)).price;
50 }
51 return max;
52 }
53
54 float Money(goods *p)
55 {
56 float count=0;
57 for(int i=0;i<5;i++)
58 {
59 count+=(*(p+i)).price*(*(p+i)).quantity;
60 }
61 return count;
62 }
63
64 void Output(goods *p)
65 {
66 printf("名称\t单价\t个数\t描述\n");
67 for(int i=0;i<5;i++)
68 {
69 printf("%s\t%.2f\t%.2f\t%s\n",(p+i)->name,(p+i)->price,(p+i)->quantity,(p+i)->describe);
70 }
71 }
72
73 goods *free_space(goods *p)
74 {
75 if(p==NULL)
76 return NULL;
77
78 free(p);
79 p=NULL;
80 return p;
81 }
在create函数,请实现在堆区申请内存5个连续的内存
goods* creat()
{
goods *p =(goods*)malloc(sizeof( goods)*5);
if(NULL==p)
return NULL;
return p;
}
在input函数,请实现循环输入购买的商品
void Input(goods *p)
{
for(int i=0;i<5;i++)
{
scanf("%s",(p+i)->name);
getchar();
scanf("%f",&(p+i)->price);
getchar();
scanf("%f",&(p+i)->quantity);
getchar();
scanf("%s",(p+i)->describe);
getchar();
}
}
在bubble函数,请实现按单价排序
void bubble(goods *p)
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5-i-1;j++)
{
if((*(p+j)).price<(*(p+j+1)).price)
{
goods temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
}
在Max函数,计算最贵的商品名称
float Max(goods *p)
{
int max=0;
for(int i=0;i<5;i++)
{
if(max<(*(p+i)).price)
max=(*(p+i)).price;
}
return max;
}
在Money函数,计算共花了多少钱
float Money(goods *p)
{
float count=0;
for(int i=0;i<5;i++)
{
count+=(*(p+i)).price*(*(p+i)).quantity;
}
return count;
}
在output函数,请实现输出
void Output(goods *p)
{
printf("名称\t单价\t个数\t描述\n");
for(int i=0;i<5;i++)
{
printf("%s\t%.2f\t%.2f\t%s\n",(p+i)->name,(p+i)->pric
}
}
在free_space函数。实现释放堆区内存
goods *free_space(goods *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
主函数
1 #include "head_1_22.h"
2 int main(int argc, const char *argv[])
3 {
4 goods* p=creat();
5 Input(p);
6 bubble(p);
7 float max=Max(p);
8 printf("max=%.2f\n",max);
9 float money=Money(p);
10 printf("money=%.2f\n",money);
11 Output(p);
12 p=free_space(p);
13 return 0;
14 }
15