# 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 19:31:40 浏览: 58
这是一个C语言程序,它的功能是将学生的信息(学号、姓名、性别、分数)存入文件中,然后再从文件中读取出来,并按照分数从高到低排序后输出。具体的实现方式是使用了结构体和文件操作函数。
程序首先定义了一个结构体`STU`,用于存储每个学生的信息。然后通过文件操作函数`fopen`打开一个名为"student.dat"的文件,如果打开失败则会输出提示信息并退出程序。然后使用循环读取用户输入的学生信息,并将这些信息写入文件中,写入的方式是使用`fwrite`函数,将结构体数组`st`中的`N`个元素写入文件中。
接着再次打开文件,使用`fread`函数从文件中读取数据到结构体数组`st`中,然后调用`sort`函数对学生信息按照分数从高到低排序。排序方式是使用冒泡排序的方式,从前往后依次比较相邻的两个元素,如果前一个元素的分数小于后一个元素的分数,则交换这两个元素的位置。
最后,使用循环输出排序后的学生信息。程序结束前使用`system("pause")`等待用户按下任意键,以便用户查看输出结果后关闭窗口。
相关问题
优化这段代码#include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<conio.h> #define OK 1 #define error 0 #define MVNum 100 #define MAXSIZE 10 typedef int OtherInfo,QElemtype; typedef char VerTexType; //结构体定义 typedef struct ArcNode{ int adjvex;
首先,该段代码中包含了一些不必要的头文件,例如:conio.h,malloc.h等。建议只保留stdio.h和stdlib.h。
其次,可以将#define OK 1和#define error 0替换为枚举类型,使代码更加清晰易读。
最后,在结构体定义中,可以将OtherInfo和QElemtype合并为一个类型,避免定义过多类型。同时,也可以将结构体中的变量类型进行优化,例如将int类型的adjvex改为short或者char类型。
重构后的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100
#define MAX_ARC_NUM 10
typedef enum {
ERROR = 0,
OK = 1
} Status;
typedef char VertexType;
typedef int ArcType;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
ArcType* info;
} ArcNode;
typedef struct VNode {
VertexType data;
ArcNode* firstarc;
} VNode, AdjList[MAX_VERTEX_NUM];
typedef struct {
AdjList vertices;
int vexnum, arcnum;
} ALGraph;
```
希望可以帮到你。
#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`,方便在代码中使用。
至于代码中的结构体部分,由于你没有提供完整的代码,所以无法给出具体的解释。但一般来说,结构体用于定义一种自定义的数据类型,可以包含多个不同类型的成员变量。
阅读全文