实验五

四、实验结论

1.

task1_1.c

 1 #include <stdio.h>
 2 
 3 #define N 5
 4 #define M 80
 5 
 6 typedef struct
 7 {
 8     char name[M];
 9     char author[M];
10 }BOOK;
11 
12 int main()
13 {
14     BOOK x[N]={{"一九八四","乔治·奥威尔"},{"美丽新世界","赫胥黎"},{"昨日的世界","斯提芬·茨威格"},{"万历十五年","黄仁宇"},{"一只特立独行的猫","王小波"}};
15     int i;
16     
17     FILE *fp;
18     
19     fp=fopen("data1.txt","w");
20     
21     if(fp==NULL)
22     {
23         printf("fail to open file\n");
24         return 1;
25     }
26     
27     for(i=0;i<N;i++)
28     {
29         fprintf(fp,"%-20s   %-20s\n",x[i].name,x[i].author);
30         printf("%-20s   %-20s\n",x[i].name,x[i].author);
31     }
32     
33     fclose(fp);
34     
35     return 0;
36  } 

 

 

task1_2.c

 1 #include <stdio.h>
 2 
 3 #define N 5
 4 #define M 80
 5 
 6 typedef struct
 7 {
 8     char name[M];
 9     char author[M];
10 }BOOK;
11 
12 int main()
13 {
14     BOOK x[N]; 
15     int i;
16     
17     FILE *fp;
18     
19     fp=fopen("data1.txt","r");
20     
21     if(fp==NULL)
22     {
23         printf("fail to open file\n");
24         return 1;
25     }
26     
27     for(i=0;i<N;i++)
28     {
29         fscanf(fp,"%s   %s\n",x[i].name,x[i].author);
30         printf("%-20s   %-20s\n",x[i].name,x[i].author);
31     }
32     
33     fclose(fp);
34     
35     return 0;
36  } 

 

Q1:x[i].name和x[i].author本身作为一个地址。

 

2.

task2_1.c

 1 #include <stdio.h>
 2 
 3 #define N 5
 4 #define M 80
 5 
 6 typedef struct
 7 {
 8     char name[M];
 9     char author[M];
10 }BOOK;
11 
12 int main()
13 {
14     BOOK x[N]={{"一九八四","乔治·奥威尔"},{"美丽新世界","赫胥黎"},{"昨日的世界","斯提芬·茨威格"},{"万历十五年","黄仁宇"},{"一只特立独行的猫","王小波"}};
15     int i;
16     
17     FILE *fp;
18     
19     fp=fopen("data2.dat","wb");
20     
21     if(fp==NULL)
22     {
23         printf("fail to open file\n");
24         return 1;
25     }
26     
27     fwrite(x,sizeof(BOOK),N,fp);
28     
29     fclose(fp);
30     
31     return 0;
32  } 

 

 

task2_2.c

 1 #include <stdio.h>
 2 
 3 #define N 5
 4 #define M 80
 5 
 6 typedef struct
 7 {
 8     char name[M];
 9     char author[M];
10 }BOOK;
11 
12 int main()
13 {
14     BOOK x[N]; 
15     int i;
16     
17     FILE *fp;
18     
19     fp=fopen("data2.dat","rb");
20     
21     if(fp==NULL)
22     {
23         printf("fail to open file\n");
24         return 1;
25     }
26     
27     fread(x,sizeof(BOOK),N,fp);
28     
29     for(i=0;i<N;i++)
30         printf("%-20s   %-20s\n",x[i].name,x[i].author);
31     
32     fclose(fp);
33     
34     return 0;
35  } 

 

Q1: yes.

Q2: no.

 

 

3.

task3.c

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     FILE *fin,*fout;
 6     char ch;
 7     
 8     fin=fopen("data3_1.txt","r");
 9     
10     if(fin==NULL)
11     {
12         printf("fail to open data3_1.txt\n");
13         return 1;
14     }
15     
16     fout=fopen("data3_2.txt","w");
17     
18     if(fin==NULL)
19     {
20         printf("fail to open data3_2.txt\n");
21         return 1;
22     }
23     
24     while(!feof(fin))
25     {
26         ch=fgetc(fin);
27         
28         if(ch>='a'&&ch<='z')
29             ch-=32;
30         
31         fputc(ch,fout);
32     }
33     
34     fclose(fin);
35     fclose(fout);
36     
37     return 0;
38 }

 

 

5.

