结构体函数练习

1、编写一个程序,完成根据学员姓名查询成绩的功能(要求查询通过函数实现),
定义一个学员结构体,包含姓名,成绩,定义一个结构体数组,保存所有学员的
信息(假定有3个学生),首先录入学员信息,然后调用查询函数获得要查询学员成绩

/*
3.编写一个程序,完成根据学员姓名查询成绩的功能(要求查询通过函数实现),
定义一个学员结构体,包含姓名,成绩,定义一个结构体数组,保存所有学员的
信息(假定有3个学生),首先录入学员信息,然后调用查询函数获得要查询学员成绩
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h> 

typedef struct 
{
	char name[10];
	float score;	
}STU;

void struct_input(STU arr[],int n)
{
	for(int i=0;i<n;i++)
	{
		printf("请输入第%d位学员的信息:\n",i+1);
		scanf("%s",&arr[i].name);
		scanf("%f",&arr[i].score);
	}
}

void struct_seek(STU arr[],int n)
{
	char name_seek[10];
	printf("请输入要查询的学员姓名:\n");
	scanf("%s",&name_seek);
	for(int i=0;i<n;i++)
	{
		int ret=-1;
		ret=strcmp(name_seek,arr[i].name);
		if(ret==0)
		{
			printf("log:%d\n",i);
			printf("您要查询的%s的成绩为%.1f",arr[i].name,arr[i].score);
		}	
	}
		
}

void struct_print(STU arr[],int n)
{
	printf("姓名\t分数\n");
	for(int i=0;i<n;i++)
		printf("%s\t%.1f\n",arr[i].name,arr[i].score);
}

int main()
{
	STU arr[3];
	struct_input(arr,3);
	struct_print(arr,3);
	struct_seek(arr,3);
	
	return 0;
}

运行结果:

2、对一个结构体数组实现增删改查操作

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

typedef struct 
{
	int num;
	char name[20];
	char sex;
	float score;	
}boy;
	boy boy_test[6]={{101,"li ping",'m',45},
					{102,"zhang ping",'m',62.5},	
					{103,"he feng",'m',92.5},	
					{104,"cheng li",'f',87},	
					{106,"wang ming",'m',58},};
					
void struct_print(boy *p01,int n)
{
	printf("\n");
	printf("学号\t姓名\t	性别\t分数\n");
	for(int i=0;i<n;i++)
		printf("%d\t%s\t%c\t%.1f\t\n",(*(p01+i)).num,(*(p01+i)).name,(*(p01+i)).sex,(*(p01+i)).score);
}
void struct_count(boy boy_test01[],int n)
{
	int count=0;
	for(int i=0;i<n;i++)
	{
		if ((*(boy_test01+i)).score<60 && (*(boy_test01+i)).num != 0)
			count++;
	}
	printf("不及格人数为:%d\n",count);
}

void struct_insert(boy boy_test01[],int n)
{
	boy p =
	{
		.num=105,
		.name="ma li",
		.sex='f' ,
		.score=20
	};
	memcpy( (void *)(boy_test01+5), (void *)(boy_test01+4), sizeof(boy_test01[4]) );
	memcpy( (void *)(boy_test01+4), (void *)(&p), sizeof(boy_test01[4]));
}

void struct_del(boy boy_test01[],int n)
{
	boy p =
	{
		.num=0,
		.name="NULL",
		.sex='0' ,
		.score=0
	};
	memcpy( (void *)(boy_test01+3), (void *)(&p), sizeof(boy_test01[3]));
}

int main()
{
	boy *p=boy_test;
	struct_count(p,6);
	struct_print(p,6);
	struct_insert(p,6);
	struct_print(p,6);
	struct_del(p,6);
	struct_print(p,6);
	
	return 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
发出的红包

打赏作者

不掉头发的程序猿_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值