有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
1,定义函数在堆区申请空间n
struct B *p= (struct B * )malloc(sizeof(struct B)* n );
2,定义函数实现录入学校人员信息
在输入分数或者职务是,需要判断职业。
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间
fun.h文件内容
#ifndef __FUN1_H__
#define __FUN1_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char name[10];
char sex;
char job;
union
{
float score;
char position[5];
};
}per;
per *getspace(int n);
void input(int n,per *p);
void output(int n,per *p);
void average(int n,per *p);
void teacher_num(int n,per *p);
per *free_space(per *p);
#endif
fun.c文件
#include "fun1.h"
per *getspace(int n)
{
per *p=(per *)malloc(sizeof(per)*n);
if(p==NULL)
return NULL;
return p;
}
void input(int n,per *p)
{
for(int i=0;i<n;i++)
{
printf("请输入姓名,性别,职业--->\n");
scanf("%s %c %c",(p+i)->name,&(p+i)->sex,&(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
{
printf("请输入分数--->");
scanf("%f",&(p+i)->score);
}
else
{
printf("请输入对应的老师职位-->");
scanf("%s",(p+i)->position);
}
}
}
void output(int n,per *p)
{
for(int i=0;i<n;i++)
{
printf("name=%s\t sex=%c\t job=%c\n",(p+i)->name,(p+i)->sex,(p+i)->job);
if((p+i)->job=='s'||(p+i)->job=='S')
{
printf("分数为%f\n",(p+i)->score);
}
else
{
printf("对应的老师职位是%s\n",(p+i)->position);
}
}
}
void average(int n,per *p)
{
int count=0;
float sum=0;
for(int i=0;i<n;i++)
{ if((p+i)->job=='s'||(p+i)->job=='S')
{
sum+=(p+i)->score;
count++;
}
}
printf("学生平均分数是%f\n",sum/count);
}
void teacher_num(int n,per *p)
{
int count=0;
for(int i=0;i<n;i++)
{
if((p+i)->job!='s'&&(p+i)->job!='S')
count++;
}
printf("老师个数为%d\n",count);
}
per *free_space(per *p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
main.c
#include "fun1.h"
int main(int argc, const char *argv[])
{
int n;
printf("please input n-->");
scanf("%d",&n);
per *p=getspace(n);
input(n,p);
output(n,p);
average(n,p);
teacher_num(n,p);
p=free_space(p);
return 0;
}
/**************************/
//运行结果
please input n-->3
请输入姓名,性别,职业--->
x w s
请输入分数--->12
请输入姓名,性别,职业--->
r w s
请输入分数--->34
请输入姓名,性别,职业--->
d m t
请输入对应的老师职位-->english
name=x sex=w job=s
分数为12.000000
name=r sex=w job=s
分数为34.000000
name=d sex=m job=t
对应的老师职位是english
学生平均分数是23.000000
老师个数为1
定义商品结构体:名称,单价,个数
1,定义函数在堆区申请空间
2,定义函数实现输入
3,计算商品总价格
4,计算最贵的商品信息
5,输入一个商品名称,查找单价信息
6,实现商品按单价排序
7,释放空间
fun.h文件
#ifndef __FUN2_H__
#define __FUN2_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
char name[20];
float price;
int num;
}goods;
goods *get_space(int n);
void input(goods *p,int n);
void total_price(goods *p,int n);
void max_price(goods *p,int n);
void find_message(goods *p,int n);
void sort(goods *p,int n);
goods *free_space(goods* p);
#endif
fun2.c文件
#include "fun2.h"
goods *get_space(int n)
{
goods *p=(goods *)malloc(sizeof(goods)*n);
if(p==NULL)
return NULL;
return p;
}
void input(goods *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 total_price(goods *p,int n)
{
float sum=0;
for(int i=0;i<n;i++)
{
sum+=((p+i)->num)*((p+i)->price);
}
printf("商品总价格为%f\n",sum);
}
void max_price(goods *p,int n)
{
float max=p->price;
for(int i=0;i<n;i++)
{
if(max<(p+i)->price)
{
max=(p+i)->price;
}
}
printf("商品中的最大价格为%f\n",max);
}
void find_message(goods *p,int n)
{
char temp[20];
printf("请输入需要查找的商品名称-->");
scanf("%s",temp);
for(int i=0;i<n;i++)
{
if(strcmp((p+i)->name,temp)==0)
{
printf("对应的商品信息是名称为%s,单价为%f,个数为%d\n",(p+i)->name,(p+i)->price,(p+i)->num);
}
}
}
void sort(goods *p,int n)
{
goods temp;
for(int i=1;i<n;i++)
{
for(int j=0;j<n-1;j++)
{
if((p+j)->price>(p+j+1)->price)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
printf("按价格排序后的商品顺序-->\n");
printf("名称\t单价\t个数\n");
for(int i=0;i<n;i++)
{
printf("%s\t%f\t%d\n",(p+i)->name,(p+i)->price,(p+i)->num);
}
}
goods *free_space(goods* p)
{
if(p==NULL)
return NULL;
free(p);
p=NULL;
return p;
}
main.c
#include "fun2.h"
int main(int argc, const char *argv[])
{
int n;
printf("请输入需要录入的商品个数-->");
scanf("%d",&n);
goods *p=get_space(n);
input(p,n);
total_price(p,n);
max_price(p,n);
find_message(p,n);
sort(p,n);
p=free_space(p);
return 0;
}
请输入需要录入的商品个数-->3
请输入商品名称--->薯片
请输入商品单价--->5
请输入商品个数--->6
请输入商品名称--->辣条
请输入商品单价--->3
请输入商品个数--->10
请输入商品名称--->冰棍
请输入商品单价--->5
请输入商品个数--->10
商品总价格为110.000000
商品中的最大价格为5.000000
请输入需要查找的商品名称-->薯片
对应的商品信息是名称为薯片,单价为5.000000,个数为6
按价格排序后的商品顺序-->
名称 单价 个数
辣条 3.000000 10
薯片 5.000000 6
冰棍 5.000000 10
计算字节个数
typedef struct
{
int a;
short b;
float c;
double d;
int (*p)[3];
};
字节数为32个