【沈阳航空航天大学】 <文件那两个题>

文件-应要求给你们整出来了(泪目)


文件我是真不太会

对文件中存储的学生成绩进行统计

【问题描述】每个学生有包括学号、班级、姓名、成绩,从文件1.txt输入以上数据。
计算每个班级的平均成绩,以及所有学生的总平均成绩,计算90分以上,89-80分,79-70分,69-60分,60分以下的人数。将这些信息写入文件"2.txt"中。
【输入形式】从文件1.txt中读入学生信息
【输出形式】把统计好的成绩信息输出的2.txt文件中。
【样例输入】文件1.txt中内容,每位同学信息占一行,行内信息以单个空格分隔。
110 class1 li 90
120 class1 wang 60
130 class2 chen 75
140 class1 ma 80
150 class2 wei 65
【样例输出】文件2.txt中内容无空格,所有值取整数。第一行总平均成绩,以下各行为每个班的平均成绩,然后是全部学生中,90分以上人数,89-80人数,79-70人数,69-60人数,60分以下人数。
all ave 74
class1 ave 76
class2 ave 70
90 Above:1
89-80:1
79-70:1
69-60:2
60 Under:0

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Student {
    int studentNumber; // 学号
    char className[20]; // 班级名称
    char name[20]; // 姓名
    int score; // 成绩
};

void calculateStatistics(struct Student* students, int numStudents, const char* outputFileName) {
    int totalScore = 0; // 总成绩
    int totalStudents = 0; // 总学生人数
    int num90Above = 0; // 90分以上的人数
    int num89to80 = 0; // 89-80分的人数
    int num79to70 = 0; // 79-70分的人数
    int num69to60 = 0; // 69-60分的人数
    int num60Under = 0; // 60分以下的人数

    int class1TotalScore = 0; // class1的总成绩
    int class1Students = 0; // class1的学生人数
    int class2TotalScore = 0; // class2的总成绩
    int class2Students = 0; // class2的学生人数
    int class3TotalScore = 0; // class3的总成绩
    int class3Students = 0; // class3的学生人数
    int class4TotalScore = 0; // class4的总成绩
    int class4Students = 0; // class4的学生人数
    int class5TotalScore = 0; // class5的总成绩
    int class5Students = 0; // class5的学生人数

    for (int i = 0; i < numStudents; i++) {
        totalScore += students[i].score;
        totalStudents++;

        if (students[i].score >= 90) {
            num90Above++;
        }
        else if (students[i].score >= 80) {
            num89to80++;
        }
        else if (students[i].score >= 70) {
            num79to70++;
        }
        else if (students[i].score >= 60) {
            num69to60++;
        }
        else {
            num60Under++;
        }

        if (strcmp(students[i].className, "class1") == 0) {
            class1TotalScore += students[i].score;
            class1Students++;
        }
        else if (strcmp(students[i].className, "class2") == 0) {
            class2TotalScore += students[i].score;
            class2Students++;
        }
        else if (strcmp(students[i].className, "class3") == 0) {
            class3TotalScore += students[i].score;
            class3Students++;
        }
        else if (strcmp(students[i].className, "class4") == 0) {
            class4TotalScore += students[i].score;
            class4Students++;
        }
        else if (strcmp(students[i].className, "class5") == 0) {
            class5TotalScore += students[i].score;
            class5Students++;
        }
    }

    FILE* outputFile = fopen(outputFileName, "w");
    if (outputFile == NULL) {
        printf("Failed to open file\n");
        return;
    }

    // 输出总平均成绩
    if (totalStudents == 0) {
        fprintf(outputFile, "all ave 0\n");
    } else {
        fprintf(outputFile, "all ave %d\n", totalScore / totalStudents);
    }

    // 输出各个班级的平均成绩,并判断学生人数是否为零
    if (class1Students != 0) {
        fprintf(outputFile, "class1 ave %d\n", class1TotalScore / class1Students);
    }

    if (class2Students != 0) {
        fprintf(outputFile, "class2 ave %d\n", class2TotalScore / class2Students);
    }

    if (class3Students != 0) {
        fprintf(outputFile, "class3 ave %d\n", class3TotalScore / class3Students);
    }

    if (class4Students != 0) {
        fprintf(outputFile, "class4 ave %d\n", class4TotalScore / class4Students);
    }

    if (class5Students != 0) {
        fprintf(outputFile, "class5 ave %d\n", class5TotalScore / class5Students);
    }

    fprintf(outputFile, "90 Above:%d\n", num90Above);
    fprintf(outputFile, "89-80:%d\n", num89to80);
    fprintf(outputFile, "79-70:%d\n", num79to70);
    fprintf(outputFile, "69-60:%d\n", num69to60);
    fprintf(outputFile, "60 Under:%d\n", num60Under);

    fclose(outputFile);
}

