这个作业属于哪个课程 | 软件工程 | |
---|---|---|
这个作业要求在哪里 | 四则运算 | |
这个作业的目标 | 完成一个小学四则运算题目生成的项目 |
项目成员 | 学号 | |
---|---|---|
吴炳辉 | 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) {
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) {
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");
}
}
7、项目小结
结对编程相比个人编程可以分工合作,发挥各自的优点,但也需要两人进行沟通与理解。
这次作业还有很多的不足之处,没有完成用户答案的判断功能。