zoukankan      html  css  js  c++  java
  • 四则运算2

     四则运算2——设计思路

    1.首先实现数量以及打印方式,只需要在输入的时候添加两个变量,一个控制循环的数量输出,一个控制每页打印的数量。

    2.避免题目重复,只需要在结果输出的时候,添加判断,使得输出结果与直接的输出的结果对比,没有重复的就行,需要用数组记录。

    3.是否有乘除法,只需在输出的时候控制对应乘除法序号的产生就可以了。

    4.数值范围,用变量控制随机数的产生范围。

    5.单独添加负数函数、分数函数。 

     四则运算2——代码

    #include <iostream>
    #include <cmath>
    using namespace std;
    #define N 10000
    
    void feifu(int page,int k);
    void fenshu(int page,int k);
    void fushu(int page,int k);
    
    int a[N],b[N],ch[N]={0},k1;//a[],b[]存储数字,ch[]存储运算法则
    int geshu = 5;   //每行打印多少个
    int cmin,cmax;//数值范围的最小值,最大值
    int num ;   //题号
    int jjcc[5],j;  //jjcc用以记录加减乘法,j用来控制运算法则的循环
    char sel;       //选择是否随机产生数据
    char str[5] = {' ','+','-','*','/'};
    int x,y; //分母
    
    //非负整数输出
    void noout(int n,int &k)
    {
        cout << "(" << num++ << ")" << a[k] << " " << str[n] << " " << b[k] << " =  ";    k--;
        if ((k1 - k) % geshu == 0 )
            cout << endl;
    }
    
    //负数输出
    void fuout(int n,int &k)
    {
        cout << "(" << num++ << ")" << " -" << a[k] << " " << str[n] << " -" << b[k] << " =  ";    k--;
        if ((k1 - k) % geshu == 0 )
            cout << endl;
    }
    
    //分数输出
    void fenout(int n,int &k)
    {
        cout << "(" << num++ << ")" << a[k] << "/" << x << " " << str[n] << " " << b[k] << "/" << y << " =  ";k--;
        if ((k1 - k) % geshu == 0 )
            cout << endl;
    }
    
    ///////////////////保证题目不重复///////////////////////
    void jianyan(int &k)
    {    
        for (int i = k1;i > k;i--) 
        {
            if (a[i] == a[k] && b[i] == b[k] && ch[k] == ch[i])
            {
                k++;
                continue;
            }
        }
    }
    
    //界面菜单
    void mune(int &page, int &k)
    {
        cout << "请输入题卷份数:";
        cin >> page;
        while (page <= 0)
        {
            cout << "输入错误,请重新输入题卷份数:";
            cin >> page;
        }
        cout << "请输入数值范围(小的在前,用空格隔开):";
        cin >> cmin >> cmax;
        while (cmin >= cmax || cmin < 0 || cmax < 0)
        {
            cout << "数值范围有问题,请重新输入:";
            cin >> cmin >> cmax;
        }
        cout << "请输入每份题目数:" ;
        cin >> k;
        cout << "每行打印个数:";
        cin >> geshu;
    }
    
    //运算选择
    void yunsuan()
    {
        for (j = 0;j < 5;j++)
            jjcc[j] = 0;
        cout << "1: 加法运算  2:减法运算  3: 乘法运算  4:除法运算 " << endl;
        cout << "请输入序号(可多选,未选择时,默认随机产生,输入"0"结束)" << endl;
        cout << "请选择运算法则:";
        for (j = 0;j < 5;j++)
        {
            cin >> jjcc[j];
    
            if (jjcc[0] > 4 || jjcc[0] < 1)
            {
    
    cout
    << "您未选择任何运算法则,将随机产生(Y/N):" ; cin >> sel; if (sel == 'Y'|| sel == 'y') { jjcc[0] = 1; jjcc[1] = 2; jjcc[2] = 3; jjcc[3] = 4; j = 4; break; } else { cout << "请选择运算法则:"; j = -1; continue; } } if (jjcc[j] > 4 || jjcc[j] < 0) { cout << "输入错误,请选择运算法则:"; j = -1; continue; } if (jjcc[j] == 0) break; } } void main() { int page = 1; //定制份数 int k;//题目数 cout << " ************************************************************" << endl; cout << " * *" << endl; cout << " * ^-^欢迎来到四则运算计算题库 *" << endl; cout << " * *" << endl; cout << " * *" << endl; cout << " ************************************************************" << endl; cout << "请进行初始化设置:" << endl; mune(page,k); cout << "初始化完成,如需更改,请选择“设置”。 " << endl; while(1) { int xuanxiang; cout << endl; cout << " 1、非负整数运算" << endl; cout << " 2、分 数 运 算" << endl; cout << " 3、负 数 运 算" << endl; cout << " 4、设 置" << endl; cout << " 5、退 出" << endl; cout << "请选择:"; cin >> xuanxiang; switch(xuanxiang) { case 1:feifu(page,k);break; case 2:fenshu(page,k);break; case 3:fushu(page,k);break; case 4:mune(page,k);continue; case 5:exit(0);break; } } } void feifu(int page,int k) { yunsuan(); int page1 = 1; k1 = k;//输出打印个数的时候保证前齐 while(page--) //定制份数 { num = 1; k = k1; cout << "" << page1++ << "份题卷:" << endl; while(k) //每份题目数 { a[k] = rand()%(cmax+1) + cmin; b[k] = rand()%(cmax+1) + cmin; ch[k] = rand()%4 + 1; jianyan(k); for (int i = 0;i < j;i++) { if (jjcc[i] == ch[k]) { if(jjcc[i] == 1) noout(jjcc[i],k); if(jjcc[i] == 2) noout(jjcc[i],k); if(jjcc[i] == 3) noout(jjcc[i],k); if(jjcc[i] == 4 && b[k] == 0)//如果除数是0,跳过本次循环 { k++; continue; } else if(jjcc[i] == 4 && b[k] != 0) noout(jjcc[i],k); } } } } } void fenshu(int page,int k) { yunsuan(); int page1 = 1; k1 = k;//输出打印个数的时候保证前齐 while(page--) //定制份数 { num = 1; k = k1; cout << "" << page1++ << "份题卷:" << endl; while(k) //每份题目数 { do { a[k] = rand()%(cmax+1) + cmin; b[k] = rand()%(cmax+1) + cmin; ch[k] = rand()%4 + 1; x = rand()%(cmax+1) + cmin; y = rand()%(cmax+1) + cmin; } while (x == 0 || y == 0); jianyan(k); for (int i = 0;i < j;i++) { if (jjcc[i] == ch[k]) { if(jjcc[i] == 1) fenout(jjcc[i],k); if(jjcc[i] == 2) fenout(jjcc[i],k); if(jjcc[i] == 3) fenout(jjcc[i],k); if(jjcc[i] == 4 && b[k] == 0)//如果除数是0,跳过本次循环 { k++; continue; } else if(jjcc[i] == 4 && b[k] != 0) fenout(jjcc[i],k); } } } } } void fushu(int page,int k) { yunsuan(); int page1 = 1; k1 = k;//输出打印个数的时候保证前齐 while(page--) //定制份数 { num = 1; k = k1; cout << "" << page1++ << "份题卷:" << endl; while(k) //每份题目数 { a[k] = rand()%(cmax+1) + cmin; b[k] = rand()%(cmax+1) + cmin; ch[k] = rand()%4 + 1; jianyan(k); for (int i = 0;i < j;i++) { if (jjcc[i] == ch[k]) { if(jjcc[i] == 1) fuout(jjcc[i],k); if(jjcc[i] == 2) fuout(jjcc[i],k); if(jjcc[i] == 3) fuout(jjcc[i],k); if(jjcc[i] == 4 && b[k] == 0)//如果除数是0,跳过本次循环 { k++; continue; } else if(jjcc[i] == 4 && b[k] != 0) fuout(jjcc[i],k); } } } } }

    四则运算2——结果截图

     

    四则运算2——编程总结

        程序看起来感觉难度不大,但是在编程过程中,一个一个问题不断出现,虽然有设计思路,但是开发过程中,并不像设计思路写的那么简单。当按顺序解决完一个问题后,开始解决下一个问题时,却发现就会把之前弄好的东西改的面目全非。就这样不断编写,不断发现新的问题,不断修改,同时不断添加新的功能。在快完成的时候发现代码有很多冗余代码,通过编写函数,尽量将冗余编码减少,但是还是不尽人意。

    四则运算2——时间记录日志

  • 相关阅读:
    cg纹理绑定顺序的一个错误
    难道一直是4 4 2 3的命?
    cg又一个数据绑定错误
    cg fp40的问题
    bibtex to bibitem
    qt ogl添加keyevent
    支付宝开发
    jQuery ajax的提交
    Java链接MySQL数据库的配置文件
    excel 函数的引用说明
  • 原文地址:https://www.cnblogs.com/zrdm/p/4334772.html
Copyright © 2011-2022 走看看