【20230328华清远见+数据结构 2day】

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

head.h

#ifndef N
#define N

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

typedef struct person{
	char name[32];
	char sex;
	char job;
	union 
	{
		double socre;
		char position[32];
	};
}per, *p_per;

p_per create(int n);
void input(p_per,int );
void output(p_per,int );
void my_student(p_per, int);
void my_ter(p_per, int);
p_per my_free(p_per p);


#endif



main.c
#include"head.h"
int main(int argc, const char *argv[])
{
	int n;
	printf("请输入需要录入的人员数量:");
	scanf("%d",&n);

	p_per t=create(n);//申请堆区的空间
	
	input(t,n);//录入学校人员信息
	
	output(t,n);//输出学校人员信息
	
	my_student(t,n);//计算 学生 平均成绩

	my_ter(t, n);//计算 老师 的个数

	t=my_free(t);//释放存储空间
	
	return 0;
}


test.c

#include"head.h"

/*
 * function:    堆区申请空间
 * @param [ in]   
 * @param [out] 
 * @return       堆区首地址
 */

p_per create(int n){
	p_per p=(p_per)malloc(sizeof(per)*n);
	if(p==NULL)
		return NULL;
	return p;
}

/*
 * function:    录入学校人员信息
 * @param [ in] 数组首地址
 * @param [out] 
 * @return      数组的首地址
 */
void input(p_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("%lf", &(p+i)->socre);
		}else{
			printf("请输入职务:");
			scanf("%s", (p+i)->position);
		}
	}
}

/*
 * function:    输出学校人员信息
 * @param [ in] 数组的首地址,数组个数
 * @param [out] 
 * @return     数组的首地址 
 */

void output(p_per p,int n){
	printf("姓名:\t性别:\t 职业:\t成绩/职务:\n");
	for(int i=0; i<n;i++){
		if((p+i)->job == 's' || (p+i)->job=='S'){	
			printf("姓名:%s\t性别:%c\t 职业:%c\t成绩:%.2lf\n",(p+i)->name, (p+i)->sex,(p+i)->job,(p+i)->socre);
		}else{
			printf("姓名:%s\t性别:%c\t 职业:%c\t职务:%s\n",(p+i)->name, (p+i)->sex,(p+i)->job,(p+i)->position);
		}
	
	}

}
/*
 * function:    计算学生平均成绩
 * @param [ in] 
 * @param [out] 
 * @return      空
 */
void my_student(p_per p, int n){
	double sum=0.0;   //总分
	int k=0;          //用于计算学生的人数
	double aver=0.0;  //平均分
	for(int i=0; i<n;i++){
		if((p+i)->job == 's' || (p+i)->job=='S'){
			k++;
			sum+=(p+i)->socre;
			}
		}
	aver= 1.0*sum/k;
	printf("学生的平均成绩:%.2lf\n", aver);
}

/*
 * function:    计算老师的人数
 * @param [ in] 
 * @param [out] 
 * @return      
 */

void my_ter(p_per p, int n){
	int k=0;//用于计算老师的人数	
	for(int i=0; i<n;i++){
		if((p+i)->job == 't' || (p+i)->job=='T'){
			k++;
		}
	}
	printf("老师的人数为:%d位\n", k);
}

/*
 * function:    释放存储空间
 * @param [ in] 
 * @param [out] 
 * @return      空指针
 */

p_per my_free(p_per p){
	if(p==NULL)	return NULL;
	free(p);
	p=NULL;
	return p;
}
```c

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

头文件

#ifndef HEAD_C
#define HEAD_C
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

typedef struct CAR{
	char name[32];
	char color[20];
	int price;
}car, *c_car;

c_car create();//申请5个连续的堆区空间
void input(c_car );
c_car bubble(c_car );
void output(c_car);
c_car my_free(c_car);

#endif

main.c


int main(int argc, const char *argv[])
{
	c_car t=create();

	input(t);

	t=bubble(t);

	output(t);

	t=my_free(t);

	return 0;
}

test.c

#include"head.h"
c_car create(){
	c_car t=(c_car)malloc(sizeof(car)*5);
	if(t==NULL) return NULL;
	return t;
}

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

c_car bubble(c_car t){
	for(int i=1;i<5;i++){
		for(int j=0; j<5-i;j++){
			if((t+j)->price > (t+j+1)->price){
				car temp=*(t+j);*(t+j)=*(t+j+1);*(t+j+1)=temp;
			}
		}
	}
	return t;
}

void output(c_car t){
	for(int i=0; i<5;i++){
		printf("品牌:%s\t颜色:%s\t价格:%d\n", (t+i)->name, (t+i)->color, (t+i)->price );
	}
}

c_car my_free(c_car t){
	if(t==NULL) return NULL;
	free(t);
	return NULL;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值