一、定义商品结构体:名称,单价,个数
1,定义函数在堆区申请空间
2,定义函数实现输入
3,计算商品总价格
4,计算最贵的商品信息
5,输入一个商品名称,查找单价信息
6,实现商品按单价排序
7,释放空间
1)预处理命令
#ifndef __HEAD2_H__
#define __HEAD2_H__
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
struct commodity
{
char name[10];
float price;
int num;
};
struct commodity * Create_space(int n);
void Input(struct commodity *p,int n);
float Slove(struct commodity *p,int n);
void MAX(struct commodity *p,int n);
void Search(struct commodity *p,int n);
void Sort(struct commodity *p,int n);
struct commodity *Free_space(struct commodity *p);
#endif
2)函数声明
#include"head2.h"
//申请空间
struct commodity * Create_space(int n)
{
struct commodity *p=(struct commodity *)malloc(sizeof(struct commodity)*n);
if(p==NULL)
{
printf("创建失败\n");
return NULL;
}
return p;
}
//输入信息
void Input(struct commodity *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);
}
}
float Slove(struct commodity *p,int n)
{
float sum=0;
for(int i=0;i<n;i++)
{
sum=sum+(p+i)->num*(p+i)->price;
}
return sum;
}
void MAX(struct commodity *p,int n)
{
char a[10];
int b;
float max=p->price;
for(int i=0;i<n;i++)
{
if((p+i)->price>max)
{
max=(p+i)->price;
strcpy(a,(p+i)->name)==0;
b=(p+i)->num;
}
else
{
max=p->price;
strcpy(a,p->name)==0;
b=p->num;
}
}
printf("最贵商品名称:%s 单价:%.2f 个数:%d\n",a,max,b);
}
void Search(struct commodity *p,int n)
{
char arr[10];
printf("请输入商品名称:");
scanf("%s",arr);
for(int i=0;i<n;i++)
{
if(strcmp(arr,(p+i)->name)==0)
printf("商品单价为:%.2f\n",(p+i)->price);
}
}
void Sort(struct commodity *p,int n)
{
int i,j,k;
struct commodity t;
for(i=0;i<n-1;i++)
{
k=0;
for(j=0;j<n-i-1;j++)
{
if((*(p+j)).price<(*(p+j+1)).price)
{
t=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t;
k++;
}
}
if(k==0)
break;
}
printf("排序后的商品信息:\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);
}
}
//释放空间
struct commodity *Free_space(struct commodity *p)
{
if(p==NULL)
{
return NULL;
}
free(p);
p=NULL;
return p;
}
3)主函数
#include"head2.h"
int main(int argc, const char *argv[])
{
int n=3;
//申请空间
struct commodity *p= Create_space(n);
//输入信息
Input(p,n);
//计算总价格
Slove(p,n);
//计算最贵商品信息
MAX(p,n);
//输入名称,查找单价信息
Search(p,n);
//单价排序
Sort(p,n);
//释放空间
p=Free_space(p);
return 0;
}
4)运行结果
二、请计算结构体字节的个数
typedef struct
{
int a;
short b;
float c;
double d;
int (p)[3];
}
计算过程如下:
大小为:4+2+2(空字节)+4+4(空字节)+8+8(数组指针)=32
三、有若干个学校人员的信息,包括学生和教师。其中学生的数据包括: 姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
1,定义函数在堆区申请空间n
struct B*p=(struct B *)malloc(sizeof(struct B)n )
2定义函数实现录入学校人员信息
在输入分数或者职务是,需要判断职业。
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间
1)预处理阶段
#ifndef __HEAD2_H__
#define __HEAD2_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
union A
{
float score;
char work[10];
}d;
struct B
{
char name[20];
char sex;
char job;
union A d;
};
struct B *Space(int n);
struct B Input(struct B *p,int n);
struct B Output(struct B *p,int n);
void Average(struct B *p,int n);
void Number(struct B *p,int n);
struct B *Free(struct B *p);
#endif
2)函数声明
#include "head2.h"
struct B *Space(int n)
{
struct B *p=(struct B *)malloc(sizeof(struct B)*n);
if(p==NULL)
{
return NULL;
}
return p;
}
struct B Input(struct B *p,int n)
{
for(int i=0;i<n;i++)
{
printf("请输入姓名:");
scanf(" %s",(p+i)->name);
printf("请输入性别:");
scanf(" %c",&(p+i)->sex);
printf("请输入职业:");
scanf(" %c",&(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
{
printf("请输入学生分数:");
scanf(" %f",&(p+i)->d.score);
}
else if((p+i)->job=='t'||(p+i)->job=='T')
{
printf("请输入教师职务:");
scanf(" %s",(p+i)->d.work);
}
else
printf("职业输入错误\n");
}
}
struct B Output(struct B *p,int n)
{
for(int i=0;i<n;i++)
{
printf("姓名:%s 性别:%c 职业:%c ",(p+i)->name,(p+i)->sex,(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
printf("学生成绩:%.2f\n",(p+i)->d.score);
if((p+i)->job=='t'||(p+i)->job=='T')
printf("教师职务:%s\n",(p+i)->d.work);
}
}
void Average(struct B *p,int n)
{
int i,m=0;
float k=0;
for(i=0;i<n;i++)
{
if((p+i)->job=='s'||(p+i)->job=='S')
m++;
k+=(p+i)->d.score;
}
printf("学生平均成绩为%.2f\n",k/m);
}
void Number(struct B *p,int n)
{
int i,m=0;
for(i=0;i<n;i++)
{
if((p+i)->job=='t'||(p+i)->job=='T');
m++;
}
printf("教师的个数为%d\n",m);
}
struct B *Free(struct B *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
3)主函数
#include "head2.h"
int main(int argc, const char *argv[])
{
int n=4;
struct B *p=Space(n);
Input(p,n);
Output(p,n);
Average(p,n);
Number(p,n);
p=Free(p);
return 0;
}