实验7

3.

既然老师都这么打了那么一定是达到了预期效果的

文件处理的优点就是生成了这么个文件,在处理复杂的数据的时候使他清晰可见的呈现出来(可以偷个懒)

4.

子任务1.自然是同上(不是)

居然不清晰可读,(电脑甚至提醒我不要用记事本 打开)

子任务2.

 代码

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define N 10
 4 typedef struct student {
 5     int num;
 6     char name[20];
 7     int score;
 8 }STU;
 9 int main()
10 {
11     FILE *fp;
12     STU st[N];
13     int i;
14     fp=fopen("file4.dat","r");
15     if(!fp)
16     {
17         printf("fail to open file4.dat\n");
18         exit(0); 
19     }
20     fread(st, sizeof(STU), 10, fp);
21     fclose(fp);    
22     for(i=0; i<N; i++) 
23         printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score);
24     return 0;
25 } 

结果

其实比较好奇这个内部是怎么处理的...

5.代码

 1 #include <stdio.h> 
 2 #include <string.h>
 3 #include <stdlib.h> 
 4 const int N = 10;
 5 
 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 
17 void input(STU s[], int n);
18 void output(STU s[], int n);
19 void process(STU s[], int n);
20 
21 int main() {
22     STU stu[N];
23 
24     printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N);
25     input(stu, N);
26 
27     printf("\n对考生信息进行处理: 计算总分,确定等级\n");
28     process(stu, N);
29 
30     printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n");
31     output(stu, N);
32 
33     return 0;
34 }
35 
36 
37 void input(STU s[], int n) {
38     FILE *fin;
39     int i;
40     fin=fopen("examinee.txt","r");
41     if(!fin){
42         printf("fail to open the file\n");
43         exit(0);
44 }
45     for(i=0;i<N;i++){ 
46     fscanf(fin,"%ld %s %f %f",&s[i].id,s[i].name,&s[i].objective,&s[i].subjective);}
47      
48     fclose(fin);
49 }
50 
51 
52 void output(STU s[], int n) {
53     FILE *fout;
54     fout=fopen("result.txt","w");
55     
56     for (int i = 0; i < n; i++) {
57         printf("%ld %s %.2f %.2f %.2f %s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective,s[i].sum,s[i].level );
58         fprintf(fout,"%ld %s %.2f %.2f %.2f %s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective,s[i].sum,s[i].level );
59     }
60 }
61 
62 
63 void process(STU s[], int n) {
64     for (int i = 0; i < n; i++) {
65         s[i].sum = s[i].objective + s[i].subjective;
66         if (s[i].sum < 60) {
67             strcpy(s[i].level, "不合格");
68         }
69         else if (s[i].sum < 80) {
70             strcpy(s[i].level, "合格");
71         }
72         else {
73             strcpy(s[i].level, "优秀");
74         }
75     }
76     for (int i = 0; i < n - 1; i++) {
77         STU temp ;
78         for (int j = 0; j < n-1-i; j++) {
79             if (s[j].sum < s[j + 1].sum) {
80                 temp = s[j];
81                 s[j] = s[j + 1];
82                 s[j + 1] = temp;
83             }
84         }
85     }
86 }

重点就是在输入输出的地方放上了文件指针

结果

 

由于懒得原因,第六题可能会在高数月考完补上

posted @ 2020-12-28 16:37  togeplane  阅读(104)  评论(2)    收藏  举报