实验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 }

 

posted on 2020-12-30 20:38  黑卡卡卡蒂  阅读(66)  评论(1编辑  收藏  举报