首页 > 其他分享 >实验七

实验七

时间:2024-12-29 14:35:04浏览次数:4  
标签:int void st char stu 实验 fin

任务四:

源代码:

#include <stdio.h>
int main()
{
    int line_count=1,char_count=0;
    FILE *fp=fopen("data4.txt","r");
    while(!feof(fp))
    {
        char ch=fgetc(fp);
        if(ch==EOF)
        break;
        
        if(ch=='\n')
        line_count++;
        else if(!(ch=='\t'||ch==' '))
        char_count++;
    }
    fclose(fp);
    printf("data4.txt统计结果:\n行数:%d\n字符数(不计空白符):%d",line_count,char_count); 
    return 0;
}

运行结果:

 

 

任务五:

源代码:

#include <stdio.h>
#include <string.h>
#define N 10
typedef struct {
    long id;            // 准考证号
    char name[20];      // 姓名
    float objective;    // 客观题得分
    float subjective;   // 操作题得分
    float sum;          // 总分
    char result[10];    // 考试结果
} STU;

// 函数声明
void read(STU st[], int n);
void write(STU st[], int n);
void output(STU st[], int n);
int process(STU st[], int n, STU st_pass[]);

int main() {
    STU stu[N], stu_pass[N];
    int cnt;
    double pass_rate;

    printf("从文件读入%d个考生信息...\n", N);
    read(stu, N);

    printf("\n对考生成绩进行统计...\n");
    cnt = process(stu, N, stu_pass);

    printf("\n通过考试的名单:\n");
    output(stu, N);   // 输出所有考生完整信息到屏幕
    write(stu, N);    // 输出考试通过的考生信息到文件

    pass_rate = 1.0 * cnt / N;
    printf("\n本次等级考试通过率: %.2f%%\n", pass_rate*100);

    return 0;
}

// 把所有考生完整信息输出到屏幕上
// 准考证号,姓名,客观题得分,操作题得分,总分,结果
void output(STU st[], int n) {
    int i;
    
    printf("准考证号\t姓名\t客观题得分\t操作题得分\t总分\t\t结果\n");
    for (i = 0; i < n; i++)
        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);
}

// 从文本文件examinee.txt读入考生信息:准考证号,姓名,客观题得分,操作题得分
void read(STU st[], int n) {
    int i;
    FILE *fin;

    fin = fopen("examinee.txt", "r");
    if (!fin) {
        printf("fail to open file\n");
        return;
    }

    while (!feof(fin)) {
        for (i = 0; i < n; i++)
            fscanf(fin, "%ld %s %f %f", &st[i].id, st[i].name, &st[i].objective, &st[i].subjective);
    }

    fclose(fin);
}

// 把通过考试的考生完整信息写入文件list_pass.txt
// 准考证号,姓名,客观题得分,操作题得分,总分,结果
void write(STU s[], int n) {
    // 待补足
    int i;
    FILE *fp; 
    fp=fopen("list_pass.txt","w");
    if(!fp){
        printf("fail to open file\n");
        return;
    }
    
    fprintf(fp, "%-15s%-25s%-20s%-20s%-20s%-20s\n","准考证号","姓名","客观题得分","操作题得分","总分","结果");
    for(i=0;i<n;i++){
        if(strcmp(s[i].result,"通过")==0)
            fprintf(fp,  "%-15ld%-25s%-20.2f%-20.2f%-20.2f%-20s\n", s[i].id, s[i].name, s[i].objective, s[i].subjective, s[i].sum, s[i].result);
    }
    
    fclose(fp);
}


// 对考生信息进行处理:计算每位考生考试总分、结果;统计考试通过的人数
int process(STU st[], int n, STU st_pass[]) {
    // 待补足
    int i,j;
    for(i=0,j=0;i<n;i++){
        st[i].sum=st[i].objective+st[i].subjective;
        if(st[i].sum>=60){
            strcpy(st[i].result,"通过");
            st_pass[j++]=st[i]; 
        }
        else{
            strcpy(st[i].result,"未通过");
        }
    }
    return j;
}

运行结果:

 

 

任务六:

 

必做部分

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 80

typedef struct{
    char id[10];
    char name[10];
    char class[20];
}stu;

