四则运算2

本周对程序再做进一步的改进,要求满足如下条件:

1.题目避免重复。

2.可订制(数量/打印方式)

3.可以控制下列参数:

  • 是否有乘除法
  • 是否有括号(最多可支持10个数参与计算)
  • 数值范围
  • 加减有无负数
  • 除法有无余数

分析如下:

面对问题,首先进行问题细化。根据以上要求,第一,生成一个随机数,通过取2的余数和取4的余数来选择有无乘除法。第二,通过#define random() (rand()%1000) 来选择数值范围。第三,通过控制表达式的结果是否为负选择加减有无负数。第四,通过两个操作数取余是否为0选择除法有无余数。以上条件均可供用户选择。

如下是本次程序的源代码:

//李妍 2015.3.12
//四则运算新 
#include<iostream>
#include<fstream> 
#include<iomanip>
#include<cmath>  
#include<string>  
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define random() (rand()%1000) 

 //是否有乘除法
char operator_random(int c1)
{
    char o;
    int c,c2;
    if(c1==0)
    {
        c2=2;
    }
    if(c1==1)
    {
        c2=4;
    }
    c= (rand() % 100)%c2;
    if (c == 0) o = '+';
    else if (c == 1) o = '-';
    else if (c == 2) o = '*';
    else o = '/';
    return o;
}

void main()
{
    srand((unsigned)time(NULL));//设置时间种子 ,以使程序每次得到的结果都不同 
    int c1,number,output_mode,value_range,num_1,num_2,plus_or_minus,yushu,j,x,kuohao;
    char o;
    cout<<"是否有乘除法?0否 , 1是:"<<endl;
    cin>>c1;
    cout<<"题目如何输出?0在文件中输出 ,1在此直接输出:"<<endl;
    cin>>output_mode;
    cout<<"请输入数值范围:"<<endl;
    cin>>value_range;
    cout<<"有无括号?0没有,1有"<<endl;
    cin>>kuohao;
    cout<<"加减有无负数?0没有,1有:"<<endl;
    cin>>plus_or_minus;
    cout<<"除法有无余数?0没有,1有:"<<endl;
    cin>>yushu;
    cout<<"请输入题目的数量:"<<endl;
    cin>>number;
    ofstream fout;
    if(output_mode==0)
    {
        fout.open("yunsuan.txt");
        fout<<number<<"道随机四则运算:"<<endl;
    }
    else
    {
        cout<<number<<"道随机四则运算:"<<endl;
    }
    for (int i = 0; i < number; i++)
    {
       num_1=random()%value_range+1;
       num_2=random()%value_range+1;
       o=operator_random(c1);
       int j=num_1-num_2;
       int x=num_1%num_2;

       if(output_mode==0)
       {
           if(((j<0)&&(plus_or_minus==0))||((j>=0)&&(plus_or_minus==1))||((x!=0)&&(yushu==0))||((x==0)&&(yushu==1)))
           {
               i--;
           }
           else
           {
              fout<<num_1<<o<<num_2<<"="<<endl; 
           }
       }
       else
       {
            if(((j<0)&&(plus_or_minus==0))||((j>=0)&&(plus_or_minus==1))||((x!=0)&&(yushu==0))||((x==0)&&(yushu==1)))
           {
               i--;
           }
           else 
           {
               cout<<num_1<<o<<num_2<<"="<<endl;    
            }
       }
    }
    if(output_mode==1) 
    {
        fout.close();
    }
} 

总结:当老师布置这个作业的时候,我觉得自己不可能完成,但是通过自己的努力,一点一点查阅资料和一行一行编写代码,最终完成了这个任务。面对编程我有了一些信心,希望自己可以再接再厉,加油!

项目计划日志:

时间记录日志:

缺陷记录日志:

原文地址:https://www.cnblogs.com/liyan-luckygirl/p/5269491.html