实验7

实验任务3

屏幕上正确输出了按分数由高→低排序的信息同时,在当前路径下生成了文本文件file3.dat。
用记事本程序打开文件file3.dat,数据信息是正确的,并且直观可读的。
 
实验任务4
 
任务1
 
屏幕上正确输出了按分数由高到底排序的学生信息。
同时,在当前路径下,生成了二进制文件file4.dat。
用记事本程序打开文件file4.dat,里面的信息并不是直观可读。
 
 
任务2
 1 define _CRT_SECURE_NO_WARNINGS
 2 #include<stdio.h>
 3 
 4 int main()
 5 {
 6     typedef struct student 
 7     {    int num; 
 8         char name[20];
 9         int score; 
10     }STU;
11 
12     FILE* a;
13     a = fopen("C:\\Users\\13584\\Desktop\\学习考试等正事\\CCCCCCCCC\\EXP\\exp7\\exp7-4解决方案\\exp7-4\\file4.dat", "rb");
14 
15     STU b[10];
16     int i;
17     fread(b, sizeof(STU), 10, a);
18 
19     for (i = 0; i < 10; i++)
20     {
21         printf("%d\t%s\t%d\n",b[i].num,b[i].name,b[i].score);
22     }
23 
24 
25 
26 
27     return 0;
28 }

18 行 应该用fclose()函数关闭文件,当时忘了。 

 

 

实验任务 5

 

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 const int N = 10;
 6 FILE* a,*b;
 7 
 8 // 定义结构体类型struct student,并定义其别名为STU 
 9 typedef struct student {
10     long int id;
11     char name[20];
12     float objective;    /*客观题得分*/
13     float subjective;    /*操作题得分*/
14     float sum;
15     char level[10];    
16 }STU; 
17 // 函数声明
18 void input(STU s[], int n);
19 void output(STU s[], int n);
20 void process(STU s[], int n);
21 
22 int main() {
23     STU stu[N];
24     
25     printf("录入%d个考生信息: 准考证号,姓名,客观题得分(<=40),操作题得分(<=60)\n", N); 
26     input(stu, N);
27     
28     printf("\n对考生信息进行处理: 计算总分,确定等级\n");
29     process(stu, N);
30     
31     printf("\n打印考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级\n");
32     output(stu, N); 
33     
34     fclose(a);
35     fclose(b);
36 
37     return 0;
38 } 
39 
40 // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
41 void input(STU s[], int n) 
42 {
43     int i;
44     a = fopen("examinee.txt", "r");
45     for (i = 0; i < n; i++) {
46         fscanf(a,"%ld %s %f %f", &s[i].id,s[i].name,&s[i].objective,&s[i].subjective);
47     }
48 }
49 
50 // 输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
51 // 不仅输出到屏幕上,还写到文本文件result.txt中 
52 void output(STU s[], int n) {
53     int i;
54     b = fopen("result.txt", "w");
55     for (i = 0; i < n; i++)
56     {
57         printf("%ld\t%s\t%f\t%f\t%f\t%s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective,s[i].sum,s[i].level);
58         fprintf(b, "%ld\t%s\t%f\t%f\t%f\t%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 
64 // 对考生信息进行处理:计算总分,排序,确定等级
65 void process(STU s[], int n) {
66     STU c;
67     int i,j;
68     for (i = 0; i < n; i++)
69     s[i].sum = s[i].objective + s[i].subjective;
70 
71     for (i = 0; i < n - 1; i++)
72     {
73         for (j = 0; j < n - 1 - i; j++)
74         {
75             if (s[j].sum < s[j + 1].sum)
76             {
77                 c = s[j];
78                 s[j] = s[j + 1];
79                 s[j + 1] = c;
80             }
81         }
82     }
83     for (i = 0; i < n; i++)
84     {
85         if (i + 1 <= 0.1 * n)
86             strcpy(s[i].level, "优秀");
87         else if (i + 1 <= 0.5 * n && i + 1 > 0.1 * n)
88             strcpy(s[i].level, "合格");
89         else
90             strcpy(s[i].level, "不合格");
91     }
92 }

 

修改数据之后的运行

 

 

 

posted @ 2020-12-29 10:17  kagiii  阅读(90)  评论(4编辑  收藏  举报