task5.c

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 
  5 #define N 10
  6 
  7 typedef struct
  8 {
  9     long int id;
 10     char name[20];
 11     float objective; 
 12     float subjective; 
 13     float sum;
 14     char level[10];
 15 } STU;
 16 
 17 void input(STU s[], int n);
 18 void output(STU s[], int n);
 19 void process(STU s[], int n);
 20 
 21 int main()
 22 {
 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打印考生完整信息, 并保存到文件中");
 32     output(stu, N);
 33 
 34     return 0;
 35 }
 36 
 37 void input(STU s[], int n)
 38 {
 39     int i;
 40     FILE *fin;
 41 
 42     fin = fopen("examinee.txt", "r");
 43     if (fin == NULL)
 44     {
 45         printf("fail to open file\n");
 46         exit(0);
 47     }
 48 
 49     while (!feof(fin))
 50     {
 51         for (i = 0; i < n; i++)
 52             fscanf(fin, "%ld %s %f %f", &s[i].id, s[i].name, &s[i].objective, &s[i].subjective);
 53     }
 54 
 55     fclose(fin);
 56 }
 57 
 58 void output(STU s[], int n)
 59 {
 60     FILE *fout;
 61     int i;
 62     
 63     printf("\n");
 64     printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t等级\n");
 65     for (i = 0; i < n; i++)
 66         printf("%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);
 67     
 68     fout = fopen("result.txt", "w");
 69     if (!fout)
 70     {
 71         printf("fail to open or create result.txt\n");
 72         exit(0);
 73     }
 74 
 75     fprintf(fout, "准考证号\t\t姓名\t客观题得分\t操作题得分\t总分\t\t等级\n");
 76 
 77     for (i = 0; i < n; i++)
 78         fprintf(fout, "%ld\t\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].level);
 79 
 80     fclose(fout);
 81 }
 82 
 83 void process(STU s[], int n)
 84 {
 85     int i,j;
 86     STU temp;
 87     char level[4][10]={"优秀","合格","不合格"}; 
 88     
 89     for(i=0;i<n;i++)
 90         s[i].sum=s[i].objective+s[i].subjective;
 91     
 92     for(i=0;i<n-1;i++)
 93         for(j=n-1;j>i;j--)
 94             if(s[j].sum>s[j-1].sum)
 95             {
 96                 temp=s[j];
 97                 s[j]=s[j-1];
 98                 s[j-1]=temp;
 99             }
100             
101     for(i=1;i<=n;i++)
102     {
103         if(i<=0.1*n)
104             strcpy(s[i-1].level,level[0]);
105         else if(i<=0.5*n)
106                 strcpy(s[i-1].level,level[1]);
107              else strcpy(s[i-1].level,level[2]); 
108     }
109 }

 

 

6.

task6.c

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <time.h>
 5 
 6 #define N 80
 7 #define M 5
 8 
 9 typedef struct
10 {
11     long int id;
12     char name[20];
13     char classes[20];
14 } STU;
15 
16 void input(STU s[], int n);
17 void output(STU s[], int n);
18 void process(STU s[], int n, STU z[], int m);
19 
20 int main()
21 {
22     STU stu[N],lucky[M];
23     
24     input(stu, N);
25     
26     process(stu, N, lucky, M);
27     
28     output(lucky, M);
29     
30     return 0;
31 }
32 
33 void input(STU s[], int n)
34 {
35     int i;
36     FILE *fin;
37 
38     fin = fopen("list.txt", "r");
39     if (fin == NULL)
40     {
41         printf("fail to open file\n");
42         exit(0);
43     }
44 
45     while (!feof(fin))
46     {
47         for (i = 0; i < n; i++)
48             fscanf(fin, "%ld    %s    %s", &s[i].id, s[i].name, s[i].classes);
49     }
50 
51     fclose(fin);
52 }
53 
54 void output(STU s[], int n)
55 {
56     FILE *fout;
57     int i;
58     
59     printf("\n");
60     printf("学号\t\t姓名\t班级\n");
61     for (i = 0; i < n; i++)
62         printf("%ld\t%s\t%s\n", s[i].id, s[i].name, s[i].classes);
63     
64     fout = fopen("lucky.txt", "w");
65     if (!fout)
66     {
67         printf("fail to open or create lucky.txt\n");
68         exit(0);
69     }
70 
71     fprintf(fout, "学号\t\t姓名\t班级\n");
72 
73     for (i = 0; i < n; i++)
74         fprintf(fout, "%ld\t%s\t%s\n", s[i].id, s[i].name, s[i].classes);
75 
76     fclose(fout);
77 }
78 
79 void process(STU s[], int n, STU z[], int m)
80 {
81     srand(time(NULL));
82     int num[m], i, j;
83     
84     for(i = 0; i < m; i++)
85     {
86         num[i] = rand() % (n-1);
87         for(j = i; j > 0; j--)
88             if(num[j-1] == num[i])
89                 i--;
90     }
91     for(i = 0; i < m; i++)
92     {
93         j=num[i];
94         z[i]=s[j];
95     }
96 }

 

 

选做2:

 1 void process(STU s[], int n, STU z[], int m)
 2 {
 3     srand(time(NULL));
 4     int num[m], i, j;
 5     
 6     for(i = 0; i < m; i++)
 7     {
 8         num[i] = rand() % (n-1);
 9         for(j = i; j > 0; j--)
10             if(num[j-1] == num[i])
11                 i--;
12     }
13     for(i = 0; i < m; i++)
14     {
15         j=num[i];
16         z[i]=s[j];
17     }
18 }

 

posted @ 2022-06-06 15:26  Nixmout  阅读(14)  评论(1编辑  收藏  举报