实验七
任务3:
运行程序,观察在屏幕上正确输出了按分数由高→低排序的信息。同时,在当前路径下,生成了文本文件file3.dat。
尝试用记事本程序打开文件file3.dat,打不开。最后创建了一个新的txt,并用google chrome打开file3.dat并将其中的内容转移到新txt中,才观察到里面的数据信息是正确的,并且是直观可读的。
任务4:
修改文件后,运行程序,在屏幕上正确输出了按分数由高到底排序的学生信息。同时,在当前路径下,生成了file4.dat.里面是乱码。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 10 4 5 6 typedef struct student { 7 int num; 8 char name[20]; 9 int score; 10 }STU; 11 12 int main(int argc, const char * argv[]) { 13 FILE *fin; 14 STU st[N]; 15 int i; 16 fin = fopen("/Users/bzm/Desktop/Xcode成品/帅哥点进来/博客园/实验七/实验7相关源码及数据文件/file4.txt", "rb"); 17 if(!fin){ 18 printf("fail to open file4.txt"); 19 exit(0); 20 } 21 for(i=0;i<N;i++){ 22 fread(st,sizeof(STU),N,fin); 23 24 printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score); 25 } 26 fclose(fin); 27 28 return 0; 29 }
任务5:
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 const int N = 10; 5 6 typedef struct student { 7 long int id; 8 char name[20]; 9 float objective; 10 float subjective; 11 float sum; 12 char level[10]; 13 }STU; 14 15 void input(STU s[], int n); 16 void output(STU s[], int n); 17 void process(STU s[], int n); 18 int main() { 19 STU stu[N]; 20 printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分 (<=60)\n", N); 21 input(stu, N); 22 printf("\n对考生信息进行处理: 计算总分,确定等级\n"); 23 process(stu, N); 24 printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级 \n"); 25 output(stu, N); 26 return 0; 27 } 28 void input(STU s[], int n) { 29 FILE *fin; 30 fin = fopen("/Users/bzm/Desktop/Xcode成品/帅哥点进来/博客园/实验七/实验7相关源码及数据文件/examinee.txt", "r"); 31 if( !fin ) { // 如果打开失败,则输出错误提示信息,然后退出程序 32 printf("fail to open file1.dat\n"); 33 exit(0); 34 } 35 for(int i=0;i<n;i++){ 36 fscanf(fin, "%ld %s %f %f", &s[i].id, s[i].name, &s[i].objective,&s[i].subjective); 37 s[i].sum=s[i].objective+s[i].subjective; 38 } 39 fclose(fin); 40 } 41 42 void output(STU s[], int n) { 43 FILE *fout; 44 45 46 printf("准考证号 姓名 客观题得分 操作题得分 总分 等级\n"); 47 for(int i=0;i<n;i++){ 48 printf("%-14.ld%-15s%-10.2f%-10.2f%-8.2f%s\n",s[i].id,s[i].name,s[i].objective,s[i].subjective,s[i].sum,s[i].level); 49 } 50 51 fout = fopen("/Users/bzm/Desktop/Xcode成品/帅哥点进来/博客园/实验七/实验7相关源码及数据文件/result.txt", "wb"); 52 if( !fout ) { 53 printf("fail to open result.txt\n"); 54 exit(0); 55 56 } 57 for(int i=0; i<N; i++) 58 for(int i=0;i<n;i++) 59 fwrite(s, sizeof(STU), N, fout); 60 fclose(fout); 61 62 } 63 64 void process(STU s[], int n) { 65 STU t; 66 for(int i=n-1;i>0;i--){ 67 for(int j=i;j>=0;j--){ 68 if(s[j].sum<s[i].sum){ 69 t=s[j]; 70 s[j]=s[i]; 71 s[i]=t; 72 } 73 } 74 } 75 for(int i=0;i<n;i++){ 76 if(i+1<=n/10)strcpy(s[i].level,"优秀"); 77 else if(i+1<=n/2)strcpy(s[i].level,"合格"); 78 else strcpy(s[i].level,"不合格"); 79 } 80 81 }
(名字乱打的)
任务6:来不及写了
总结:遇到超多问题,我以为实验七花二十分钟就能完成,结果花了几个小时。幸运的是,赶在截止时间前顺利完成了任务。