定义描述学生信息(学号、姓名、性别、出生日期、4门课程成绩和平均分)的结构体类型。 struct date{ int year; int month; int day; }; struct stu{ int num; char name[20]; char sex; struct date birthday; float score[4]; float ave; }; 定义输入单个学生信息的函数Input(struct stu *a) ; 定义输出单个学生信息的函数Output(struct stu a) ;编写按姓名进行查找的函数Searchname,若找到,返回表示该学生的信息, 不排除有有同名同姓的情况;否则,返回查无此人。 编写函数Sortname,它的功能是:按每个学生的名字由小到大输出学生的记录。最后编写可执行代码
时间: 2023-05-31 12:08:07 浏览: 191
比較資料型態變數的語法-struct data structure
如下所示:
```
#include <stdio.h>
#include <string.h>
struct date{
int year;
int month;
int day;
};
struct stu{
int num;
char name[20];
char sex;
struct date birthday;
float score[4];
float ave;
};
void Input(struct stu *a);
void Output(struct stu a);
struct stu *Searchname(struct stu *a, char *name);
void Sortname(struct stu *a[], int n);
int main() {
int n;
printf("请输入学生人数:");
scanf("%d", &n);
struct stu students[n];
for (int i = 0; i < n; i++) {
Input(&students[i]);
}
printf("\n学生信息如下:\n\n");
for (int i = 0; i < n; i++) {
Output(students[i]);
}
char s[20];
printf("\n请输入要查找的学生姓名:");
scanf("%s", s);
struct stu *p = Searchname(students, s);
if (p == NULL) {
printf("查无此人!\n");
} else {
printf("\n查找结果如下:\n\n");
Output(*p);
}
printf("\n按姓名排序后的学生信息如下:\n\n");
struct stu *ptr[n];
for (int i = 0; i < n; i++) {
ptr[i] = &students[i];
}
Sortname(ptr, n);
for (int i = 0; i < n; i++) {
Output(*ptr[i]);
}
return 0;
}
void Input(struct stu *a) {
printf("请输入学号:");
scanf("%d", &a->num);
printf("请输入姓名:");
scanf("%s", a->name);
printf("请输入性别(男/女):");
scanf(" %c", &a->sex);
printf("请输入出生日期(年 月 日):");
scanf("%d %d %d", &a->birthday.year, &a->birthday.month, &a->birthday.day);
printf("请输入四门课程的成绩:");
for (int i = 0; i < 4; i++) {
scanf("%f", &a->score[i]);
a->ave += a->score[i];
}
a->ave /= 4;
}
void Output(struct stu a) {
printf("学号:%d\n", a.num);
printf("姓名:%s\n", a.name);
printf("性别:%c\n", a.sex);
printf("出生日期:%d-%02d-%02d\n", a.birthday.year, a.birthday.month, a.birthday.day);
printf("四门课程的成绩:");
for (int i = 0; i < 4; i++) {
printf("%5.1f ", a.score[i]);
}
printf("\n平均分:%5.1f\n\n", a.ave);
}
struct stu *Searchname(struct stu *a, char *name) {
for (int i = 0; i < sizeof(a); i++) {
if (strcmp(a[i].name, name) == 0) {
return &a[i];
}
}
return NULL;
}
void Sortname(struct stu *a[], int n) {
struct stu *temp;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (strcmp(a[i]->name, a[j]->name) > 0) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
```
阅读全文