高级语言程序设计课程第十次个人作业

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/gjyycx

这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/gjyycx/homework/15596

学号:<052301346>

姓名:<郑积超>


作业内容

1. 编写一个程序,将一个文件的内容复制到另一个文件中

image
同目录下test1.txt和test2.txt
image
image

2. 编写一个程序,统计一个文本文件中的字符数

test1.txt内容同上题
image

3. 编写一个程序,读取一个文本文件的内容,并在控制台上显示

image

4. 编写一个程序,向一个文本文件的末尾追加一行文本。

image
追加后test1.txt的内容
image

5. 编写一个程序,读取一个文本文件,删除文件中的特定行(例如,包含特定单词的行),并将结果保存到新文件中

#pragma warning(disable : 4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX_LINE_LENGTH 1024
#define SEARCH_STRING "test1"

int main() {
    FILE* inputFile, * outputFile;
    char line[MAX_LINE_LENGTH];
    int lineCount = 0;
    int removedCount = 0;

    inputFile = fopen("test1.txt", "r");
    if (inputFile == NULL) {
        printf("错误:无法打开 test1.txt\n");
        return 1;
    }

    outputFile = fopen("test2.txt", "w");
    if (outputFile == NULL) {
        printf("错误:无法创建或写入 test2.txt\n");
        fclose(inputFile);
        return 1;
    }

    printf("正在搜索并删除包含 \"%s\" 的行...\n", SEARCH_STRING);

    while (fgets(line, sizeof(line), inputFile) != NULL) {
        lineCount++;

        if (strstr(line, SEARCH_STRING) == NULL) {
            fputs(line, outputFile);
        }
        else {
            removedCount++;
            printf("删除第 %d 行: %s", lineCount, line);
        }
    }

    fclose(inputFile);
    fclose(outputFile);

    return 0;
}

原test1.txt内容
image
删除带有test1行的运行结果
image

新text2.txt内容
image

6. 计算并显示一个文件的大小(以字节为单位),要求使用ftell

image

7. 有五个学生,每个学生有 3 门课的成绩,从键盘输入以上数据(包括学号,姓名,三门课成绩),计算出平均成绩,将原有的数据和计算出的平均分数存放在磁盘文件"student.txt"中

#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Student {
    char studentID[20];
    char name[50];
    float scores[3];
    float average;
};

void inputStudent(struct Student* stu);
void calculateAverage(struct Student* stu);
void saveToFile(struct Student students[], int count);
int main() {
    struct Student students[5];
    int i;
    for (i = 0; i < 5; i++) {
        printf("\n--- 请输入第%d个学生的信息 ---\n", i + 1);
        inputStudent(&students[i]);
        calculateAverage(&students[i]);
    }
    saveToFile(students, 5);
    printf("已成功录入 %d 名学生信息\n", 5);

    return 0;
}

void inputStudent(struct Student* stu) {
    printf("学号: ");
    scanf("%s", stu->studentID);

    printf("姓名: ");
    scanf("%s", stu->name);

    printf("请输入3门课的成绩(用空格分隔):\n");
    printf("第一门课成绩: ");
    scanf("%f", &stu->scores[0]);

    printf("第二门课成绩: ");
    scanf("%f", &stu->scores[1]);

    printf("第三门课成绩: ");
    scanf("%f", &stu->scores[2]);

    while (getchar() != '\n');
}

void calculateAverage(struct Student* stu) {
    stu->average = (stu->scores[0] + stu->scores[1] + stu->scores[2]) / 3.0;
}

void saveToFile(struct Student students[], int count) {
    FILE* file;
    int i, j;

    file = fopen("student.txt", "w");
    if (file == NULL) {
        printf("错误:无法创建或写入 student.txt 文件\n");
        printf("请检查文件权限或磁盘空间\n");
        exit(1);
    }

    fprintf(file, "========== Student Score Table==========\n");
    fprintf(file, "ID\tName\t\tScore1\tScore2\tScore3\tAvgScore\n");
    fprintf(file, "-----------------------------------------\n");

    for (i = 0; i < count; i++) {
        fprintf(file, "%s\t%s\t\t",
            students[i].studentID, students[i].name);

        for (j = 0; j < 3; j++) {
            fprintf(file, "%.1f\t", students[i].scores[j]);
        }

        fprintf(file, "%.2f\n", students[i].average);
    }
    fprintf(file, "-----------------------------------------\n");
    fclose(file);
}

image

student.txt
image


总结与思考

学会了对文件基本读写操作

posted @ 2025-12-22 16:50  052301346郑积超  阅读(5)  评论(0)    收藏  举报