实验7 文件
实验任务3
基于运行观察,回答实验任务3中的问题:
运行程序,观察在屏幕上是否正确输出了按分数由高→低排序的信息?
是的。
同时,在当前路径下,是否生成了文本文件file3.dat?
是的。
尝试用记事本程序打开文件file3.dat,观察里面的数据信息是否是正确的,并且是直观可读的?
非常直观可读。
实验任务4
子任务1
回答子任务1中的问题:
运行程序,观察在屏幕上是否正确输出了按分数由高到底排序的学生信息?
是的。
同时,在当前路径下,是否生成了二进制文件file4.dat?
是的。
尝试用记事本程序打开文件file4.dat,观察里面的数据信息是否直观可读?
一点都不直观可读,好多乱码。
子任务2
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define N 10 5 6 typedef struct student { 7 int num; 8 char name[20]; 9 int score; 10 }STU; 11 12 int main(){ 13 FILE *fp; 14 STU st[N]; 15 int i; 16 fp=fopen("file4.dat","r"); 17 18 if(!fp){ 19 printf("Fail to open file4.dat\n"); 20 exit(0); 21 } 22 23 for(i=0;i<N; i++) 24 fread(&st[i],sizeof(st[i]),1,fp); 25 for(i=0;i<N; i++) 26 printf("%d %-6s %-10d\n",st[i].num, st[i].name, st[i].score); 27 fclose(fp); 28 return 0; 29 }
实验任务5
1 #include <stdio.h> 2 #include <string.h> 3 #include<stdlib.h> 4 5 const int N = 10; 6 7 typedef struct student { 8 long int id; 9 char name[20]; 10 float objective; 11 float subjective; 12 float sum; 13 char level[10]; 14 }STU; 15 16 void input(STU s[], int n); 17 18 void output(STU s[], int n); 19 20 void process(STU s[], int n); 21 22 int main() { 23 STU stu[N]; 24 printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N); 25 input(stu, N); 26 printf("\n对考生信息进行处理: 计算总分,确定等级\n"); 27 process(stu, N); 28 printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n"); 29 output(stu, N); 30 return 0; 31 } 32 33 void input(STU s[], int n) { 34 FILE *p; 35 int i; 36 p = fopen("examinee.txt","r"); 37 38 if (!p){ 39 printf("Fail to open examinee.txt\n"); 40 exit(0); 41 } 42 43 for(i=0; i<n; i++) 44 fscanf(p, "%ld %s %f %f", &s[i].id, s[i].name, &s[i].objective, &s[i].subjective); 45 46 fclose(p); 47 } 48 49 void output(STU s[], int n) { 50 FILE *p; 51 int i; 52 p = fopen("result.txt","w"); 53 54 if (!p){ 55 printf("fail to open or creat result.txt\n"); 56 exit(0); 57 } 58 59 for(i=0; i<n; i++){ 60 printf("%ld\t%s\t%-7.1f\t%-7.1f\t%-7.1f\t%s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level); 61 fprintf(p, "%ld\t%s\t%-7.1f\t%-7.1f\t%-7.1f\t%s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level); 62 } 63 64 fclose(p); 65 } 66 67 void process(STU s[], int n) { 68 int i, j, k, grade[n]; 69 STU temp; 70 for(i = 0; i < n; i++) 71 s[i].sum = s[i].objective + s[i].subjective; 72 for(i = 0; i < n; i++) 73 { 74 for(j = 0, k = 0; j < n; j++) 75 { 76 if(s[i].sum >= s[j].sum) 77 k++; 78 } 79 grade[i]=k>(n*0.9)?0:k>(n*0.5)?1:2; 80 switch(grade[i]){ 81 case 0:strcpy(s[i].level,"优秀");break; 82 case 1:strcpy(s[i].level,"合格");break; 83 case 2:strcpy(s[i].level,"不合格");break; 84 default:strcpy(s[i].level,"不合格");break; 85 } 86 } 87 for(i = 0; i < n - 1; i++) 88 for(j = 0; j < n-1-i; j++) 89 if(s[j].sum < s[j+1].sum){ 90 temp = s[j]; 91 s[j] = s[j+1]; 92 s[j+1] = temp; 93 } 94 }