结对项目

这个作业属于哪个课程 软件工程
这个作业要求在哪里 四则运算
这个作业的目标 完成一个小学四则运算题目生成的项目
项目成员 学号
吴炳辉 3122004709
刘睿 3122004697

Github地址: 项目2

2、PSP表格

Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
计划 20 20
· 估计这个任务需要多少时间 30 35
开发 200 250
· 需求分析 (包括学习新技术) 100 120
· 生成设计文档 10 20
· 设计复审 20 25
· 代码规范 (为目前的开发制定合适的规范) 10 15
· 具体设计 30 50
· 具体编码 400 500
· 代码复审 60 50
· 测试 60 70
报告 40 55
· 测试报告 30 30
· 计算工作量 10 10
· 事后总结, 并提出过程改进计划 20 25
合计 1040 1275

3、性能分析

4、设计实现
本项目一共有6个函数
int main()函数负责用户界面及调用其他函数
void fenshu(int &a1, int &a2)方便分数的计算
void chufa(int str1, int str2,int str3, float &sum, int a[])用来计算除法
void randmath(int n, int r, int answer[100], int qu[100][11])生成算式及计算答案
void write_qu(int n, int qu[100][11], FILE *file)将算式写入文件
void write_answer(int n, int qu[100][11], FILE *file)将答案写入文件

运行过程:用户输入n,r, 其中n是控制生成题目数量的参数,r是控制题目中数值范围的参数。程序会自动生成算式和答案在文件中。

5、代码说明

main

点击查看代码
int main() {
	int answer[100] = { 0 };
	int qu[100][11] = { 0 };
	int n = 0;
	int r = 0;
	printf("请输入生成题目数\n");
	scanf("%d", &n);
	printf("请输入题目范围\n");
	scanf("%d", &r);

	// 打开 Exercises.txt 文件进行写入
	FILE *exercisesFile = fopen("D:\\Exercises.txt", "w");
	if (exercisesFile == NULL) {
		printf("无法打开 Exercises.txt 文件进行写入。\n");
		return -1;
	}

	// 生成题目并写入 Exercises.txt 文件
	randmath(n, r, answer, qu);
	write_qu(n, qu, exercisesFile);
	fclose(exercisesFile); // 关闭文件

	// 打开 Answers.txt 文件进行写入
	FILE *answersFile = fopen("D:\\Answers.txt", "w");
	if (answersFile == NULL) {
		printf("无法打开 Answers.txt 文件进行写入。\n");
		return -1;
	}

	// 将答案写入 Answers.txt 文件
	write_answer(n, qu, answersFile);
	fclose(answersFile); // 关闭文件

	printf("题目和答案已生成并存入文件中。\n");

	return 0;
}


void fenshu(int &a1, int &a2)

点击查看代码
void fenshu(int &a1, int &a2) {
	//a1为分子,a2为分母
	int i = a2 - 1;
	while (i > 0) {
		if (a2 % i == 0)
			if (a1 % i == 0) {
				a2 = a2 / i;
				a1 = a1 / i;
			}
		i--;
	}
}

void chufa(int str1, int str2,int str3, float &sum, int a[])

点击查看代码
void chufa(int str1, int str2,int str3, float &sum, int a[]) {
	int c = 0;
	sum = str1 * str3 / str2;
	c = str1 * str3 / str2;//c为整数部分
	int r = str1 * str3 % str2;//r为分子
	if (r == 0) {
		//整除
		a[0] = c;
		a[1] = '?';
	} else if (c == 0) {
		fenshu(r, str2);
		a[0] = r;
		a[1] = '/';
		a[2] = str2;
		a[3] = '?';
	} else {
		fenshu(r, str2);
		a[0] = c;
		a[1] = '\'';
		a[2] = r;
		a[3] = '/';
		a[4] = str2;
	}


}

void randmath(int n, int r, int answer[100], int qu[100][11])

