四则运算
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11376 |
这个作业的目标 | <写一个能自动生成小学四则运算题目的程序> |
学号 | <3190704205> |
代码及运行截图
`
include<stdlib.h>
include<iostream.h>
include<stdio.h>
int wrong = 0, right = 0;
int a[100], b[100], c[100];
void Display(int p, int *ri, int *wr, int i) //输出题目
{
int k1 = 0;
if (p == 0)
{
if (c[i] == 0)
{
printf("%d+%d=\n", a[i], b[i]);//加法
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] + b[i])
wrong++;
else
right++;
}
else if (c[i] == 1)
{
printf("%d-%d=\n", a[i], b[i]);//减法
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] - b[i])
wrong++;
else
right++;
}
else if (c[i] == 2)
{
printf("%d*%d=\n", a[i], b[i]);//乘法
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] * b[i])
wrong++;
else
right++;
}
else
{
printf("%d/%d=\n", a[i], b[i]);//除法
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] / b[i])
wrong++;
else
right++;
}
}
else
{
if (c[i] == 0)//输入预期结果
{
printf("%d+%d=\n", a[i], b[i]);
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] + b[i])
wrong++;
else
right++;
}
else if (c[i] == 1)
{
printf("%d-%d=\n", a[i], b[i]);
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] - b[i])
wrong++;
else
right++;
}
else if (c[i] == 2)
{
printf("%d*%d=\n", a[i], b[i]);
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] * b[i])
wrong++;
else
right++;
}
else
{
printf("%d/%d=\n", a[i], b[i]);
printf("请输入结果:");
scanf("%d", &k1);
if (k1 != a[i] / b[i])
wrong++;
else
right++;
}
if ((i + 1) % p == 0)
printf("\n");
}
*ri = right;
*wr = wrong;
}
void Carry(int *q, int ri, int wr) //执行全部过程,添加出错处理
{
int j;
int t;
int m;
int n;
int d;
int p = 3;
int r;
printf("1.请选择是否有乘除法(0:是 1:否)\n");//筛选运算类型
scanf("%d", &m);
if (m != 0 && m != 1)
{
printf("输入错误,请重新输入!\n");
Carry(q, ri, wr);
}
printf("2.请输入取值范围:(0-?)\n");
scanf("%d", &r);
printf("3.请选择加减有无负数:(0:有 1:无)\n");
scanf("%d", &n);
if (n != 0 && n != 1)
{
printf("输入错误请重新输入!\n");
Carry(q, ri, wr);
}
if (m == 0)
{
printf("4.请选择出发有无余数:(0:有 1:无)\n");
scanf("%d", &d);
if (d != 0 && d != 1)
{
printf("输入错误请重新输入!\n");
Carry(q, ri, wr);
}
}
printf("5.请输入题目个数:\n");//输入题数
scanf("%d", q);
if (q <= 0)
{
printf("输入错误请重新输入!\n");
Carry(q, ri, wr);
}
printf("6.请选择打印方式:0为逐行打印,输入其他数字则为一行几列\n");//选择格式
scanf("%d", &p);
if (p<0)
{
printf("输入错误请重新输入!\n");
Carry(q, ri, wr);
}
for (int i = 0; i<q; i++)
{
a[i] = rand() % r;
b[i] = rand() % r;
c[i] = rand() % 4;
if (c[i] == 3 && b[i] == 0)
{
b[i]++;
}
for (j = 0; j<i; j++) //判断题目是否重复,若重复则a[i]++
if (a[j] == a[i] && b[j] == b[i] && c[j] == c[i])
a[i]++;
if (m == 0 && n == 0 && d == 0)
{
Display(p, ri, wr, i);
}
else if (m == 1) //没有乘除法
{
if (c[i] >= 2)
c[i] = c[i] - 2;
Display(p, ri, wr, i);
}
else if (m == 0 && n == 1 && d == 0) //无负数,且被除数大于除数
{
if (a[i]<b[i])
{
t = a[i];
a[i] = b[i];
b[i] = t;
}
Display(p, ri, wr, i);
}
else
{
if (c[i] == 3)
{
if (a[i]<b[i])
{
t = a[i];
a[i] = b[i];
b[i] = t;
}
while (a[i] % b[i] != 0) //无余数
b[i]++;
}
Display(p, ri, wr, i);
}
}
}
void main()
{
int tishu = 0;
int wrong1 = 0, right1 = 0;
Carry(&tishu, &right1, &wrong1);
cout << "您总做了" << tishu << "个题,正确" << right1 << "的道,错误" << wrong1 << "道" << endl;
}
`