试题详情: 设有若干名职工信息,每个人的信息包括职工号、姓名、年龄(职工号不超过6个字符,姓名不超过10个字符),要求从键盘读入n名职工的信息,并输出年龄在35岁以下的职工信息。要求用指向结构体数组元素的指针实现。 输入提示: 输入为n+1行,其中第一行为人数,后面n行为n个职工信息 输出提示: 输出所有35岁以下的职工信息,每人一行,职工号和姓名分别占有10列的宽度,年龄占3列宽度 输入样本: 5 123 tom 45 234 mimi 23 345 lili 52 456 mary 33 567 jimi 40 输出样本: 234 mimi 23 456 mary 33
时间: 2023-12-03 22:45:05 浏览: 114
以下是使用指向结构体数组元素的指针实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 100 // 最多职工人数
struct Employee {
char id[7]; // 职工号
char name[11]; // 姓名
int age; // 年龄
};
int main() {
int n;
struct Employee employees[MAX_NUM]; // 职工信息数组
struct Employee *p = employees; // 指针指向第一个职工信息
printf("请输入职工人数:");
scanf("%d", &n);
printf("请依次输入职工信息(职工号、姓名、年龄):\n");
// 读入职工信息
for (int i = 0; i < n; i++) {
scanf("%s%s%d", (p+i)->id, (p+i)->name, &(p+i)->age);
}
printf("年龄在35岁以下的职工信息如下:\n");
// 输出年龄在35岁以下的职工信息
for (int i = 0; i < n; i++) {
if ((p+i)->age < 35) {
printf("%-10s%-10s%3d\n", (p+i)->id, (p+i)->name, (p+i)->age);
}
}
return 0;
}
```
代码解析:
1. 定义了一个结构体 `Employee` 来表示职工信息,包括职工号、姓名、年龄。
2. 定义了一个指向结构体数组元素的指针 `p`,并初始化为指向 `employees` 数组的第一个元素。
3. 通过 `scanf` 函数读入职工信息并存储到 `employees` 数组中。
4. 遍历 `employees` 数组,输出年龄在35岁以下的职工信息。注意,这里使用了指针 `p` 来访问结构体数组元素的成员,即 `(p+i)->id`、`(p+i)->name` 和 `(p+i)->age`,其中 `i` 代表元素下标。
5. 输出格式化字符串使用了 `%10s` 和 `%3d` 分别表示占位宽度为10的字符串和占位宽度为3的整数。其中,`%-10s` 表示左对齐的字符串,可以保证职工号和姓名分别占据10个字符宽度。
阅读全文