#task3、能 是 数据正确,且直观可读
//task4 // 从文本数据文件file1.dat中读入数据,按成绩从高到低排序,并将排序结果输出到屏幕上,同时,也以二进制方式存入文件file4.dat中。 #include <stdio.h> #include <stdlib.h> #define N 10 // 定义一个结构体类型STU typedef struct student { int num; char name[20]; int score; }STU; void sort(STU *pst, int n); // 函数声明 int main() { FILE *fin, *fout,*fp; STU st[N]; int i; // 以只读文本方式打开文件file1.dat fin = fopen("file1.dat", "r"); if( !fin ) { // 如果打开失败,则输出错误提示信息,然后退出程序 printf("fail to open file1.dat\n"); exit(0); } // 从fin指向的数据文件file1.dat中读取数据到结构体数组st for(i=0; i<N; i++) fscanf(fin, "%d %s %d", &st[i].num, st[i].name, &st[i].score); fclose(fin); // 关闭fin指向的文件file1.dat // 调用函数sort()对数组st中数据,按分数由高到低排序 sort(st, N); // 以写方式打开/创建二进制文件file4.dat fout = fopen("file4.dat", "wb"); if( !fout ) { // 如果打开失败,则输出错误提示信息,然后退出程序 printf("fail to open file1.dat\n"); exit(0); } // 将排序后的数组st中数据输出到屏幕 for(i=0; i<N; i++) printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score); // 将排序后的数组st中数据写到二进制文件file4.dat fwrite(st, sizeof(STU), N, fout); // 将从地址st开始的sizeof(STU)×N个字节信息写入fout指向的文件file4.dat中 fclose(fout); // 关闭fout指向的文件file4.dat printf("********下面为实验四(2)内容*********\n"); i=1; if((fp=fopen("file4.dat","rb"))==NULL) { printf("Can't find file4.dat\n"); exit(0); } else { while (!feof(fp)) { fread(&st[i],sizeof(STU),1,fp); printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score); i++; } } fclose(fp); return 0; } // 函数功能描述:对pst指向的n个STU结构体数据进行排序,按成绩数据项由高到底排序 // 排序算法:选择排序算法 void sort(STU *pst, int n) { STU *pi, *pj, t; for(pi = pst; pi < pst+n-1; pi++) for(pj = pi+1; pj < pst+n; pj++) if(pi->score < pj->score) { t = *pi; *pi = *pj; *pj = t; } } //为了方便观察,我在中间加入了一个printf,方便观察结果 //(1)能 是 不能直观可读
//task5 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 10 typedef struct student{ int num; char name[20]; float kg; float zg; float sum; char level[10]; }STU; int main(){ FILE *fin, *fout; int i,j, perfect, pass,min; STU s[N]; fin = fopen("6.txt","r"); if(fin == NULL){ printf("fail to open 6.txt\n"); exit(0); } for(i = 0 ; i < N; i++){ fscanf(fin,"%d %s %f %f",&s[i].num ,s[i].name, &s[i].kg ,&s[i].zg ); s[i].sum = s[i].kg + s[i].zg; } fclose(fin); STU temp; for(i = N - 1 ;i > 0 ; i--){ j = i - 1; min = s[i].sum; for( ; j >= 0;j--){ if( s[j].sum < min){ min = s[j].sum; temp = s[i]; s[i] = s[j]; s[j] = temp; } } } perfect = N * 0.1; pass = N * 0.5; for(i = 0 ; i < N ;i++){ if(i < perfect ){ strcpy(s[i].level , "优"); } else if(i < pass){ strcpy(s[i].level , "合格"); } else{ strcpy(s[i].level , "不合格"); } } fout = fopen("7.txt","w"); if(fout == NULL){ printf("fail to open 7.txt\n"); exit(0); } for( i = 0 ; i < N; i++){ fprintf(fout, "%-6d%-15s%-8.2f%-8.2f%-8.2f%-10s\n",s[i].num,s[i].name,s[i].kg,s[i].zg,s[i].sum,s[i].level); printf("%-6d%-15s%-8.2f%-8.2f%-8.2f%-10s\n",s[i].num,s[i].name,s[i].kg,s[i].zg,s[i].sum,s[i].level); } fclose(fout); return 0; }