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

(1)编写一个程序,将一个文件的内容复制到另一个文件中。
`#include <stdio.h>

include <stdlib.h>

void copy_file(const char *source_path, const char *dest_path) {
FILE *source_file = fopen(source_path, "rb"); // 以二进制模式打开源文件
if (source_file == NULL) {
perror("无法打开源文件");
return;
}

FILE *dest_file = fopen(dest_path, "wb");  // 以二进制模式打开目标文件
if (dest_file == NULL) {
    perror("无法打开目标文件");
    fclose(source_file);  // 关闭源文件
    return;
}

char buffer[1024];  // 创建一个缓冲区来存储读取的内容
size_t bytes_read;

// 从源文件读取数据并写入到目标文件
while ((bytes_read = fread(buffer, 1, sizeof(buffer), source_file)) > 0) {
    fwrite(buffer, 1, bytes_read, dest_file);
}

printf("文件已成功复制到 %s\n", dest_path);

fclose(source_file);  // 关闭源文件
fclose(dest_file);    // 关闭目标文件

}

int main() {
const char *source = "source.txt"; // 源文件路径
const char *destination = "destination.txt"; // 目标文件路径

copy_file(source, destination);

return 0;

}
(2)编写一个程序,统计一个文本文件中的字符数。#include <stdio.h>

void count_characters(const char *file_path) {
FILE *file = fopen(file_path, "r"); // 打开文件进行读取
if (file == NULL) {
perror("无法打开文件");
return;
}

char ch;
long char_count = 0;

// 逐个字符读取文件直到文件末尾
while ((ch = fgetc(file)) != EOF) {
    char_count++;  // 每读取一个字符,计数加一
}

printf("文件中的字符数为: %ld\n", char_count);

fclose(file);  // 关闭文件

}

int main() {
const char *file_path = "sample.txt"; // 需要统计字符数的文件路径

count_characters(file_path);  // 调用函数统计字符数

return 0;

}
(3)编写一个程序,读取一个文本文件的内容,并在控制台上显示。#include <stdio.h>

void display_file_contents(const char *file_path) {
FILE *file = fopen(file_path, "r"); // 打开文件进行读取
if (file == NULL) {
perror("无法打开文件");
return;
}

char ch;

// 逐个字符读取文件并打印到控制台
while ((ch = fgetc(file)) != EOF) {
    putchar(ch);  // 输出字符到控制台
}

fclose(file);  // 关闭文件

}

int main() {
const char *file_path = "sample.txt"; // 需要读取的文件路径

display_file_contents(file_path);  // 调用函数显示文件内容

return 0;

}
(4)编写一个程序,向一个文本文件的末尾追加一行文本。#include <stdio.h>

void append_to_file(const char *file_path, const char *text_to_append) {
// 以追加模式打开文件,如果文件不存在则创建
FILE *file = fopen(file_path, "a");
if (file == NULL) {
perror("无法打开文件");
return;
}

// 将文本追加到文件末尾
fprintf(file, "%s\n", text_to_append);

// 关闭文件
fclose(file);

}

int main() {
const char *file_path = "sample.txt"; // 需要追加内容的文件路径
const char *text_to_append = "这是追加的一行文本"; // 要追加的文本内容

append_to_file(file_path, text_to_append);  // 调用函数追加文本

printf("文本已成功追加到文件末尾。\n");

return 0;

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

include <string.h>

void remove_lines_with_word(const char *input_file, const char *output_file, const char *word_to_remove) {
FILE *in_file = fopen(input_file, "r");
if (in_file == NULL) {
perror("无法打开输入文件");
return;
}

FILE *out_file = fopen(output_file, "w");
if (out_file == NULL) {
    perror("无法打开输出文件");
    fclose(in_file);  // 关闭输入文件
    return;
}

char line[1024];  // 存储每行的缓冲区

while (fgets(line, sizeof(line), in_file)) {
    // 判断这一行是否包含特定的单词
    if (strstr(line, word_to_remove) == NULL) {
        // 如果不包含该单词,则写入新文件
        fputs(line, out_file);
    }
}

fclose(in_file);  // 关闭输入文件
fclose(out_file);  // 关闭输出文件

}

int main() {
const char *input_file = "input.txt"; // 原始文件路径
const char *output_file = "output.txt"; // 输出文件路径
const char *word_to_remove = "delete"; // 要删除行的特定单词

remove_lines_with_word(input_file, output_file, word_to_remove);

printf("处理完成,删除了包含单词 '%s' 的行,结果保存在 '%s'。\n", word_to_remove, output_file);

return 0;

}
(6)计算并显示一个文件的大小(以字节为单位),要求使用ftell。#include <stdio.h>

long get_file_size(const char *filename) {
FILE *file = fopen(filename, "rb"); // 以二进制模式打开文件
if (file == NULL) {
perror("无法打开文件");
return -1; // 打开文件失败,返回错误
}

// 移动文件指针到文件末尾
fseek(file, 0, SEEK_END);

// 获取文件指针当前的位置,即文件大小
long size = ftell(file);

fclose(file);  // 关闭文件

return size;

}

int main() {
const char *filename = "example.txt"; // 文件名,可以修改为你要检查的文件路径

long size = get_file_size(filename);
if (size != -1) {
    printf("文件大小: %ld 字节\n", size);
}

return 0;

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

define NUM_STUDENTS 5

define NUM_SUBJECTS 3

// 定义学生结构体
typedef struct {
char id[20]; // 学号
char name[50]; // 姓名
float scores[NUM_SUBJECTS]; // 三门课成绩
float average; // 平均成绩
} Student;

// 计算并更新平均成绩
void calculate_average(Student *student) {
float sum = 0;
for (int i = 0; i < NUM_SUBJECTS; i++) {
sum += student->scores[i];
}
student->average = sum / NUM_SUBJECTS;
}

int main() {
Student students[NUM_STUDENTS]; // 学生数组

// 打开文件以写入数据
FILE *file = fopen("student.txt", "w");
if (file == NULL) {
    perror("无法打开文件");
    return -1;
}

// 输入学生数据
for (int i = 0; i < NUM_STUDENTS; i++) {
    printf("请输入第 %d 个学生的信息:\n", i + 1);

    printf("学号: ");
    scanf("%s", students[i].id);

    printf("姓名: ");
    scanf("%s", students[i].name);

    printf("请输入三门课成绩:\n");
    for (int j = 0; j < NUM_SUBJECTS; j++) {
        printf("课 %d 成绩: ", j + 1);
        scanf("%f", &students[i].scores[j]);
    }

    // 计算平均成绩
    calculate_average(&students[i]);

    // 将学生信息写入文件
    fprintf(file, "学号: %s, 姓名: %s, 成绩: ", students[i].id, students[i].name);
    for (int j = 0; j < NUM_SUBJECTS; j++) {
        fprintf(file, "%.2f ", students[i].scores[j]);
    }
    fprintf(file, "平均成绩: %.2f\n", students[i].average);
}

// 关闭文件
fclose(file);

printf("学生信息已成功保存到文件 'student.txt' 中。\n");

return 0;

}
`

posted @ 2024-12-08 19:40  AAA卡皮巴拉  阅读(9)  评论(0编辑  收藏  举报