实验7

1.实验任务4

源代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main() {
 4     FILE *fp;
 5     char ch;
 6     int lines = 0;
 7     int chars = 0;
 8     int first_char = 1; 
 9 
10     fp = fopen("data4.txt", "r");
11     if(fp == NULL) {
12         printf("文件打开失败!\n");
13         return 1;
14     }
15 
16     while((ch = fgetc(fp)) != EOF) {
17         if(ch != ' ' && ch != '\n' && ch != '\t') {
18             chars++;
19             first_char = 0;
20         }
21 
22         if(ch == '\n') {
23             lines++;
24         }
25     }
26 
27     if(first_char == 0 && lines == 0) {
28         lines = 1;
29     }
30 
31     fclose(fp);
32 
33     printf("data4.txt统计结果:\n");
34     printf("行数:%d\n", lines);
35     printf("字符数(不计空白符):%d\n", chars);
36     system("pause");
37     return 0;
38 }

运行截图:

{44764205-9FE2-4972-BC6B-44C99D48BCFA}

2.实验任务5

源代码

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #define N 10
  5 
  6 typedef struct {
  7     long id;            // 准考证号
  8     char name[20];      // 姓名
  9     float objective;    // 客观题得分
 10     float subjective;   // 操作题得分
 11     float sum;          // 总分
 12     char result[10];    // 考试结果
 13 } STU;
 14 
 15 // 函数声明
 16 void read(STU st[], int n);
 17 void write(STU st[], int n);
 18 void output(STU st[], int n);
 19 int process(STU st[], int n, STU st_pass[]);
 20 
 21 int main() {
 22     STU stu[N], stu_pass[N];
 23     int cnt;
 24     double pass_rate;
 25 
 26     printf("从文件读入%d个考生信息: 已完成\n", N);
 27     read(stu, N);
 28 
 29     printf("\n对考生成绩进行统计: 已完成\n");
 30     cnt = process(stu, N, stu_pass);
 31 
 32     printf("\n所有考生完整信息:\n");
 33     output(stu, N);   
 34 
 35     printf("\n通过考试的名单写入文件: 已完成!\n");
 36     write(stu_pass, cnt);
 37 
 38     pass_rate = 1.0 * cnt / N;
 39     printf("\n本次等级考试通过率: %.2f%%\n", pass_rate*100);
 40 
 41     return 0;
 42 }
 43 
 44 // 把所有考生完整信息输出到屏幕上
 45 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
 46 void output(STU st[], int n) {
 47     int i;
 48     
 49     printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
 50     for (i = 0; i < n; i++)
 51         printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", st[i].id, st[i].name, st[i].objective, st[i].subjective, st[i].sum, st[i].result);
 52 }
 53 
 54 // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
 55 void read(STU st[], int n) {
 56     int i;
 57     FILE *fin;
 58 
 59     fin = fopen("examinee.txt", "r");
 60     if (!fin) {
 61         printf("fail to open file\n");
 62         return;
 63     }
 64 
 65     for (i = 0; i < n; i++)
 66         fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective, &st[i].subjective);
 67 
 68     fclose(fin);
 69 }
 70 
 71 // 对考生信息进行处理:计算每位考生考试总分、结果;统计并返回通过考试的人数
 72 int process(STU st[], int n, STU st_pass[]) {
 73     int i,count=0;
 74     for(i=0;i<n;i++){
 75     st[i].sum=st[i].objective+st[i].subjective;
 76     if(st[i].sum>=60){
 77         strcpy(st[i].result,"通过");
 78         st_pass[count++]=st[i];}
 79     else
 80         strcpy(st[i].result,"未通过");
 81     }
 82     return count;
 83 }
 84 
 85 // 把通过考试的考生完整信息写入文件list_pass.txt
 86 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
 87 void write(STU st[], int n) {
 88     int i;
 89     FILE *fin;
 90     fin = fopen("list_pass.txt", "w");
 91     if (!fin) {
 92         printf("fail to open file\n");
 93         return;
 94     }
 95     fprintf(fin, "准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
 96     for (i = 0; i < n; i++)
 97         fprintf(fin, "%ld %s %.2f %.2f %.2f %s\n", st[i].id, st[i].name, st[i].objective, st[i].subjective,st[i].sum,st[i].result);
 98 
 99     fclose(fin);
100 }

运行结果截图

{9A692125-0E19-412D-B7CD-8187A4DFC9D0}

{91C73911-49D4-45DF-B94F-2CAAA58E66D9}

3.实验任务6

源代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <time.h>
 5 
 6 #define N 80
 7 
 8 typedef struct {
 9     char id[20];
10     char name[20];
11     char class[50];
12 } Student;
13 
14 int main() {
15     Student stu[N];
16     int flag[N] = {0};      
17     int selected[5];        
18     int i, count = 0;
19     int index;
20     char filename[100];
21     FILE *fp, *fout;
22 
23     
24     fp = fopen("list.txt", "r");
25     if(fp == NULL) {
26         printf("无法打开文件 list.txt!\n");
27         return 1;
28     }
29 
30     for(i = 0; i < N; i++) {
31         fscanf(fp, "%s %s %s", stu[i].id, stu[i].name, stu[i].class);
32     }
33     fclose(fp);
34 
35     srand((unsigned)time(NULL));   
36 
37     while(count < 5) {
38         index = rand() % N;        
39         if(flag[index] == 0) {     
40             flag[index] = 1;
41             selected[count] = index;
42             count++;
43         }
44     }
45 
46     printf("中奖名单:\n");
47     for(i = 0; i < 5; i++) {
48         printf("%s %s %s\n", stu[selected[i]].id, stu[selected[i]].name,stu[selected[i]].class);
49     }
50 
51     printf("\n保存到文件\n");
52     printf("输入文件名:");
53     scanf("%s", filename);
54 
55     fout = fopen(filename, "w");
56     if(fout == NULL) {
57         printf("文件创建失败!\n");
58         return 1;
59     }
60 
61     fprintf(fout, "中奖名单:\n");
62     for(i = 0; i < 5; i++) {
63         fprintf(fout, "%s %s %s\n", stu[selected[i]].id, stu[selected[i]].name,stu[selected[i]].class);
64     }
65     fclose(fout);
66 
67     printf("保存成功!\n");
68 
69     return 0;
70 }

运行结果截图

{FE2D8AE8-0C03-4EB5-A3D0-6F7A638F7406}

{E6D6EC85-92C4-4318-8D40-4C9A49EA5086}

 

posted @ 2026-06-22 23:11  202283300498石欣源  阅读(6)  评论(0)    收藏  举报