# include<stdio.h> # include<stdlib.h> # define N 145 typedef struct student { int num; char name[20]; char sex; double score; }STU; void sort(STU[], int n); int main() { FILE *fp; int i; STU st[N]; fp=fopen("d:\\student. dat","wb+"); if( fp == NULL) { printf("打䨰开a文?件t失º¡ì败㨹!\n"); exit(0); } for ( i = 0;i< N;i++) scanf( "%d %s %c % lf",&st[i]. num, st[i]. name,&st[i]. sex,&st[i]. score); fwrite(st, sizeof(STU),N, fp); for( i =0;i< N;i++) printf( "%4d %10s %3c %6.2lf\n", st[i]. num, st[i]. name, st[i]. sex, st[i]. score); fclose(fp); fp=fopen("d:\\student. dat","rb+"); if( fp== NULL) { printf("打䨰开a文?件t失º¡ì败㨹!\n"); exit(0); } fread(st, sizeof(STU),N, fp); sort(st,N); for( i = 0;i < N;i++) printf( "%4d %10s %3c %6.2lf\n", st[i]. num, st[i]. name, st[i]. sex, st[i]. score); fclose(fp); system("pause"); return 0; } void sort(STU x[], int n) { int i,j; STU t; for( i = 0;i < n - 1;i++) for( j = 0;j< n- 1 - i;j++ ) if(x[j]. score<x[j+1]. score) { t =x[j]; x [ j] = x[j + 1 ] ; x[j + 1 ] = t; } }
时间: 2024-04-04 20:31:27 浏览: 15
这段程序中,主要使用了C语言的文件操作函数以及结构体来实现对学生信息的存储和排序。程序的核心是`sort`函数,使用冒泡排序的方式对学生信息进行排序。
程序首先定义了一个结构体`STU`,用于存储每个学生的信息。然后通过文件操作函数`fopen`打开一个名为"student.dat"的文件,如果打开失败则会输出提示信息并退出程序。
接着使用循环读取用户输入的学生信息,并将这些信息写入文件中,写入的方式是使用`fwrite`函数,将结构体数组`st`中的`N`个元素写入文件中。
然后再次打开文件,使用`fread`函数从文件中读取数据到结构体数组`st`中,然后调用`sort`函数对学生信息按照分数从高到低排序。排序方式是使用冒泡排序的方式,从前往后依次比较相邻的两个元素,如果前一个元素的分数小于后一个元素的分数,则交换这两个元素的位置。
最后,使用循环输出排序后的学生信息。程序结束前使用`system("pause")`等待用户按下任意键,以便用户查看输出结果后关闭窗口。
相关问题
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct
这段代码是C语言中的头文件引用和一些定义的示例。其中,`#include <stdio.h>`和`#include <stdlib.h>`是用来引入标准库函数的头文件。`stdio.h`包含了输入输出相关的函数,如`printf`和`scanf`;`stdlib.h`包含了一些常用的函数,如内存分配函数`malloc`和随机数生成函数`rand`。
`#define MAXSIZE 100`是一个宏定义,用来定义一个常量`MAXSIZE`,它的值为100。
`typedef int ElemType;`是用来给`int`类型起一个别名`ElemType`,方便在代码中使用。
至于代码中的结构体部分,由于你没有提供完整的代码,所以无法给出具体的解释。但一般来说,结构体用于定义一种自定义的数据类型,可以包含多个不同类型的成员变量。
根据数据结构知识给下面代码添加注释:#include+<stdio.h> #include+<stdlib.h> #include<string.h> #define+MAX_NAME+5 #def
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME 5
#define MAX_DETAIL 10
// 定义结构体
typedef struct {
char name[MAX_NAME];
char detail[MAX_DETAIL];
} FamilyMember;
int main() {
// 创建一个FamilyMember类型的数组
FamilyMember members[3];
// 给数组中的每个成员赋值
strcpy(members[0].name, "John");
strcpy(members[0].detail, "Father");
strcpy(members[1].name, "Mary");
strcpy(members[1].detail, "Mother");
strcpy(members[2].name, "Tom");
strcpy(members[2].detail, "Son");
// 打印数组中的每个成员的姓名和注释
for (int i = 0; i < 3; i++) {
printf("Name: %s\n", members[i].name);
printf("Detail: %s\n", members[i].detail);
printf("\n");
}
return 0;
}
```
这段代码定义了一个结构体`FamilyMember`,包含了姓名和注释两个成员变量。然后创建了一个`FamilyMember`类型的数组`members`,并给数组中的每个成员赋值。最后,通过循环打印数组中每个成员的姓名和注释。