高级语言程序设计第十次个人作业
(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;
}
`