void read(stu s[N]);
void choose(stu s[],int n);
int main() {
    stu s[N];
    int i;    
    read(s);
    choose(s,N);
    
    return 0;
}
void read(stu s[N]){
    int i=0;
    FILE *fin;
    fin=fopen("list.txt","r");
    if(!fin){
        printf("fail to open file\n");
        return;
    } 
    while(fscanf(fin, "%s %s %s", s[i].id, s[i].name, s[i].class) != EOF)
        i++;
    
    fclose(fin);
}

void choose(stu s[],int n){
    FILE *fp; 
    int i,j,k=0,g;
    int c[5];
    char filename[20]; 
    srand(time(NULL));

    for (i = 0; k< 5; i++) {
        j=rand()%n;
        int is_duplicate = 0;
        for(g=0;g<k;g++){
            if(j==c[g])
                is_duplicate = 1;
                break;
        }
        if (!is_duplicate)
            c[k++]=j;
    }   
    printf("------------------随机抽点名单------------------\n");
    for (i = 0; i < 5; i++) {
    printf("%s\t%s\t%s\n", s[c[i]].id, s[c[i]].name, s[c[i]].class);
    }
    
    printf("\n------------------保存到文件------------------\n");
    printf("输入文件名: ");
    scanf("%s",filename);
    fp=fopen(filename,"w");
    if(!fp){
        printf("fail to open the file");
        return;
    }
    for (i = 0; i < 5; i++) {
    fprintf(fp,"%s\t%s\t%s\n", s[c[i]].id, s[c[i]].name, s[c[i]].class);
    }
    fclose(fp);
    printf("保存成功!\n");
}

运行结果;

 

选做部分:

源代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 80
typedef struct {
    char id[10];
    char name[10];
    char class[20];
} stu;
void read(stu s[N]);
void choose(stu s[], int n);
void generate_filename(char *filename);
int main() {
    stu s[N];
    read(s);
    choose(s, N);
    return 0;
}
void read(stu s[N]) {
    int i = 0;
    FILE *fin;
    fin = fopen("list.txt", "r");
    if (!fin) {
        printf("fail to open file\n");
        return;
    }
    while (fscanf(fin, "%s %s %s", s[i].id, s[i].name, s[i].class) != EOF)
        i++;
    fclose(fin);
}
void choose(stu s[], int n) {
    FILE *fp;
    int i, j, k = 0, g;
    stu t;
    stu selected[5];
    int c[5];
    char filename[20];
    srand(time(NULL));
    for (i = 0; k < 5; i++) {
        j = rand() % n;
        int is_duplicate = 0;
        for (g = 0; g < k; g++) {
            if (j == c[g]) {
                is_duplicate = 1;
                break;
            }
        }
        if (!is_duplicate)
            c[k++] = j;
    }
    for (i = 0; i < 5; i++) {
        selected[i] = s[c[i]];
    }
    for (i = 0; i < k; i++) {
        for (j = 0; j < k - 1 - i; j++) {
            if (strcmp(selected[j].id, selected[j + 1].id) > 0) {
                t = selected[j];
                selected[j] = selected[j + 1];
                selected[j + 1] = t;
            }
        }
    }
    printf("------------------随机抽点名单------------------\n");
    for (i = 0; i < 5; i++) {
        printf("%s\t%s\t%s\n", selected[i].id, selected[i].name, selected[i].class);
    }
    printf("\n------------------保存到文件------------------\n");
    generate_filename(filename);
    fp = fopen(filename, "w");
    if (!fp) {
        printf("fail to open the file");
        return;
    }
    for (i = 0; i < 5; i++) {
        fprintf(fp, "%s\t%s\t%s\n", selected[i].id, selected[i].name, selected[i].class);
    }
    fclose(fp);
    printf("保存成功!\n");
}
void generate_filename(char *filename) {
    time_t now;
    struct tm *local;
    char date[20];
    time(&now);
    local = localtime(&now);
    strftime(date, sizeof(date), "%Y%m%d", local);
    sprintf(filename, "%s.txt", date);
}

运行结果:

 

