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