+ -
当前位置:首页 → 问答吧 → 关于一个随机产生四则运算式子的问题。

关于一个随机产生四则运算式子的问题。

时间:2011-12-16

来源:互联网

C/C++ code

string randomExcs()
{
    string expression(9,' ');//随机产生表达式长度最大为9
    int left=2;//随机产生左括号位置,最大下标4
    int right=left+4;
    expression[left]='(';
    expression[right]=')';
    expression[(left+right)/2]=getOp(false);
    expression[left+1]=getOd(false);
    bool preIsDiv=expression[(left+right)/2]=='/'?true:false;
    expression[right-1]=getOd(preIsDiv);
    string inner(expression,left,right);//子串,括号内容
    bool innerIsZero=FunOpes(inner)==0?true:false;//FunOpes计算string表示的式子,返回计算结果
    expression[left-1]=getOp(innerIsZero);
    expression[0]=getOd(false);
    expression[1]=getOp(innerIsZero);
    expression[7]=getOp(innerIsZero);
    preIsDiv=expression[7]=='/'?true:false;
    expression[8]=getOd(preIsDiv);
    return expression;
}
char getOp(bool innerIsZero)
{

    char ops[]={'+','-','*','/'};
    return innerIsZero?ops[rand()%3]:ops[rand()%4];//判定括号内数字是否为0,为零则左括号前符号不能为除号
}
char getOd(bool preIsDiv)
{

    char ods[]={'1','2','3','4','5','6','7','8','9','0'};
    return preIsDiv?ods[rand()%9]:ods[rand()%10];
}
void buildExLib()
{
    fstream outLib("out.txt",ofstream::out);
    for(int i=1;i<10;i++)
    {
        srand((unsigned)time(NULL));
        outLib<<randomExcs()<<"\n";
    }
}


1.在buildExLib里面每次产生并输出到out.txt的式子为什么是一样的?
2.如何让式子产生的更自然一些(比如四中运算均匀的出现,不要再一个式子里面只出现一种)

作者: sjyzhxw   发布时间: 2011-12-16

第一个问题我懂为什么了,求教第二个问题。

作者: sjyzhxw   发布时间: 2011-12-16

值得多学习一下,谢谢了~

作者: cj9687452   发布时间: 2011-12-16

还有就是如下程序片段,outLib.open("excs.txt",ofstream::app|ofstream::out);选择了app模式但是却没能在文件里增加内容?怎么回事?
C/C++ code

outLib.clear();
        outLib.open("excs.txt",ofstream::app|ofstream::out);
        cout<<"输入追加题目数:";
        cin>>amount;
        srand((unsigned)time(NULL));
        for(int i=0;i<amount;i++)
        {
            outLib<<randomExcs()<<endl;
        }
        cout<<"题库补充完成!"<<endl;
        system("pause");

作者: sjyzhxw   发布时间: 2011-12-17