#include<stdio.h> #include<string.h> typedef struct date { int year; int month; int day; }DATE; typedef struct student { int num; char name[20]; char sex; DATE birthday; float score; }STUDENT; void inputarr(STUDENT s[ ], int n); void outputarr(STUDENT s[ ], int n); int compname(STUDENT a, STUDENT b); void sortname(STUDENT s[],int n); int main() { STUDENT b[5]; inputarr(b,5); sortname(b,5); outputarr(b,5); return 0; } void inputarr(STUDENT s[ ], int n) { int i; //printf("请输入%d个学生的信息\n",n); for(i=0;i<n;i++) { //printf("请输入学生学号:"); scanf("%d",&(s[i]).num); //printf("请输入学生姓名:"); scanf("%s",(s[i]).name); //printf("请输入学生性别:"); scanf(" %c",&(s[i]).sex); //格式字符%c前有一个空格 //printf("请输入学生出生日期:"); scanf("%d%d%d",&(s[i]).birthday.year,&(s[i]).birthday.month,&(s[i]).birthday.day); //printf("请输入学生成绩:"); scanf("%f",&(s[i]).score); } } void outputarr(STUDENT s[],int n) { } int compname(STUDENT a, STUDENT b) { // 比较两个结构体变量a,b的score成员的大小,根据小于、等于、大于三种情况分别返回-1、0或1 } void sortname(STUDENT s[],int n) { } 完成此代码
时间: 2024-01-20 14:02:52 浏览: 68
这段代码是一个简单的学生信息管理程序,包括了输入学生信息、输出学生信息、按姓名排序等功能。其中,DATE结构体表示日期,STUDENT结构体表示学生信息。
下面是代码的完整实现:
```c
#include <stdio.h>
#include <string.h>
typedef struct date {
int year;
int month;
int day;
} DATE;
typedef struct student {
int num;
char name[20];
char sex;
DATE birthday;
float score;
} STUDENT;
void inputarr(STUDENT s[], int n);
void outputarr(STUDENT s[], int n);
int compname(STUDENT a, STUDENT b);
void sortname(STUDENT s[], int n);
int main() {
STUDENT b[5];
inputarr(b, 5);
sortname(b, 5);
outputarr(b, 5);
return 0;
}
void inputarr(STUDENT s[], int n) {
int i;
printf("请输入%d个学生的信息\n", n);
for (i = 0; i < n; i++) {
printf("请输入学生学号:");
scanf("%d", &(s[i]).num);
printf("请输入学生姓名:");
scanf("%s", (s[i]).name);
printf("请输入学生性别:");
scanf(" %c", &(s[i]).sex); // 格式字符%c前有一个空格
printf("请输入学生出生日期:");
scanf("%d%d%d", &(s[i]).birthday.year, &(s[i]).birthday.month, &(s[i]).birthday.day);
printf("请输入学生成绩:");
scanf("%f", &(s[i]).score);
}
}
void outputarr(STUDENT s[], int n) {
int i;
printf("学号\t姓名\t性别\t出生日期\t成绩\n");
for (i = 0; i < n; i++) {
printf("%d\t%s\t%c\t%d-%d-%d\t%.2f\n", s[i].num, s[i].name, s[i].sex,
s[i].birthday.year, s[i].birthday.month, s[i].birthday.day, s[i].score);
}
}
int compname(STUDENT a, STUDENT b) { // 比较两个学生姓名的大小
return strcmp(a.name, b.name);
}
void sortname(STUDENT s[], int n) { // 按姓名排序
int i, j;
STUDENT temp;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (compname(s[i], s[j]) > 0) {
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
}
```
在main函数中,定义了一个包含5个元素的STUDENT数组b,并调用inputarr函数输入学生信息。然后,调用sortname函数按姓名排序,并调用outputarr函数输出学生信息。
在inputarr函数中,使用了循环语句输入多个学生的信息。scanf函数用于读取用户的输入,%d表示读取整数,%s表示读取字符串,%c表示读取字符,%f表示读取浮点数。注意,在读取字符时,需要在格式字符%c前加上一个空格,以消除scanf函数读取缓存区中的换行符。
在outputarr函数中,使用了循环语句输出多个学生的信息。printf函数用于输出信息,\t表示制表符,\n表示换行符。
在compname函数中,使用了strcmp函数比较两个学生姓名的大小。如果a的姓名小于b的姓名,返回一个负数;如果a的姓名等于b的姓名,返回0;如果a的姓名大于b的姓名,返回一个正数。
在sortname函数中,使用了冒泡排序算法按姓名进行排序。首先,使用两个循环语句遍历所有学生,比较相邻两个学生姓名的大小,如果前一个学生的姓名大于后一个学生的姓名,则交换两个学生的位置。
阅读全文