数据结构_Day02

该代码示例展示了如何使用C语言在堆区动态分配内存来存储学校人员(学生和教师)的信息,包括姓名、性别、职业和分数/职务,并实现了信息录入、输出、学生平均成绩计算和教师数量统计功能。此外,还提供了车辆信息管理的例子,包括车辆品牌、颜色和价格的输入、排序及输出,使用了冒泡排序算法。
摘要由CSDN通过智能技术生成

作业1

有若干个学校人员的信息,包括学生和教师。其中学生的数据包括:姓名、性别、职业s/S、分数。教师的数据包括:姓名、性别、职业t/T、职务。要求用同一个表格来处理以上数据。
1,定义函数在堆区申请空间n
struct B p= (struct B * )malloc(sizeof(struct B) n );
2,定义函数实现录入学校人员信息
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);
}
}
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//结构体和共用体嵌套
//用来存储学生和教师信息
typedef struct Information
{
	char name[20];
	char sex;
	char job;
	union {
		float score;
		char position[20];
	};
}information;
information * my_malloc(int n);
void get_input(information * p, int n);
void put_output(information * p, int n);
float score_average(information * p, int n);
int cnt_teacher(information * p, int n);
void * my_free(information * p);
#endif

fun.c

#include"head.h"

//为结构体分配堆空间
information * my_malloc(int n)
{
	information * p = (information *)malloc(n*sizeof(information));
	if(p == NULL)
		return p;
	return p;
}
//	其中学生的数据包括:姓名、性别、职业s/S、分数。
// 教师的数据包括:姓名、性别、职业t/T、职务。
void get_input(information * p, int n)
{
	int i = 0;
	for(i = 0; i<n; i++)
	{
		printf("请输入第%d个人员的姓名:", i+1);
		scanf( " %s", &((p+i)->name) );
		printf("请输入第%d个人员的性别:", i+1);
		scanf(" %c", &((p+i)->sex));
		printf("请输入第%d个人员的职业:", i+1);
		scanf(" %c", &((p+i)->job) );
		//检查输入是否合法
		while((p+i)->job != 't' && (p+i)->job != 'T' && (p+i)->job != 's' && (p+i)->job != 'S')
		{
			printf("第%d个人员的职业输入错误,请输入s/S/t/T:");
			scanf(" %c", &((p+i)->job));
		}
		if((p+i)->job == 's'||(p+i)->job == 'S')
		{
			printf("请输入第%d个人员的分数:", i+1);
			scanf(" %f", &((p+i)->score));
		}
		else if((p+i)->job == 't'||(p+i)->job == 'T')
		{
			printf("请输入第%d个人员的职务:", i+1);
			scanf(" %s", &((p+i)->position));
		}
	}
}
void put_output(information * p, int n)
{
	int i = 0;
	printf("编号\t姓名\t性别\t职业\t分数/职务\n");
	for(i = 0; i<n; i++)
	{
		printf("%d\t%s\t%c\t%c\t", i+1, (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 if((p+i)->job == 't'||(p+i)->job == 'T')
		{
			printf("%s\n", (p+i)->position );
		}
		else	
		{
			printf("职业信息错误!\n" );
		}
	}
}
//求所有学生平均值
float score_average(information * p, int n)
{
	int i = 0, cnt = 0;
	float score_sum = 0;
	for(i = 0; i<n; i++)
	{
		if((p+i)->job == 's'||(p+i)->job == 'S')
		{
			score_sum += (p+i)->score;
			cnt++;
		}
	}	
	return score_sum/cnt;
}
int cnt_teacher(information * p, int n)
{
	int i = 0, cnt = 0;
	for(i = 0; i<n; i++)
	{
		if((p+i)->job == 't'||(p+i)->job == 'T')
		{
			cnt++;
		}
	}	
	return cnt;
}
void * my_free(information * p)
{
	if(p == NULL)
		return NULL;
	free(p);
	p = NULL;
	return NULL;
}

main.c

#include"head.h"

int main(int argc, char const *argv[])
{
	int n;
	information * p;
	p = my_malloc(n);

	printf("请输入要录入的人员数量:");
	scanf(" %d", &n);

	get_input(p, n);	//打印提示,并接收用户输入
	put_output(p, n);		//输出所有人员信息
	printf("所有学生平均成绩为:%.2f\n", score_average(p, n) );
	printf("所有老师人数为:%d\n", cnt_teacher(p, n) );
	free(p);
	p = NULL;
	if(p == NULL)
		printf("空间释放完成。\n");
	return 0;
}

作业2

在堆区申请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>释放堆区空间

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//结构体和共用体嵌套
//用来存储学生和教师信息
typedef struct CarInfo
{
	char brand[20];
	char color[10];
	int price;
}carinfo;
carinfo * my_malloc(int n);
void get_input(carinfo * p, int n);
void car_sort_bubble(carinfo * p, int n);
void put_output(carinfo * p, int n);
void * my_free(carinfo * p);
#endif

fun.c

#include"head.h"

//为结构体分配堆空间
carinfo * my_malloc(int n)
{
	carinfo * p = (carinfo *)malloc(n*sizeof(carinfo));
	if(p == NULL)
		return p;
	return p;
}

void get_input(carinfo * p, int n)
{
	int i = 0;
	for(i = 0; i<n; i++)
	{
		printf("请输入第%d个车辆的品牌:", i+1);
		scanf( " %s", &((p+i)->brand) );
		printf("请输入第%d个车辆的颜色:", i+1);
		scanf(" %s", &((p+i)->color));
		printf("请输入第%d个车辆的价格:", i+1);
		scanf(" %d", &((p+i)->price) );
	}
}
void car_sort_bubble(carinfo * p, int n)
{
	carinfo temp_carinfo;
	int i, j;
	for(i = 0;i<n-1;i++)
	{
		int cnt = 0;
		for(j = 0; j<n-1-i; j++)
		{
			if((p+j)->price>(p+j+1)->price)
			{
				temp_carinfo = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp_carinfo;
				cnt++;
			}
		}
		if (cnt == 0)
			break;
	}
}
void put_output(carinfo * p, int n)
{
	int i = 0;
	printf("编号\t品牌\t颜色\t价格\n");
	for(i = 0; i<n; i++)
	{
		printf("%d\t%s\t%s\t%d\n", i+1, (p+i)->brand, (p+i)->color, (p+i)->price );
	}
}

void * my_free(carinfo * p)
{
	if(p == NULL)
		return NULL;
	free(p);
	p = NULL;
	return NULL;
}

main.c

#include"head.h"
//为结构体分配堆空间
carinfo * my_malloc(int n)
{
	carinfo * p = (carinfo *)malloc(n*sizeof(carinfo));
	if(p == NULL)
		return p;
	return p;
}

void get_input(carinfo * p, int n)
{
	int i = 0;
	for(i = 0; i<n; i++)
	{
		printf("请输入第%d个车辆的品牌:", i+1);
		scanf( " %s", &((p+i)->brand) );
		printf("请输入第%d个车辆的颜色:", i+1);
		scanf(" %s", &((p+i)->color));
		printf("请输入第%d个车辆的价格:", i+1);
		scanf(" %d", &((p+i)->price) );
	}
}
void car_sort_bubble(carinfo * p, int n)
{
	carinfo temp_carinfo;
	int i, j;
	for(i = 0;i<n-1;i++)
	{
		int cnt = 0;
		for(j = i; j<n-1-i; j++)
		{
			if((p+j)->price>(p+j+1)->price)
			{
				temp_carinfo = *(p+j);
				*(p+j) = *(p+j+1);
				*(p+j+1) = temp_carinfo;
				cnt++;
			}
		}
		if (cnt == 0)
			break;
	}
}
void put_output(carinfo * p, int n)
{
	int i = 0;
	printf("编号\t品牌\t颜色\t价格\n");
	for(i = 0; i<n; i++)
	{
		printf("%d\t%s\t%s\t%d", i+1, (p+i)->brand, (p+i)->color, (p+i)->price );
	}
}

void * my_free(carinfo * p)
{
	if(p == NULL)
		return NULL;
	free(p);
	p = NULL;
	return NULL;
}

int main(int argc, char const *argv[])
{
	int n = 5;
	carinfo * p;
	p = my_malloc(n);


	get_input(p, n);	//打印提示,并接收用户输入
	put_output(p, n);		//输出所有车辆信息
	car_sort_bubble(p, n);  //排序
	put_output(p, n);		//输出所有车辆信息

	free(p);
	p = NULL;
	if(p == NULL)
		printf("空间释放完成。\n");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值