实验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 }
修改数据之后的运行