要求:(1)声明一个包含Volunteer:学号(无符号整数)、工作时长(单精度实数);(2)编写查找函数Volunteer*find(Volunteer volb【】,int n,int no),形参no为志愿者学号,要求按照学号查找志愿者,如果查找成功则返回该志愿者信息的指针;(3)编写排序函数void sort (Volunteer volb【】,int n),要求按照志愿者工作时长从高到低进行排序;(4)编写主函数void main(),要求使用动态分配内存,从堆区中获取6个长度为Volunteer类型长度的连续内存空间,初始化6个志愿者信息,以第3个志愿者的学号作为实惨调用find()函数进行查找,如果查找成功则输出该志愿者的详细信息;调用sort()函数,输出排序后的结果
时间: 2023-05-20 14:03:42 浏览: 80
基于VGI的土地覆被遥感产品精度验证
好的,让我来扮演C知道,回答你的问题。
以下是代码实现:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
struct Volunteer {
unsigned int id; // 学号
float hours; // 工作时长
};
// 查找函数
Volunteer* find(Volunteer volb[], int n, int no) {
for (int i = 0; i < n; i++) {
if (volb[i].id == no) {
return &volb[i];
}
}
return NULL;
}
// 排序函数
void sort(Volunteer volb[], int n) {
std::sort(volb, volb + n, [](const Volunteer& a, const Volunteer& b) {
return a.hours > b.hours;
});
}
int main() {
// 动态分配内存,获取6个长度为Volunteer类型长度的连续内存空间
Volunteer* volb = new Volunteer[6];
// 初始化6个志愿者信息
volb[0] = { 1001, 10.5 };
volb[1] = { 1002, 8.2 };
volb[2] = { 1003, 12.3 };
volb[3] = { 1004, 7.8 };
volb[4] = { 1005, 9.6 };
volb[5] = { 1006, 11.1 };
// 以第3个志愿者的学号作为实惨调用find()函数进行查找
Volunteer* pVol = find(volb, 6, volb[2].id);
if (pVol != NULL) {
// 如果查找成功则输出该志愿者的详细信息
cout << "Found volunteer with id " << pVol->id << ", worked for " << pVol->hours << " hours." << endl;
}
// 调用sort()函数,输出排序后的结果
sort(volb, 6);
cout << "Sorted volunteers by hours worked:" << endl;
for (int i = 0; i < 6; i++) {
cout << "Volunteer " << i + 1 << " with id " << volb[i].id << ", worked for " << volb[i].hours << " hours." << endl;
}
// 释放动态分配的内存
delete[] volb;
return 0;
}
```
希望我的回答能够帮到你!
阅读全文