实验7

ex3:

1.运行程序,观察在屏幕上是否正确输出了按分数由高→低排序的信息?同时,在当前路径下,是否
生成了文本文件file3.dat?
答:正确输出了信息;生成了file3.dat。
2.尝试用记事本程序打开文件file3.dat,观察里面的数据信息是否是正确的,并且是直观可读的?
正确,直观可读。
ex4:
子任务1:
运行程序,观察在屏幕上是否正确输出了按分数由高到底排序的学生信息?同时,在当前路
径下,是否生成了二进制文件file4.dat?尝试用记事本程序打开文件file4.dat,观察里面的数
据信息是否直观可读?
答:正确输出信息并生成了文件,数据信息不直观可读。
子任务2:
 
 1 #include<stdio.h> 
 2 #include<stdlib.h> 
 3 #define N 10
 4 typedef struct student 
 5 {
 6     int num;
 7     char name[20];
 8     int score;
 9 }
10 STU;
11 int main()
12 {
13     FILE *fin;
14     STU st[N];
15     int i;
16     fin=fopen("file4.dat","r");
17     if(!fin)
18     {
19         printf("Fail to open file4.dat\n");
20         exit(0);
21     }
22     for(i=0;i<N; i++)
23     fread(&st[i],sizeof(st[i]),1,fin);
24     for(i=0;i<N; i++)
25     printf("%d %-6s %-10d\n",st[i].num, st[i].name, st[i].score);
26     fclose(fin);
27     return 0;
28 }

 

 ex5:

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

 

 

 

posted @ 2021-01-01 15:28  卷心菜投手  阅读(18)  评论(0编辑  收藏