ex2
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 // 补足代码
38 FILE *fp;
39 int i;
40
41 fp = fopen("examinee.txt", "r");
42 if (fp == NULL) {
43 printf("fail to open examinee.txt\n");
44 }
45
46 for(i=0; i<n; i++){
47 fscanf(fp, "%d %s %f %f", &s[i].id, s[i].name, &s[i].objective, &s[i].subjective);
48
49 }
50 fclose(fp);
51 }
52
53 // 对考生信息进行处理:计算总分,排序,确定等级
54 void process(STU s[], int n) {
55 // 补足代码
56 STU t;
57 int i;
58
59 for(i=0; i<n; i++)
60 {
61 s[i].sum=s[i].objective+s[i].subjective;
62 }
63
64 for(i=0; i<n; i++)
65 for(j=0;j<n-i-1;j++)
66 if(s[j].sum<s[j+1].sum)
67 {
68 t=s[j];
69 s[j]=s[j+1];
70 s[j+1]=t;
71 }
72
73 for(i=0;i<n;i++)
74 {
75 if((i+1)<=n*0.1)
76 strcpy(s[i].level,"优秀");
77 else if((i+1)>n*0.1&&(i+1)<=n*0.5)
78 strcpy(s[i].level,"合格");
79 else
80 strcpy(s[i].level,"不合格");
81 }
82 }
83
84 // 输出考生完整信息: 准考证号,姓名,客观题得分,操作题得分,总分,等级
85 // 不仅输出到屏幕上,还写到文本文件result.txt中
86 void output(STU s[], int n) {
87 // 补足代码
88 FILE *fp;
89 int i;
90
91 fp = fopen("result.txt", "w");
92 if (fp == NULL) {
93 printf("fail to open result.txt\n");
94 }
95
96 for(i=0; i<n; i++) {
97 printf("%d %s %.2lf %.2lf %.2lf %s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);
98 fprintf(fp, "%d %s %.2lf %.2lf %.2lf %s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);
99 }
100
101 fclose(fp);
102 }
诶呀最后截止日期快到了才想起来做,太匆忙了
读二进制文件
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct student {
int num;
char name[20];
int score;
}STU;
int main() {
FILE *fin;
STU st[N];
int i;
fin = fopen("file4.dat", "rb");
if (fin == NULL) {
printf("fail to open file4.dat\n");
exit(0);
}
for(i=0; i<N; i++)
if(fread(st, sizeof(STU), N, fin)!=EOF)
printf("%-6d%-10s%3d\n", st[i].num, st[i].name, st[i].score);
fclose(fin);
return 0;}