这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13136
这个作业的目标 学习个人项目的完成流程,完成psp表格

GitHub 链接:https://github.com/Maruozhi/3122004785

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 20
· Estimate · 估计这个任务需要多少时间 20 30
Development 开发 180 240
· Analysis · 需求分析 (包括学习新技术) 120 90
· Design Spec · 生成设计文档 60 50
· Design Review · 设计复审 30 20
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 20
· Design · 具体设计 60 20
· Coding · 具体编码 120 180
· Code Review · 代码复审 30 5
· Test · 测试(自我测试,修改代码,提交修 120 60
Reporting 报告 90 70
· Test Repor · 测试报告 30 20
· Size Measurement · 计算工作量 30 15
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 30
· 合计 970 870

语言:C语言
编译环境:Visual Studio Community 2022
运行环境:64-bit Windows 10

程序设计思路
1、对文件进行操作,从命令行参数给出:论文原文,仿文的文件的绝对路径。
2、进行关键字对比,逐个对比两文中的相同关键字数,从而比得关键字重复率。
3.输出查重率时按要求显示两位小数的浮点数。
单元测试
原文

仿文_add

仿文_dis

仿文_empty

运行情况
仿文_add

仿文_dis

仿文_empty

源代码
`#include<stdio.h>

//该程序为关键字相同程度的检测

int read() {
//fp1为原文,fp2为仿文
FILE* fp1,* fp2;
fp1 = fopen(“D:/text/text.txt”, “r”);
fp2= fopen(“D:/text/text_add.txt”, “r”);
//fp2= fopen(“D:/text/text_dis.txt”, “r”);
//fp2= fopen(“D:/text/text_empty.txt”, “r”);
if (fp1 == NULL) {

	perror("open file failed:");
	return;
}
if (fp2 == NULL) {

	perror("open file failed:");
	return;
}

FILE* f1 = fp1;
FILE* f2 = fp2;
int a = 0, b = 0, c = 0;//a为原文,b为仿文,c为重复数
int flag = 0;//标志,0则找到重复,1则无
char c1, c2;
for (;;a++) {
	//原文循环完了结束
	if (feof(f1))  break;
	//仿文循环完了结束
	if (feof(f2))  break;

	c1 = fgetc(f1);

	if (flag == 1) {
		//寻址使得f2指向上次
		f2 = fp2;
		for (int o=0;o<b;o++) {
			c2 = fgetc(f2);
		}
	}
	//查询当前位置及后四位是否相同
	for (int i=0;i<5;i++) {
		//重复执行五次
		c2 = fgetc(f2);
		if (c1 == c2) {
			c++;//重复度加一
			flag = 0;
			break;
		}
		else {
			flag = 1;

		}
	}
	if (flag == 1)b--;
	b++;
}

float r =100* c / a;
printf("查重率为:%.2f%%", r);
fclose(fp1);
fclose(fp2);

}

int main()
{
read();
}`