此次程序思路:
1.调用read DAT函数将学生信息录入
2.经调用sortDAT函数和calDAT函数将信息整理。
3.将整理完全的数据经print DAT函数打印出来以便观测是否准确,功能是否生效
4.将整理好的数据再次存入writeDAT函数
之后的程序大致语法都较为简单,结合结构体。
涉及#include <conio.h>这个头文件。
代码展示:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 10
struct STU
{
int num;
char name[12];
double score[4];
double sum;
double ave;
};
void readDAT(struct STU p[], int n);
void writeDAT(struct STU p[], int n);
void sortDAT(struct STU p[], int n);
void calDAT(struct STU p[], int n);
void printDAT(struct STU p[], int n);
int main(void)
{
struct STU st[N] = {
0};
readDAT(st, N);
printDAT(st, N);
calDAT(st, N);
sortDAT(st, N);
printf("\nAfter Sort:\n");
printDAT(st, N);
writeDAT(st, N);
return 0;
}
void readDAT(struct STU p[], int n)
{
int i, j;
double temp;
FILE *fp;
if ((fp = fopen("stu.dat", "r")) == NULL)
{
printf("cannot open file stu.dat!\n");
exit(0);
}
for (i = 0; i < n; i++)
{
fscanf(fp,"%d%s", &p[i].num, p[i].name);
for (j = 0; j < 4; j++)
{
fscanf(fp, "%lf", &temp);
p[i].score[j] = temp;
}
}
fclose(fp);
}
void writeDAT(struct STU p[], int n)
{
int i, j;
FILE *fp;
if ((fp = fopen("out.dat", "w")) == NULL)
{
printf("cannot open file out.dat!\n");
exit(0);
}
for (i = 0; i < n; i++)
{
fprintf(fp,"%5d %-7s", p[i].num, &p[i].name);
for (j = 0; j < 4; j++)
{
fprintf(fp, "%5.1f", p[i].score[j]);
}
fprintf(fp, "%6.1f%5.1f\n", p[i].sum, p[i].ave);
}
fclose(fp);
}
void sortDAT(struct STU p[], int n)
{
int i,j;
struct STU temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(p[j].num>p[j+1].num)
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
void calDAT(struct STU p[], int n)
{
int i,j;
double s=0;
for(i=0;i<n;i++)
{
for(j=0;j<4;j++)
{
s=p[i].score[j]+s;
}
p[i].sum=s;
p[i].ave=p[i].sum/4;
s=0;
}
}
void printDAT(struct STU p[], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
printf("%5d %-7s", p[i].num, p[i].name);
for (j = 0; j < 4; j++)
{
printf("%5.1f", p[i].score[j]);
}
printf("%6.1f%5.1f\n", p[i].sum, p[i].ave);
}
}