随机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
周四22  4
周五 8.5 19.5
周六 8 210
周日  2 2
周总计420.54327.5

 

时间纪录日志:

日期开始时间结束时间中断时间净时间活动备注
3/714:0015:5010100听课软工课程
3/819:0021:00 0 120 编程修改上周的程序
3/920:0022:00 0 120 看书 《构建之法》
3/10  14:0015:50 10 100 听课 软工课程
  19:0021:00 10 110编程 想思路,修改上周的程序
 3/11 8:009:30  090 编程  修改上周的程序
  13:0021:00 60420编程、查资料修改上周的程序 
 3/12 8:0011:00  20 160 调试、写博客、查资料 调试上周的程序
  13:3018:00 30 300 测试、写博客 测试上周的程序
 3/13 17:0019:00  0 120 看书 《构建之法》

 缺陷记录日志:

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

转载于:https://www.cnblogs.com/linanil/p/5269100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值