高级语言程序设计课程第十次个人作业
高级语言程序设计课程第十次个人作业
- 这个作业属于哪个课程:2024高级语言程序设计
- 这个作业要求在哪里:高级语言程序设计课程第十次个人作业
- 学号:032201218
- 姓名:陈彦哲
一、
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;
}
思路:按题意理解即可
问题:无
解决:无
三、总结思考:
- 复习了C语言关于文件操作的函数的用法,比如
fopen、fclose、fgetc、fgets、fputs、strstr
等函数的用法 - 学习了C语言文件指针的操作的用法,让我学习到了利用诸如ftell和fseek等函数操作文件指针从而实现对文件的定位和操作,这种方法既高效又快捷,值得认真学习
- 复习了结构体的使用,对结构体的灵活性有了更深刻的体会,对我的编程水平的提升有很大帮助,为我未来的编程打下了良好的基础