#include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 
 5 #define N 80
 6 
 7 typedef struct{
 8     char id[10];
 9     char name[10];
10     char class[20];
11 }stu;
12 
13 void read(stu s[N]);
15 void choose(stu s[],int n);
16 
17 int main() {
18     stu s[N];
19     int i;
20     
21     read(s);
22     choose(s,N);
23     
24     return 0;
25 }
26 
27 void read(stu s[N]){
28     int i=0;
29     FILE *fin;
30     fin=fopen("list.txt","r");
31     if(!fin){
32         printf("fail to open file\n");
33         return;
34     }
35     
36     while(fscanf(fin, "%s %s %s", s[i].id, s[i].name, s[i].class) != EOF)
37         i++;
38     
39     fclose(fin);
40 }
41 
42 void choose(stu s[],int n){
43     FILE *fp;
44     
45     int i,j,k=0,g;
46     int c[5];
47     char filename[20]; 
49     srand(time(NULL));
50 
52     for (i = 0; k< 5; i++) {
53         j=rand()%n;
54         int is_duplicate = 0;
55         for(g=0;g<k;g++){
56             if(j==c[g])
57                 is_duplicate = 1;
58                 break;
59         }
60         if (!is_duplicate)
61             c[k++]=j;
62     }
63     
64     printf("------------------随机抽点名单------------------\n");
65     for (i = 0; i < 5; i++) {
66     printf("%s\t%s\t%s\n", s[c[i]].id, s[c[i]].name, s[c[i]].class);
67     }
68     
69     printf("\n------------------保存到文件------------------\n");
70     printf("输入文件名: ");
71     scanf("%s",filename);
72     fp=fopen(filename,"w");
73     if(!fp){
74         printf("fail to open the file");
75         return;
76     }
77     for (i = 0; i < 5; i++) {
78     fprintf(fp,"%s\t%s\t%s\n", s[c[i]].id, s[c[i]].name, s[c[i]].class);
79     }
80     fclose(fp);
81     printf("保存成功!\n");
82 
83 
84 
85 }

标签:int,void,st,char,stu,实验,fin
From: https://www.cnblogs.com/hcjinniuzuo/p/18638751

相关文章

  • 实验7
    任务4源代码#include<stdio.h>#defineN30intmain(){chars[N];inti,n;intline=0,word=0;FILE*fin;fin=fopen("data4.txt","r");if(!fin){printf("failtoopenthefile");ret......
  • 实验7
    1#include<stdio.h>2intmain(){3FILE*fp;4fp=fopen("data4.txt","r");5charch;6inta=1,b=0;7while((ch=fgetc(fp))!=EOF){8if(ch=='\n'){9a......
  • 实验七
    任务四源代码1#include<stdio.h>2#include<string.h>3intmain(){4FILE*fp;5fp=fopen("d:\\data4.txt","r");6if(fp==NULL){7printf("failtoopenfiletowrite\n");8return;9......
  • 实验7
    实验任务4:1#include<stdio.h>2#include<stdlib.h>3intis_word(charx);4intmain(){5FILE*fp;6charch;7inti,line=1,count=0;89fp=fopen("d:\\data4.txt","r");10if(!fp)11......
  • 实验7_文件应用编程
    任务4#include<stdio.h>#include<stdlib.h>#include<stdbool.h>//判断字符是否为空白字符(空格、回车、tab)boolis_blank(charc){returnc==''||c=='\t'||c=='\n';}intmain(){charfilename[100];......
  • 实验7
    1.实验任务4程序task4.c源码1#include<stdio.h>2#defineN103#defineM100456intmain(){7charx[N][M];8inti,j,cnt=0,count=0;9FILE*fp;1011fp=fopen("data4.txt","r");12if(!fp){13......
  • 正在测试和完善的CH552(CH549)USB下载之单按键带入电路实验
    一、设计理由CH552或CH549进入USB下载,通常需要两个按键,一个控制电源的通断,一个通过串联电阻(一头接VCC或V33)冷启动时抬高UDP电平。时序上是这样的:断电--按下接UDP的轻触开关--通电--松开接UDP的轻触开关。这样操作上一般需要双手并用,比较麻烦。二、电子电路本人设计的电路是想通......
  • 实验七
    task4源代码:#include<stdio.h>#defineN10#defineM80voidcount_line(int*ptr1);voidcount_num(int*ptr2);intmain(){inta,b;count_line(&a);count_num(&b);printf("行数为:%d\n",a);printf("字符数......
  • 实验7
    #include<stdio.h>voidx(constchar*filePath){FILE*file=fopen(filePath,"r");inta=0;intb=0;if(file==NULL){printf("无法打开文件\n");return;}charline[300];while(......
  • py期末 实验1-6
    选择判断特别是对于范围在-5到256之间的整数。对于这些整数,Python会使用缓存机制,即它们在程序的生命周期内是单例的,所有引用该值的地方都会指向同一个内存地址。while和for可以有elseforiinrange(5):print(i)ifi==3:breakelse:print("循......