点击查看代码
//生成运算
//生成n条,r以内的运算,n不能小于1,r不能小于10
void randmath(int n, int r, int answer[100], int qu[100][11]) {
	if (n < 1 || r < 10 ) {
		printf("规定:n应该大于0,r不能小于10");
		return;
	}

	int i = 0,k1,k2;
	float sum = 0;
	for (; i < n; i++) {
		int num1 = rand() % r;
		int num2 = rand() % r;
		int num3 = rand() % r;
		int fuhao[4] = { '+', '-', '*', '/' };
		int f = rand() % 10;
		int a[5] = { 0, 0, 0, 0, 0 };
		switch (f) {

			case 0:
				//双加
				k1 = 0;
				k2 = 0;
				sum = num1 + num2 + num3;
				a[0] = sum;
				a[1] = '?';
				break;
			case 1:
				//一加一减
				k1 = 0;
				k2 = 1;
				sum = num1 + num2 - num3 ;
				a[0] = sum;
				a[1] = '?';
				break;
			case 2:
				//一加一乘
				k1 = 0;
				k2 = 2;
				sum = num1 + num2 * num3;
				a[0] = sum;
				a[1] = '?';
				break;
			case 3:
				//双减
				k1=1;
				k2=1;
				sum = num1 - num2 - num3 ;
				a[0] = sum;
				a[1] = '?';

				break;
			case 4:
				//一减一加
				k1=1;
				k2=0;
				sum = num1 - num2 + num3 ;
				a[0] = sum;
				a[1] = '?';

				break;

			case 5:
				//一减一乘
				k1=1;
				k2=2;
				sum = num1 - num2 * num3 ;
				a[0] = sum;
				a[1] = '?';

				break;

			case 6:
				//一乘一加
				k1=2;
				k2=0;
				sum = num1 * num2 + num3 ;
				a[0] = sum;
				a[1] = '?';

				break;

			case 7:
				//一乘一减
				k1=2;
				k2=1;
				sum = num1 * num2 - num3 ;
				a[0] = sum;
				a[1] = '?';

				break;

			case 8:
				//双乘
				k1=2;
				k2=2;
				sum = num1 * num2 * num3;
				a[0] = sum;
				a[1] = '?';

				break;
			case 9:
				//除法
				k1=3;
				k2=3;
				chufa(num1, num2,num3, sum, a);
			default:
				break;
		}

		//把答案和题目填入数组
		answer[i] = (int)sum;
		qu[i][0] = num1;
		qu[i][1] = fuhao[k1];
		qu[i][2] = num2;
        qu[i][3] = fuhao[k2];
        qu[i][4] = num3;
		qu[i][5] = '=';
		qu[i][6] = a[0];
		qu[i][7] = a[1];
		if (a[1] != '?') {
			qu[i][8] = a[2];
			qu[i][9] = a[3];
			if (a[3] != '?') {
				qu[i][10] = a[4];
				qu[i][11] = '?';
			}
		}
		int temp = 0 ;
		if(a[0]<0){
			temp = 1;
		}
		if (temp == 1)
			i--;
	}
}
void write_qu(int n, int qu[100][11], FILE *file)
点击查看代码
void write_qu(int n, int qu[100][11], FILE *file) {
	for (int i = 0; i < n; i++) {
		fprintf(file, "%d, %d%c%d%c%d%c?\n", i+1,qu[i][0],qu[i][1],qu[i][2],qu[i][3],qu[i][4],qu[i][5]);
	}
}
void write_answer(int n, int qu[100][11], FILE *file)
点击查看代码
void write_answer(int n, int qu[100][11], FILE *file) {
	for (int i = 0; i < n; i++) {
		fprintf(file, "%d, %d",i+1, qu[i][6]);
		if (qu[i][7] != '?') {
			fprintf(file, "%c%d", qu[i][8], qu[i][9]);
			if (qu[i][9] != '?') {
				fprintf(file, "%c%d", qu[i][10], qu[i][11]);
			}
		}
		fprintf(file, "\n");
	}
}
**6、运行测试** 测试生成题目与答案 ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140500105-703497532.png) ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140510105-1864483163.png) ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140517903-1285114955.png) 生成100道算式 ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140603530-949797617.png) ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140613193-1552735349.png) ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140620486-794990829.png) ![](https://img2024.cnblogs.com/blog/3397991/202403/3397991-20240326140633560-472750992.png)

7、项目小结
结对编程相比个人编程可以分工合作,发挥各自的优点,但也需要两人进行沟通与理解。
这次作业还有很多的不足之处,没有完成用户答案的判断功能。

posted @ 2024-03-26 14:15  ???123???  阅读(8)  评论(0编辑  收藏  举报