数据结构day2 4.18作业

有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业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个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值