实验7

任务4:
源代码:

 1 #include <stdio.h>
 2 #include <ctype.h>
 3 #define N 100
 4 void count(const char *name);
 5 
 6 int main() {
 7     char name[N];
 8 
 9     scanf("%s",name);
10 
11     count(name);
12 
13     return 0;
14 }
15 
16 void count(const char *name) {
17     FILE *fp;
18     int ch;
19     int line_count=0;
20     int char_count=0;
21 
22     fp=fopen(name,"r");
23     
24     if(fp==NULL) {
25         printf("fail to open file to read\n");
26         return;
27     }
28     while((ch=fgetc(fp))!=EOF){
29         if(ch=='\n'){
30             line_count++;
31         }
32         if(!isspace(ch)){
33             char_count++;
34         }
35     }
36     if(char_count>0&&(ch!='\n')){
37         line_count++;
38     }
39     printf("%s的统计结果:\n",name);
40     printf("行数:\t\t\t%d\n",line_count);
41     printf("字符数(不计空白符):\t%d\n",char_count);
42     fclose(fp);
43 }

 

任务5:

源代码:

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  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     write(stu, N);    // 输出考试通过的考生信息到文件
 35 
 36     pass_rate = 1.0 * cnt / N;
 37     printf("\n本次等级考试通过率: %.2f%%\n", pass_rate*100);
 38 
 39     return 0;
 40 }
 41 
 42 // 把所有考生完整信息输出到屏幕上
 43 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
 44 void output(STU st[], int n) {
 45     int i;
 46     
 47     printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
 48     for (i = 0; i < n; i++)
 49         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);
 50 }
 51 
 52 // 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
 53 void read(STU st[], int n) {
 54     int i;
 55     FILE *fin;
 56 
 57     fin = fopen("examinee.txt", "r");
 58     if (!fin) {
 59         printf("fail to open file\n");
 60         return;
 61     }
 62 
 63     while (!feof(fin)) {
 64         for (i = 0; i < n; i++)
 65             fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective, &st[i].subjective);
 66     }
 67 
 68     fclose(fin);
 69 }
 70 
 71 // 把通过考试的考生完整信息写入文件list_pass.txt
 72 // 准考证号,姓名,客观题得分,操作题得分,总分,结果
 73 void write(STU s[], int n) {
 74     // 待补足
 75     // xxx
 76     FILE *fp;
 77     int i;
 78     fp=fopen("list_pass.txt","w");
 79     if(!fp){
 80         printf("fail to open file to write\n");
 81         return;
 82     }
 83     fprintf(fp,"准考证号\t\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
 84     for(i=0;i<n;i++){
 85         if(strcmp(s[i].result,"通过")==0){
 86             fprintf(fp,"%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].result);
 87         }
 88     }
 89     fclose(fp);
 90 }
 91 // 对考生信息进行处理:计算每位考生考试总分、结果;统计考试通过的人数
 92 int process(STU st[], int n, STU st_pass[]) {
 93     // 待补足
 94     // xxx
 95     int count=0;
 96     int i;
 97     for(i=0;i<n;i++){
 98         st[i].sum=st[i].objective+st[i].subjective;
 99         if(st[i].sum>=60){
100             strcpy(st[i].result,"通过");
101             st_pass[count++]=st[i];
102         }else{
103             strcpy(st[i].result,"未通过");
104         }
105     }
106     return count;
107 }

 

任务6:
源代码:

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<time.h>
  4 #include<string.h>
  5 #define N 80
  6 typedef struct {
  7     char id[20];
  8     char name[20];
  9     char clas[50];
 10 } STU;
 11 void read(STU st[], int n);
 12 void sort(STU st[],int n);
 13 void output(STU st[],int n);
 14 void write(STU st[],int n,char filename[]);
 15 int main(){
 16     time_t t = time(NULL);
 17     struct tm tm = *localtime(&t);
 18     
 19     char filename[20],timename[20];
 20     sprintf(filename, "%04d%02d%02d.txt", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
 21     sprintf(timename, "%04d%02d%02d", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);
 22     
 23     srand(time(NULL));
 24     
 25     STU stu[N],stus[N];
 26     read(stu, N);
 27     
 28     int num,x[N],i,j=0,k=0;
 29     for(i=0;i<5;i++){
 30         do{
 31             k=0;
 32             num=rand()%80;
 33             for(j=0;j<i;j++){
 34                 if(x[j]==num){
 35                     k=1;
 36                     break;
 37                 }
 38             }
 39         }while(k);
 40         x[i]=num;
 41         stus[i]=stu[x[i]];
 42     }
 43     
 44     sort(stus,5);
 45     
 46     printf("-------------%s抽点名单---------------\n",timename);
 47     output(stus,5);
 48     write(stus,5,filename);
 49     printf("\n文件保存成功!");
 50     
 51     return 0;
 52 }
 53 void read(STU st[], int n){
 54     int i=0;
 55     FILE *fin;
 56 
 57     fin = fopen("list.txt","r");
 58     if (!fin) {
 59         printf("fail to open file\n");
 60         return;
 61     }
 62 
 63     while(fscanf(fin,"%s %s %s",st[i].id,st[i].name,st[i].clas)==3&&i<n){
 64         i++;
 65     }
 66 
 67     fclose(fin);
 68 }
 69 void sort(STU st[],int n){
 70     STU t;
 71     int i,j;
 72     for(i=0;i<n-1;i++){
 73         for(j=0;j<n-i-1;j++){
 74                 if(strcmp(st[j].id,st[j+1].id)>0){
 75                     t=st[j];
 76                     st[j]=st[j+1];
 77                     st[j+1]=t;
 78                 }
 79         }
 80     }
 81 }
 82 void output(STU st[],int n){
 83     int i;
 84     for(i=0;i<n;i++){
 85         printf("%s\t%s\t%s\n",st[i].id,st[i].name,st[i].clas);
 86     }
 87 }
 88 void write(STU st[],int n,char filename[]){
 89     FILE *fp;
 90     int i;
 91     fp=fopen(filename,"w");
 92     if(!fp){
 93         printf("fail to open file to write\n");
 94         return;
 95     }
 96     for(i=0;i<n;i++){
 97         fprintf(fp,"%s\t%s\t%s\n",st[i].id,st[i].name,st[i].clas);
 98     }
 99     fclose(fp);
100 }

 

posted @ 2024-12-29 21:46  xipar  阅读(3)  评论(0编辑  收藏  举报