四则运算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——时间记录日志

原文地址:https://www.cnblogs.com/zrdm/p/4334772.html