随机30道小学计算题02

设计思想:

在原本的基础上有以下调整:

1.避免重复(未完成)
2.定制数量/打印方式(循环次数提出来作为变量/ 如果不打印到文件,就用goto跳过打印到文件的代码)
3.控制参数
  是否有乘除(rand()%4改成%2,用else)
  是否有括号,最多十个数(未完成)
  数值范围(random(x)中x作为变量)
  加减有无负数(通过计算结果,存入re中,判断有无,如果有负数就goto到a重新生成随机数和符号)
  除法有无余数(通过计算结果,存入mo中,判断有无,如果有余数就goto到a重新生成随机数和符号)

4.对可约分分数经行了控制(求最大公约数,可约分就除以最大公约数)

5.除数不为0(除数为0时,rand()%4改成%3,不产生除法符号)

源程序:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define random(x) (rand()%x)
#include<iostream>
#include<fstream>
#include<iomanip>
#include<cmath>
using namespace std;

int zuidagongyueshu(int a, int b)//避免可约分分数出现
{
    int c = 0, min, i;
    min = a < b ? a : b;
    for (i = 1; i < min; i++)
    {
        if (a%i == 0 && b%i == 0)
            c = i;
        else
            c = 1;
    }
    return c;
}

int chenchu(int q)//是否有乘除
{
    int k;
    if (q == 1)
    {
        k = rand() % 4;//
    }
    else
        k = rand() % 2;//

    return k;
}

int suiji(int k, int q, int f, int g, int v, int z)
{

    int a, b, c, d, i,mo;
    double re;


    srand((int)time(0));
    ofstream outfile;
    outfile.open("2.txt");

    for (int j = 0; j<k; j++)
    {
     a://如果加减有负数或除法有余数被要求,情况不合,则重新生成随机数(即:在a处重来) i
= chenchu(q); a = random(f); b = random(f); c = random(f); d = random(f); if (a<b && c<d && b != 0 && d != 0)//构成分数 { int l, p; l = zuidagongyueshu(a, b); p = zuidagongyueshu(c, d); if (l != 0) { a = a / l; b = b / l; } if (k != 0) { c = c / p; d = d / p; } if (g != 1)//不用打印到文件 { goto g;//跳过“输出到文件”部分代码 } if ((c / d) == 0) { goto a; } switch (i)//输出到文件 { case 0:{re = (a / b) + (c / d); outfile << setprecision(10) << "(" << a << "/" << b << ")" << "+" << "(" << c << "/" << d << ")" << "=" << endl; break;} case 1:{re = (a / b) - (c / d); if (re < 0){ goto a; } outfile << setprecision(10) << "(" << a << "/" << b << ")" << "-" << "(" << c << "/" << d << ")" << "=" << endl; break; } case 2:{re = (a / b) * (c / d); outfile << setprecision(10) << "(" << a << "/" << b << ")" << "*" << "(" << c << "/" << d << ")" << "=" << endl; break;} case 3:{re = (a / b) / (c / d); outfile << setprecision(10) << "(" << a << "/" << b << ")" << "/" << "(" << c << "/" << d << ")" << "=" << endl; break;} } g: switch (i)//输出到屏幕 { case 0:{re = (a / b) + (c / d); cout << "(" << a << "/" << b << ")" << "+" << "(" << c << "/" << d << ")" << "=" << endl; break;} case 1:{re = (a / b) - (c / d); if (re < 0){ goto a; } cout << "(" << a << "/" << b << ")" << "-" << "(" << c << "/" << d << ")" << "=" << endl; break; } case 2:{re = (a / b) * (c / d); cout << "(" << a << "/" << b << ")" << "*" << "(" << c << "/" << d << ")" << "=" << endl; break;} case 3:{re = (a / b) / (c / d); cout << "(" << a << "/" << b << ")" << "/" << "(" << c << "/" << d << ")" << "=" << endl; break;} } } //构成整数 if (i == 3 && b == 0)//如果除数为0,去除法 { i = rand() % 3;//随机的符号只有+、-、* } else { if (g != 1)//不用打印到文件 { goto h; //跳过“输出到文件”部分代码 } switch (i)//输出到文件 { case 0:{re = a + b; outfile << setprecision(10) << a << "+" << b << "=" << endl; break;} case 1:{re = a - b; if (re < 0){ goto a; } outfile << setprecision(10) << a << "-" << b << "=" << endl; break; } case 2:{re = a * b; outfile << setprecision(10) << a << "*" << b << "=" << endl; break;} case 3:{re = a / b; outfile << setprecision(10) << a << "/" << b << "=" << endl; break;} } h: switch (i)//输出到屏幕 { case 0:{re = a + b; cout << a << "+" << b << "=" << endl; break;} case 1:{re = a - b; if (re < 0){ goto a; } cout << a << "-" << b << "=" << endl; break; } case 2:{re = a * b; cout << a << "*" << b << "=" << endl; break;} case 3:{re = a / b; mo = a%b; if (mo != 0){ goto a; } cout << a << "/" << b << "=" << endl; break; } } } } outfile.close(); return 0; } int main() { int k , q , f , g , v , z ; cout << "请输入生成四则运算数量=\n"; cin >> k; cout << "请输入数值范围\n"; cin >> f; cout << "请输入是否有乘除(有,按1)\n";cin >> q; cout << "是否输出到文件(是,按1)\n"; cin >> g; cout << "加减有无负数(有,按1)\n"; cin >> v; cout << "乘除有无余数(有,按1)\n"; cin >> z; suiji(k, q, f, g, v, z); }

 测试截图:

默认:随机生成10个式子,数值范围0-100,有乘除法,不输入文件,加减有负数,乘除有余数

1.测试生成数量

2.测试数值范围

3.有无乘除

4.是否输出到文件

 

5.加减有无负数(为了便于测试,此项无乘除)

6.除法有无余数

 

项目计划总结:

日期&&任务 听课 编写程序 阅读相关书籍 网上查资料 日总计
周一 2       2
周二   2     22
周三     2   2
周四 2 2     4
周五   8.5   1 9.5
周六   8   2 10
周日     2   2
周总计 4 20.5 4 3 27.5

 

时间纪录日志:

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/7 14:00 15:50 10 100 听课 软工课程
3/8 19:00 21:00 0 120 编程 修改上周的程序
3/9 20:00 22:00 0 120 看书 《构建之法》
3/10  14:00 15:50 10 100 听课 软工课程
   19:00 21:00 10 110 编程  想思路,修改上周的程序
 3/11  8:00 9:30  0 90 编程  修改上周的程序
   13:00 21:00  60 420 编程、查资料 修改上周的程序 
 3/12  8:00 11:00  20  160  调试、写博客、查资料  调试上周的程序
   13:30 18:00  30  300  测试、写博客  测试上周的程序
 3/13  17:00 19:00  0  120  看书  《构建之法》

 缺陷记录日志:

  每增加一个功能都更加难改,数值变量太多,逻辑有时候会混乱,感觉懂得还是太少,解决办法都没一个,蛮难过。

posted @ 2016-03-12 16:27  里拉里拉  阅读(423)  评论(3编辑  收藏  举报