数据结构day2

1、有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。

        1,定义函数在堆区申请空间n

        struct B *p= (struct B * )malloc(sizeof(struct B)* n );

        2,定义函数实现录入学校人员信息

        在输入分数或者职务是,需要判断职业。

        3,定义函数输出学校人员信息

        4,定义函数计算学生平均成绩

        5,定义函数计算老师的个数

        6,释放存储空间

//main.c

#include "fun3.h"
int main(int argc, const char *argv[])
{
	int n=2;
	P *p=creat(n);
	datain(p,n);
	printf("-------------------\n");
	dataout(p,n);
	printf("-------------------\n");
	ave(p,n);
	printf("-------------------\n");
	lsgs(p,n);
	printf("-------------------\n");

	
	p=myfree(p);
	return 0;
}

fun.c

#include "fun3.h"


P *creat(int n)
{
	P *p=(P *)malloc(sizeof(P)*n);
	if(p==NULL)
	{
		printf("---------\n");
		return NULL;
	}
	return p;
}

void datain(P *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)->zy));

		if((p+i)->zy=='S')
		{
		printf("输入分数:");
		scanf("%d",&((p+i)->score));
		}
		else
		{
		printf("输入职务:");
		scanf("%s",(p+i)->zw);
		}
		putchar(10);

	}
}

void ave(P *p,int n)
{
	float sum=0,t=0;
	for(int i=0;i<n;i++)
	{
		if((p+i)->zy=='S')
		{
			sum+=(p+i)->score;
			t+=1;
		}
	}
	if(t==0)
	{
		printf("平均值:%d.00\n",0);
	}
	else 
	{
		printf("平均值:%f\n",sum/t);
	}
}

void lsgs(P *p,int n)
{
	int t=0;
	for(int i=0;i<n;i++)
	{
		if((p+i)->zy!='S')
		{
			t+=1;
		}
	}
	printf("老师个数:%d\n",t);
}



void dataout(P *p,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("姓名:%s\t\t",(p+i)->name);
		printf("性别:%c\t\t",(p+i)->sex);
		printf("职业:%c\t\t",(p+i)->zy);

		if((p+i)->zy=='S')
		{
		printf("分数:%d\n",(p+i)->score);
		}
		else
		{
		printf("职务:%s\n",(p+i)->zw);
		}

	}
}


P *myfree(P *p)
{
	if(p==NULL) return NULL;
	free(p);
	p=NULL;
	return p;
}

fun.h

#ifndef __FUN3_H__
#define __FUN3_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct
{
	char name[10];
	char sex;
	char zy;
	union 
	{
		int score;
		char zw[10];
	};
}P;



P *creat(int n);
void datain(P *p,int n);
void dataout(P *p,int n);
void ave(P *p,int n);
void lsgs(P *p,int n);
P *myfree(P *p);



#endif

结果展示

linux@linux:~/Desktop/demo2/work1$ gcc main3.c fun3.c
linux@linux:~/Desktop/demo2/work1$ ./a.out 
输入姓名:qq
输入性别:w
输入职业:S
输入分数:456

输入姓名:aa
输入性别:m
输入职业:T
输入职务:chinese

-------------------
姓名:qq		性别:w		职业:S		分数:456
姓名:aa		性别:m		职业:T		职务:chinese
-------------------
平均值:456.000000
-------------------
老师个数:1
-------------------

2、定义商品结构体:名称,单价,个数

        1,定义函数在堆区申请空间

        2,定义函数实现输入

        3,计算商品总价格

        4,计算最贵的商品信息

        5,输入一个商品名称,查找单价信息

        6,实现商品按单价排序

        7,释放空间

main.c

#include "fun.h"
int main(int argc, const char *argv[])
{
	int n=3;
	S *p=creat(n);
	printf("--------------------------------------------\n");
	input(p,n);
	printf("--------------------------------------------\n");
	allpr(p,n);
	printf("--------------------------------------------\n");
	most(p,n);
	printf("--------------------------------------------\n");
	look(p,n);
	printf("--------------------------------------------\n");
	px(p,n);
	output(p,n);
	printf("--------------------------------------------\n");
	p=myfree(p);
	return 0;
}

fun.c

#include "fun.h"

S *creat(int n)
{
	S *p=(S *)malloc(sizeof(S)*n);
	if(p==NULL) return NULL;
	return p;
}



//---------------------
void input(S *p,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("输入名称:");
		scanf("%s",(p+i)->name);
		printf("输入价格:");
		scanf("%d",&(p+i)->price);
		printf("输入个数:");
		scanf("%d",&(p+i)->num);
		putchar(10);
	}
}

//---------------------
void allpr(S *p,int n)
{
	for(int i=0;i<n;i++)
	{
		printf("商品%s的总价为:%d\n",(p+i)->name,((p+i)->price)*((p+i)->num));
	}
}
//--------------------
void most(S *p,int n)
{
	int t=p->price;
	int i,q;
	for(i=0;i<n;i++)
	{
		if(t<(p+i)->price)
		{
			t=(p+i)->price;
			q=i;
		}
	}
	printf("最贵的商品为%s单价是:%d\n",(p+q)->name,t);
}

//--------------------
void look(S *p,int n)
{
	char a[10];
	printf("输入要查找的商品名:");
	scanf("%s",a);
	for(int i=0;i<n;i++)
	{
		if(strcmp(a,(p+i)->name)==0)
		{
			printf("商品%s的单价为:%d\n",(p+i)->name,(p+i)->price);
		}
	}
}

//--------------------
void px(S *p,int n)
{
	S t;
	int count=0;
	for(int i=1;i<n;i++)
	{
		for(int j=0;j<n-i;j++)
		{
			if((p+j)->price>(p+j+1)->price)
			{
				t=*(p+j);
				*(p+j)=*(p+j+1);
				*(p+j+1)=t;
				count+=1;
			}
		}
		if(count!=0) break;
	}
}

//-------------------
void output(S *p,int n)
{
	printf("排序后的商品如下:\n");
	printf("名称\t\t单价\t\t个数\n");
	for(int i=0;i<n;i++)
	{
		printf("%s\t\t%d\t\t%d\n",(p+i)->name,(p+i)->price,(p+i)->num);
	}
}


//--------------------
S *myfree(S *p)
{
	if(p==NULL) return NULL;
	free(p);
	p=NULL;
	return p;
}

fun.h

#ifndef __FUN_H__
#define __FUN_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct
{
	char name[10];
	int price;
	int num;
}S;


S *creat(int n);
void input(S *p,int n);
void allpr(S *p,int n);
void most(S *p,int n);
void look(S *p,int n);
void px(S *p,int n);
void output(S *p,int n);
S *myfree(S *p);

#endif
linux@l

结果演示

linux@linux:~/Desktop/demo2/work2$ gcc main.c fun.c
linux@linux:~/Desktop/demo2/work2$ ./a.out 
--------------------------------------------
输入名称:aa
输入价格:30
输入个数:100

输入名称:ss
输入价格:10
输入个数:200

输入名称:dd
输入价格:60
输入个数:300

--------------------------------------------
商品aa的总价为:3000
商品ss的总价为:2000
商品dd的总价为:18000
--------------------------------------------
最贵的商品为dd单价是:60
--------------------------------------------
输入要查找的商品名:ss
商品ss的单价为:10
--------------------------------------------
排序后的商品如下:
名称		单价		个数
ss		10		200
aa		30		100
dd		60		300
--------------------------------------------

3、请计算字节的个数

        typedef struct

        {

                int a;

                short b;

                float c;

                double d;

                int (*p)[3];

        };

32个!!!!! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值