int main() {
    FILE* inputFile = fopen("1.txt", "r");
    if (inputFile == NULL) {
        printf("Failed to open file\n");
        return 0;
    }

    struct Student students[100];
    int numStudents = 0;

    int studentNumber, score;
    char className[20], name[20];

    while (fscanf(inputFile, "%d %s %s %d", &studentNumber, className, name, &score) == 4) {
        students[numStudents].studentNumber = studentNumber;
        strcpy(students[numStudents].className, className);
        strcpy(students[numStudents].name, name);
        students[numStudents].score = score;
        numStudents++;
    }

    fclose(inputFile);

    calculateStatistics(students, numStudents, "2.txt");
    return 0;
}

按要求对两个文件合并

【问题描述】编一个程序,合并两个已按递增排序的整数文件成一个按递增排序文件。
【输入形式】输入两个文件,文件名分别为1.txt和2.txt,在两个文件中分别输入已经排好序的整数,整数之间用单个空格隔开
【输出形式】输出按递增排好序的文件3.txt,输出文件中的整数用单个空格分隔
【样例输入】1.txt中内容为:1 3 4 5;2.txt中内容为:6 7 8
【样例输出】3.txt中内容为:1 3 4 5 6 7 8
【样例输入】1.txt中内容为:1 3 5;2.txt中内容为:2 4 6
【样例输出】3.txt中内容为:1 2 3 4 5 6

#include<stdio.h> 
#include<stdlib.h>

// 将两个有序文件合并成一个有序文件
void mergeFiles(const char* fileName1, const char* fileName2, const char* outputFileName) {
    FILE* file1 = fopen(fileName1, "r");
    FILE* file2 = fopen(fileName2, "r");
    FILE* outputFile = fopen(outputFileName, "w");

    if (file1 == NULL || file2 == NULL || outputFile == NULL) {
        printf("Failed to open files\n");
        return;
    }

    int num1, num2;
    int readFromFile1 = fscanf(file1, "%d", &num1);
    int readFromFile2 = fscanf(file2, "%d", &num2);

    // 逐个比较并写入较小的数
    while (readFromFile1 == 1 && readFromFile2 == 1) {
        if (num1 <= num2) {
            fprintf(outputFile, "%d ", num1);
            readFromFile1 = fscanf(file1, "%d", &num1);
        }
        else {
            fprintf(outputFile, "%d ", num2);
            readFromFile2 = fscanf(file2, "%d", &num2);
        }
    }

    // 将剩余的数写入文件
    while (readFromFile1 == 1) {
        fprintf(outputFile, "%d ", num1);
        readFromFile1 = fscanf(file1, "%d", &num1);
    }

    while (readFromFile2 == 1) {
        fprintf(outputFile, "%d ", num2);
        readFromFile2 = fscanf(file2, "%d", &num2);
    }

    fclose(file1);
    fclose(file2);
    fclose(outputFile);
}

int main()
{
    mergeFiles("1.txt", "2.txt", "3.txt");
    return 0;
}

今天的内容就分享这么多
求三连!!!
求关注!!!

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NineSense

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值