数据结构Day2

 

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

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

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

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

for(int i=0;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)->score);

}

else

{

printf("请输入职务:");

scanf("%s",(p+i)->position);

}

}

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

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

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

6,释放存储空间

 头文件

#ifndef __HEAD_H__//防止重复定义
#define __HEAD_H__
#include<string.h>
#include<stdio.h>
#include<stdlib.h>

typedef struct person

{
	char name[20];
	char sex;
	char job;
	union
	{
		float score;
		char position[20];

	};
}per;

per *create(int n);
void Input(per *p,int n);
void Output(per *p,int n);
void Avg(per *p,int n);
void Num(per *p,int n);
per *free_space(per*p);
#endif

主函数

#include "head.h"

int main(int argc, const char *argv[])
{
	
	int n;
	printf("请输入的人员人数: \n");
	scanf("%d",&n);
	per *p=create(n);

	Input(p,n);
	Output(p,n);

	Avg(p,n);
	Num(p,n);

	p=free_space(p);
	
	return 0;
}

自定义函数

#include "head.h"
//在堆区申请空间
per *create(int n)
{
	per*p=(per *)malloc(sizeof(per)* n);
	if(p==NULL)
		return NULL;
	return p;
}

//录入学校人员信息

void Input(per *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)->score);
		}
		else
		{
			printf("请输入职务: ");
			scanf("%s",(p+i)->position);
		}
	}
}


void Output(per *p,int n)
{

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


			if((p+i)->job=='s'||(p+i)->job=='S')
				printf("分数:%.2f\n",(p+i)->score);
			else
				printf("职务:%s\n",(p+i)->position);

	}
}
	

void Avg(per *p,int n)
{

	int i;
	int count=0;
	float sum=0;

	for(i=0;i<n;i++)
	{
		sum+=(p+i)->score;
		count++;
	}
	printf("平均分是:%.2f\n",sum/count);
}

void Num(per *p,int n)

{
	int count=0;
	int i;
	for(i=0;i<n;i++)
	{
	if((p+i)->job=='t'||(p+i)->job=='T')
		count++;
	}
	printf("共有%d个教师",count);
}

per *free_space(per*p)
{
	if(p==NULL)
		return NULL;
	free(p);
	p=NULL;
	return p;
}

在堆区申请5个连续的存储空间,实现车辆信息的输入(品牌,颜色,价格)

1>调用函数在堆区申请空间

2>调用函数实现输入

3>调用函数对价格排序

思路:和正常的冒泡是一样的

注意点:

1>if(条件) 条件是价格的比较 (p+j)->price (p+j+1)->price

2> 交换的是整个车的信息

例如: (p+j)表示整个车的地址

*(p+j)表示整个车的信息

交换的是*(p+j) 和*(p+j+1) 对应的整体信息

3> 注意中间变量t的类型,应该是结构体类型

4>调用函数输出

5>释放堆区空间

头文件

#ifndef __HEAD_H__
#define __HEAD_H__

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

typedef struct car
{
	char name[20];
	char color[10];
	int price;

}car,*p_car;

p_car create();
void input(p_car p);
void sort(p_car p);
void output(p_car p);
p_car free_space(p_car p);
#endif

主函数

#include"head.h"

int main(int argc, const char *argv[])
{
	//在堆区申请结构体空间
p_car p= create();
//输入车辆的信息
input(p);
//按价格排序
sort(p);
//输出车辆信息
output(p);
//释放空间
p=free_space(p);
	return 0;
}

自定义函数

#include"head.h"

p_car create()
{
	p_car p=(p_car)malloc(sizeof(car)*5);
	if(p==NULL)
		return NULL;
			return p;
}

//输入车辆的信息
void input(p_car p)
{
	for(int i=0;i<5;i++)
	{
		printf("请输入车辆的品牌: ");
		scanf("%s",(p+i)->name);
		printf("请输入车辆的颜色: ");
		scanf("%s",(p+i)->color);
		printf("请输入车辆的价格: ");
		scanf("%d",&(p+i)->price);
		printf("\n");
	}
}

//按价格排序
void sort(p_car p)
{
	int i,j;
	car t;
	for(i=1;i<5;i++)
		for(j=0;j<5;j++)
			if((p+j)->price>(p+j+1)->price)
			{
				t=*(p+j);
				*(p+j)=*(p+j+1);
				*(p+j+1)=t;
			}
}


//输出车辆信息

void output(p_car p)
{
	for(int i=0;i<5;i++)
		printf("%s\t%s\t%d\n",(p+i)->name,(p+i)->color,(p+i)->price);
}


//释放空间
p_car free_space(p_car p)
{
	if(p==NULL)
		return NULL;
	free(p);
	p=NULL;
	return p;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值