结构体(简单练习)

/*定义学生结构体属性:姓名,年龄,分数,输入姓名密钥

查找密钥是否出现,存在则输出所有信息,否则提示查找失败

要求:使用类型胡枝子f

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

2,定义函数循环输入

3,定义函数实现输出

3,定义函数实现查找

4,释放空间*/

#ifndef __HEY_H__
#define __HEY_H__
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
	char name[20];
	int age;
	float score;
}stu_u;
stu_u* requestspace(int num);
void Input(stu_u*p,int num);
void Output(stu_u*p,int num);
void see(stu_u*p,int num);
void freespace(stu_u**p);
#endif
#include"key.c"
int main(int argc, const char *argv[])
{
	int num;
	printf("输入学生的个数");
	scanf("%d",&num);
	stu_u*p=requestspace(num);
	Input(p,num);
	Output(p,num);
	see(p,num);
	freespace(&p);
	return 0;
}
#include"key.h"
stu_u* requestspace(int num)
{
	stu_u*p=malloc(num*sizeof(stu_u));
	if(NULL==p){
		printf("申请空间失败");
		return NULL;
	}
	return p;
}
void Input(stu_u*p,int num)
{
	for(int i=0;i<num;i++){
		printf("输入姓名");
		scanf("%s",(p+i)->name);
		printf("输入年龄");
		scanf("%d",&(p+i)->age);
		printf("输入分数");
		scanf("%f",&(p+i)->score);
	}
}
void Output(stu_u*p,int num)
{
	for(int i=0;i<num;i++){
		printf("姓名%s年龄%d分数%.1f",(p+i)->name,(p+i)->age,(p+i)->score);
	}
}

void see(stu_u*p,int num)
{
	char key[20];
	printf("按照姓名查找");
	scanf("%s",key);
	for(int i=0;i<num;i++){
		if((strcmp(key,(p+i)->name))==0)
		{
			printf("姓名%s年龄%d分数%.1f",(p+i)->name,(p+i)->age,(p+i)->score);
		}
	}
}
void freespace(stu_u**p)
{
	free(*p);
	*p=NULL;
}

/*有若干个学校人员的信息,包括学生和教师.其中

学生的数据包括:姓名、性别、职业S/S.分数.

教师的数据包括:姓名、性别、职业t/T.职务.

要求用同一个表格来处理以上数据.

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

结构Bp=(struct B)malloc(size of(StructB)*n);

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

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

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

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

6,释放存储空间*/

#ifndef __STUTEA_H__
#define __STUTEA_H__
#include<stdio.h>
#include<stdlib.h>
#define N 2
typedef union {
	float score;
	char occupation[20];
}kind_t;
typedef struct{
	char name[20];
	char sex;
	char work;
	kind_t  people;
}school;

school* space(int n);
void insert(school *p,int n);
void Output(school *p,int n);
float average(school*p,int n);
int teacher(school*p,int n);
void freesapce(school**p);
#endif
/*有若干个学校人员的信息,包括学生和教师.其中
学生的数据包括:姓名、性别、职业S/S.分数.
教师的数据包括:姓名、性别、职业t/T.职务.
要求用同一个表格来处理以上数据.
1,定义函数在堆区申请空间n
结构B*p=(struct B*)malloc(size of(StructB)*n);
2,定义函数实现录入学校人员信息
3,定义函数输出学校人员信息
4,定义函数计算学生平均成绩
5,定义函数计算老师的个数
6,释放存储空间*/

#include"stutea.c"
int main(int argc, const char *argv[])
{
	school*L=space(N);
	insert(L,N);	
	Output(L,N);
	printf("输入平均值%.1f\n",average(L,N));
 	printf("老师的个数%d\n",teacher(L,N));
	freesapce(&p);
	return 0;
}
#include"stutea.h"
school* space(int n)
{
	school*p=(school*)malloc(n*sizeof(school));
	if(p==NULL){
		printf("申请空间失败");
		return NULL;
	}
	return p;
}
void insert(school *p,int n)
{
	for(int i=0;i<n;i++){
		printf("输入姓名");
		scanf("%s",(p+i)->name);
		printf("输入性别");
		getchar();
		scanf("%c",&((p+i)->sex));
		printf("输入职业");
		getchar();
		scanf("%c",&((p+i)->work));
		getchar();
		if((p+i)->work=='S'||(p+i)->work=='s'){
			printf("输入分数");
			scanf("%f",&((p+i)->people.score));
		}
		else if((p+i)->work=='T'||(p+i)->work=='t'){
			printf("输入职务");
			scanf("%s",(p+i)->people.occupation);
		}
		else{
			printf("输入错误,请重新输入");
			return;
		}
	}
}
#if 1
void Output(school *p,int n)
{
	for(int i=0;i<n;i++){
		if((p+i)->work=='S'||(p+i)->work=='s'){
			printf("姓名%s性别%c职业%c分数%.1f\n",(p+i)->name,(p+i)->sex,(p+i)->work,(p+i)->people.score);
		}
		else if((p+i)->work=='T'||(p+i)->work=='t'){
				printf("姓名%s性别%c职业%c职务%s\n",(p+i)->name,(p+i)->sex,(p+i)->work,(p+i)->people.occupation);
		}
		else{
			printf("打印错误");
			return;
		}
	}
}
#endif
float average(school*p,int n)
{
	int sum=0;
	int count=0;
	for(int i=0;i<n;i++){
		if((p+i)->work=='s'||(p+i)->work=='S'){
			sum+=(p+i)->people.score;
			count++;
		}
	}
	return (float)sum/count;
}
int teacher(school*p,int n)
{
	int count=0;
	for(int i=0;i<n;i++){
		if((p+i)->work=='t'||(p+i)->work=='T'){
			count++;
		}
	}
	return count;
}
void freesapce(school**p)
{
	free(*p);
	*p=NULL;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,结构体排序练习通常涉及到如何使用标准库中的算法对包含自定义数据类型的结构体数组或容器进行排序。这里我们可以举一个简单的例子,假设有一个名为`Student`的结构体,包含`name`和`age`两个成员: ```cpp struct Student { std::string name; int age; }; ``` 你可以用以下几种方法对`Student`结构体数组进行排序: 1. **直接排序:**如果年龄是排序的主要依据,你可以定义一个比较函数(`compare`),然后使用`std::sort`函数: ```cpp bool compareStudents(const Student& s1, const Student& s2) { return s1.age < s2.age; } int main() { Student students[] = {{"Alice", 20}, {"Bob", 18}, {"Charlie", 22}}; std::sort(students, students + sizeof(students) / sizeof(students), compareStudents); // 现在students数组按年龄升序排列 } ``` 2. **使用STL算法:**如果你的结构体已经实现了`<`运算符,那么可以直接使用`std::stable_sort`: ```cpp bool studentLess(const Student& s1, const Student& s2) { return s1.age < s2.age; } int main() { std::vector<Student> students = {{"Alice", 20}, {"Bob", 18}, {"Charlie", 22}}; std::stable_sort(students.begin(), students.end(), studentLess); } ``` 3. **自定义比较器(C++11及以上):**也可以使用lambda表达式来创建一个可传递的比较器: ```cpp int main() { std::vector<Student> students = {{"Alice", 20}, {"Bob", 18}, {"Charlie", 22}}; std::sort(students.begin(), students.end(), [](const Student& s1, const Student& s2) { return s1.age < s2.age; }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值