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

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


一、

1.1

题目:
编写一个程序,将一个文件的内容复制到另一个文件中。

#include <stdio.h>

int main() {
    char sourceFile[100], targetFile[100], ch;
    FILE *source, *target;

    printf("请输入源文件名:");
    scanf("%s", sourceFile);
    printf("请输入目标文件名:");
    scanf("%s", targetFile);

    source = fopen(sourceFile, "r");
    if (source == NULL) {
        printf("无法打开源文件。\n");
        return 1;
    }

    target = fopen(targetFile, "w");
    if (target == NULL) {
        printf("无法创建目标文件。\n");
        fclose(source);
        return 1;
    }

    while ((ch = fgetc(source)) != EOF) {
        fputc(ch, target);
    }

    fclose(source);
    fclose(target);

    printf("文件已成功复制。\n");
    return 0;
}

复制前:

复制过程:

复制后:

思路:
根据题意理解即可。
问题:无
解决:无

1.2

题目:
编写一个程序,统计一个文本文件中的字符数。

#include <stdio.h>

int main() {
    char fileName[100];
    FILE *file;
    char ch;
    int count = 0;

    printf("请输入文件名:");
    scanf("%s", fileName);

    file = fopen(fileName, "r");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    while ((ch = fgetc(file)) != EOF) {
        count++;
    }

    fclose(file);

    printf("文件中的字符数为:%d\n", count);
    return 0;
}


思路:按题意理解即可
问题:无
解决:无

1.3

题目:编写一个程序,读取一个文本文件的内容,并在控制台上显示。

#include <stdio.h>

int main() {
    char fileName[100];
    FILE *file;
    char ch;

    printf("请输入文件名:");
    scanf("%s", fileName);

    file = fopen(fileName, "r");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    while ((ch = fgetc(file)) != EOF) {
        putchar(ch);
    }

    fclose(file);

    return 0;
}



思路:按题意理解即可
问题:无
解决:无

1.4

题目:编写一个程序,向一个文本文件的末尾追加一行文本。

#include <stdio.h>

int main() {
    char fileName[100], text[100];
    FILE *file;

    printf("请输入文件名:");
    scanf("%s", fileName);
    printf("请输入要追加的文本:");
    getchar();
    fgets(text, 100, stdin);

    file = fopen(fileName, "a");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    fputs(text, file);
    fclose(file);

    printf("文本已成功追加。\n");
    return 0;
}


添加前:

添加后:

思路:按题意理解即可
问题:无
解决:无

1.5

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

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

int main() {
    char sourceFile[100], targetFile[100], keyword[100], line[256];
    FILE *source, *target;

    printf("请输入源文件名:");
    scanf("%s", sourceFile);
    printf("请输入目标文件名:");
    scanf("%s", targetFile);
    printf("请输入要删除的关键字:");
    scanf("%s", keyword);

    source = fopen(sourceFile, "r");
    if (source == NULL) {
        printf("无法打开源文件。\n");
        return 1;
    }

    target = fopen(targetFile, "w");
    if (target == NULL) {
        printf("无法创建目标文件。\n");
        fclose(source);
        return 1;
    }

    while (fgets(line, sizeof(line), source)) {
        if (strstr(line, keyword) == NULL) {
            fputs(line, target);
        }
    }

    fclose(source);
    fclose(target);

    printf("处理完成,结果已保存到目标文件。\n");
    return 0;
}

修改前:

修改后:

思路:按题意理解即可
问题:一开始不知道怎么快速检索
解决:后面经过查阅资料学习了strstr函数的用法,把程序的效率提升了

1.6

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

#include <stdio.h>

int main() {
    char fileName[100];
    FILE *file;
    long fileSize;

    printf("请输入文件名:");
    scanf("%s", fileName);

    file = fopen(fileName, "rb");
    if (file == NULL) {
        printf("无法打开文件。\n");
        return 1;
    }

    fseek(file, 0, SEEK_END);
    fileSize = ftell(file);
    fclose(file);

    printf("文件大小为:%ld 字节\n", fileSize);
    return 0;
}


思路:按题意理解即可
问题:无
解决:无

1.7

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

#include <stdio.h>

typedef struct {
    int id;
    char name[50];
    float scores[3];
    float average;
} Student;

int main() {
    Student students[5];
    FILE *file;
    int i, j;

    printf("请输入 5 位学生的学号、姓名和 3 门课成绩:\n");
    for (i = 0; i < 5; i++) {
        printf("第 %d 个学生:\n", i + 1);
        printf("学号:");
        scanf("%d", &students[i].id);
        printf("姓名:");
        scanf("%s", students[i].name);
        printf("三门课成绩:");
        for (j = 0; j < 3; j++) {
            scanf("%f", &students[i].scores[j]);
        }
        students[i].average = (students[i].scores[0] + students[i].scores[1] + students[i].scores[2]) / 3.0;
    }

    file = fopen("student.txt", "w");
    if (file == NULL) {
        printf("无法创建文件。\n");
        return 1;
    }

    fprintf(file, "学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\n");
    for (i = 0; i < 5; i++) {
        fprintf(file, "%d\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n", students[i].id, students[i].name,
                students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].average);
    }

    fclose(file);

    printf("数据已成功写入文件 student.txt。\n");
    return 0;
}


思路:按题意理解即可
问题:无
解决:无


三、总结思考:

  1. 复习了C语言关于文件操作的函数的用法,比如fopen、fclose、fgetc、fgets、fputs、strstr等函数的用法
  2. 学习了C语言文件指针的操作的用法,让我学习到了利用诸如ftell和fseek等函数操作文件指针从而实现对文件的定位和操作,这种方法既高效又快捷,值得认真学习
  3. 复习了结构体的使用,对结构体的灵活性有了更深刻的体会,对我的编程水平的提升有很大帮助,为我未来的编程打下了良好的基础
posted @ 2024-12-08 15:36  空余晚秋  阅读(5)  评论(0编辑  收藏  举报