小学生300道练习题程序及问题
题目要求:自动生成一百以内数的四则运算;同时也支持真分数的四则运算;
根据题目要求,决定使用随机数函数srand(),rand()函数来产生操作数,rand()%100即可产生一百以内的数。rand()%4来产生0~3四个数来选择四则运算。
#include<stdio.h>
#include<time.h>
#include<Windows.h>
#include<stdlib.h>
void main()
{
int a, b,c,d,i,op,x;
srand(unsigned(time(NULL)));
printf("请选择类型:\n1 整数四则运算;\n2 真分数四则运算;\n");
scanf("%d", &x);
switch (x)
{
case 1:
{
for (i = 0; i < 30; i++)
{
a = rand() % 100;
b = rand() % 100;
op = rand() % 4;
if (op == 0)
printf("%d + %d =\n", a, b);
else if (op == 1 && a>b)
printf("%d - %d =\n", a, b);
else if (op == 2)
printf("%d * %d =\n", a, b);
else if (op == 3 && b != 0)
printf("%d ÷ %d =\n", a, b);
}
break;
}
case 2:
{
for (i = 0; i < 30; i++)
{
a = rand() % 100;
b = rand() % 100;
while (b==0)
b = rand() % 100;
c = rand() % 100;
while (c==0)
c = rand() % 100;
d = rand() % 100;
while (d==0)
d = rand() % 100;
if (a < b && c < d)
{
op = rand() % 4;
if (op == 0)
printf("%d/%d + %d/%d =\n", a, b, c, d);
else if (op == 1 && (a / b) >= (c / d))
printf("%d/%d - %d/%d =\n", a, b, c, d);
else if (op == 2)
printf("%d/%d * %d/%d =\n", a, b, c, d);
else if (op == 3)
printf("%d/%d ÷ %d/%d =\n", a, b, c, d);
}
else i--;
}
break;
}
}
system("pause");
}
程序运行结果:
程序基本满足了题目要求,可以根据需要选择整数运算或者真分数运算。
但是因为学术不精,程序不够简洁。耗时半天。
编程期间遇到黑框闪退问题,询问同学,网上查找通过添加头函数#include<windows.h>,以及冻结屏幕system("pause")问题解决。真分数运算过程中if对于两个操作数的判断时,不满足运算条件时计数变量i也增加,是程序运行结果出题的数目不够要求。通过else语句,不满足条件时执行i--,问题解决。程序没有考虑分数运算时分数可以约分的情况,为用户的计算增加了工作量,也是对用户计算能力的训练吧!
希望经过编程训练,能力可以有所提高。