人员的记录由编号和出生年、月、日组成,n名人员的数据已在主函数中存入结构体数组std中,且编号唯一。 函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若制定编号不存在,返回数据中的编号为空串。
时间: 2023-05-31 18:19:18 浏览: 107
stm32H库的内部FLASH读写操作与结构体数组数据写入与读取
### 回答1:
函数fun的实现可以参考以下代码:
```
#include <stdio.h>
#include <string.h>
#define MAX_N 100
struct Person {
char id[20];
int year, month, day;
};
struct Person std[MAX_N];
struct Person find_person(char* id, int n) {
for (int i = ; i < n; i++) {
if (strcmp(std[i].id, id) == ) {
return std[i];
}
}
struct Person empty_person = {"", , , };
return empty_person;
}
int main() {
// 假设已经从文件或键盘读入了n个人员的数据,存入std数组中
int n = 10;
for (int i = ; i < n; i++) {
sprintf(std[i].id, "ID%03d", i+1);
std[i].year = 199 + i % 10;
std[i].month = 1 + i % 12;
std[i].day = 1 + i % 28;
}
// 在主函数中调用find_person函数查找指定编号的人员数据
char id[20];
printf("请输入要查找的人员编号:");
scanf("%s", id);
struct Person p = find_person(id, n);
if (strlen(p.id) == ) {
printf("编号为%s的人员不存在\n", id);
} else {
printf("编号为%s的人员信息如下:\n", id);
printf("出生日期:%d年%d月%d日\n", p.year, p.month, p.day);
}
return ;
}
```
在上述代码中,我们定义了一个结构体Person,用于存储每个人员的编号和出生日期。然后,我们在主函数中模拟了一些人员数据,并调用了find_person函数来查找指定编号的人员数据。如果找到了对应的人员数据,就将其返回;否则,返回一个空的Person结构体,其中编号为空串。最后,在主函数中根据返回值输出相应的信息。
### 回答2:
这道题要求我们写一个函数,根据给定的编号去查找某个人员的数据。函数的输入是一个结构体数组和一个所需查找的编号,输出是该编号对应的人员数据。如果该编号不存在,则输出一个空字符串。
我们可以通过遍历结构体数组找到对应编号的人员数据,找到后将其返回即可。具体代码如下:
```c
#include <stdio.h>
#include <string.h>
// 定义结构体,包括编号、出生年、月、日
struct Person {
char id[10];
int year;
int month;
int day;
};
// 查找函数,输入结构体数组和所需查找的编号,输出对应的人员数据
struct Person find_person(struct Person std[], int n, char id[]) {
int i;
for (i = 0; i < n; i++) {
if (strcmp(std[i].id, id) == 0) { // 判断编号是否相等
return std[i]; // 返回对应的人员数据
}
}
struct Person empty = {"", 0, 0, 0}; // 定义一个空结构体返回空字符串
return empty;
}
int main() {
struct Person std[3] = { // 定义结构体数组
{"001", 1998, 1, 1},
{"002", 1999, 2, 2},
{"003", 2000, 3, 3}
};
struct Person p1 = find_person(std, 3, "002"); // 查找编号为"002"的人员数据
if (strcmp(p1.id, "") == 0) { // 判断是否为空字符串
printf("该编号不存在\n");
} else { // 输出对应的人员数据
printf("编号:%s,出生日期:%d-%02d-%02d\n", p1.id, p1.year, p1.month, p1.day);
}
struct Person p2 = find_person(std, 3, "004"); // 查找编号为"004"的人员数据
if (strcmp(p2.id, "") == 0) { // 判断是否为空字符串
printf("该编号不存在\n");
} else { // 输出对应的人员数据
printf("编号:%s,出生日期:%d-%02d-%02d\n", p2.id, p2.year, p2.month, p2.day);
}
return 0;
}
```
以上代码中,我们先定义了一个结构体,包括编号、出生年、月、日四个属性,然后在主函数中定义了一个结构体数组,用于存储人员数据。接着,在`find_person`函数中,我们使用了一个`for`循环来遍历结构体数组,判断输入的编号是否等于结构体数组中的编号。如果相等,则返回对应的人员数据;如果不相等,则返回一个空结构体,表示该编号不存在。在主函数中,我们分别调用`find_person`函数查找编号为"002"和"004"的人员数据,并输出对应的结果。
最后需要注意的是,如果在主函数中直接使用`strcmp`函数来判断返回的结构体是否为空结构体,会出现一个“段错误”(segmentation fault)的错误,因为返回的空结构体并没有初始化,其中的字符串id并没有被赋值为空字符串。为了解决这个问题,我们需要在函数中先定义一个空结构体,并将其中的字符串id赋值为空字符串。
### 回答3:
本题是一个涉及结构体数组的问题。结构体数组是一种将多个不同数据类型的数据打包存储的一种方式,其可视化表示如下:
```
struct Person {
char id[20];
int birth_year;
int birth_month;
int birth_day;
};
Person std[N]; // 结构体数组
```
其中,`Person`被定义为一个结构体,包含了编号、出生年、月、日等成员变量。我们需要在 `fun` 函数中实现指定编号人员的查找功能,并将其作为函数返回值返回。
题目要求函数返回的是一个结构体类型的值,因此我们可以先定义一个空的 `Person` 类型的数据变量,用于保存查找结果。在查找过程中,我们需要遍历结构体数组 `std`,比较每个人员的编号是否和给定编号相同。如果找到了与给定编号相同的人员,我们就可以将该人员的全部信息(包括编号、出生年、月、日)赋值给结果变量,并将其返回。
如果遍历了所有人员还没有找到目标编号,我们就需要根据题目要求返回一个空串。这可以通过将结果变量的编号成员变量置为空串(即赋值为 `""`)来实现。
完整的 `fun` 函数实现如下:
```
Person fun(char* target_id, Person* std, int n) {
// 定义结果变量
Person result = {"", 0, 0, 0};
// 遍历结构体数组,比较编号
for (int i = 0; i < n; i++) {
if (strcmp(target_id, std[i].id) == 0) {
// 找到目标编号
result = std[i]; // 将该人员信息赋值给结果变量
break;
}
}
return result;
}
```
在主函数中调用 `fun` 函数,并输出结果,代码如下:
```
int main() {
// 假设给定的人员编号为"001",std为预定义的结构体数组,n为其长度
char target_id[20] = "001";
Person result = fun(target_id, std, n);
if (strcmp(result.id, "") == 0) {
// 返回的编号为空串,说明未找到目标编号
printf("未找到该编号的人员!");
} else {
// 找到了目标编号,输出该人员信息
printf("编号:%s,出生日期:%d年%d月%d日\n", result.id, result.birth_year, result.birth_month, result.birth_day);
}
return 0;
}
```
以上代码实现了结构体数组中指定编号人员的查找功能,并根据题目要求输出了对应信息。
阅读全文