学生类型:ST的类型定义如下: typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST; 编写函数,从输入设计设备上读入若干行数据(数据行数由第一行的整数标示),每行数据是一个学生的信息(姓名,学号,性别,年龄,分数),数据间以空格分隔,将学生们的信息存储于一个结构体数组中,并返回其初地址。 函数接口定义: ST* InitData(int n); 其中 n 是学生数据条数,函数须返回构造的结构体数组的初地址。
时间: 2024-04-06 20:33:15 浏览: 227
结构体引入-c++结构体 课件
下面是实现了上述功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student{
char name[10], id[10];
int gender, age;
double scored;
} ST;
ST* InitData(int n){
ST* stArr = (ST*)malloc(n * sizeof(ST));
for(int i=0; i<n; i++){
scanf("%s %s %d %d %lf", stArr[i].name, stArr[i].id, &stArr[i].gender, &stArr[i].age, &stArr[i].scored);
}
return stArr;
}
int main(){
int n;
scanf("%d", &n);
ST* stArr = InitData(n);
for(int i=0; i<n; i++){
printf("%s %s %d %d %lf\n", stArr[i].name, stArr[i].id, stArr[i].gender, stArr[i].age, stArr[i].scored);
}
free(stArr);
return 0;
}
```
函数 `InitData` 接收一个整数 `n`,表示学生数据条数,动态分配一个 `n` 个元素的结构体数组 `stArr`,并依次从输入设备上读入每个学生的信息,存储到该数组中。最后,函数返回结构体数组的首地址。
在 `main` 函数中,首先读入学生数据的条数 `n`,然后调用 `InitData` 函数构造一个结构体数组 `stArr`,并遍历打印每个学生的信息。最后,释放动态分配的内存。
需要注意的是,在 `scanf` 函数中,可以使用 `%s` 读入字符串,但是要注意字符串长度不能超过数组长度。同时,要使用 `&` 符号读入整型和浮点型变量。
阅读全文