四则运算2

一.设计思想。

1.避免题目重复,可以将前面生成的四则算式的数字和符号分别存储,将即将生成的算式与前面进行比对。 2.通过某个参数可以使得用户调控是否要定制数量,当需要定制数量时可以通过接收用户输入的数字,来调控for循环的循环次数。 3.通过接收用户输入的选项使得用户选择是否有乘除法、调控数值范围、除法有无余数、是否支持分数(真分数,假分数。

二.源代码。

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
using namespace std;
#include <ctime>
#include <cstdlib>
void panduanchongfu()
{
    int d,e,k,m,n, p;
    int o=0,b=0;
    cout<<"请输入要显示的四则运算的个数"<<endl;
    cin>>k;
    cout<<endl;
    int shuzi[200][4];
    char yunsuanfu[4]={'+','-','*','/'};
    char fuhao[16][2]={{'+','+'},{'+','-'},{'+','*'},{'+','/'},{'-','+'},{'-','-'},{'-','*'},{'-','/'},{'*','+'},{'*','-'},{'*','*'},{'*','/'},{'/','+'},{'/','-'},{'/','*'},{'/','/'}};
    int g[100];    
    srand(time(0));//根据系统时间设置随机数种子
    int r,t,temp;
    cout<<"-------------------"<<endl;
    cout<<"请输入产生式数字的范围。(请输入两个数字:如 10 50:代表产生式的数字范围为(10-50)"<<endl;
    cout<<"-------------------"<<endl;
    cin>>r>>t;
    cout<<endl;
    if(r>t)
    {
        temp=r;
        r=t;
        t=temp;
    }
    int a;
    cout<<"-------------------"<<endl;
    cout<<"0.无乘除法。"<<endl;
    cout<<"1.有乘除法。"<<endl;
    cout<<"请输入选项(0或1)"<<endl;
    cout<<"-------------------"<<endl;
    cin>>a;
    cout<<endl;
    if(a!=0)
    {
        cout<<"-------------------"<<endl;
        cout<<"0.无余数。"<<endl;
        cout<<"1.有余数。"<<endl;
        cout<<"请输入选项(0或1)"<<endl;
        cout<<"-------------------"<<endl;
        cin>>p;
        cout<<endl;
    }
    cout<<"-------------------"<<endl;
    cout<<"0.无分数。"<<endl;
    cout<<"1.有分数。"<<endl;
    cout<<"请输入选项(0或1)"<<endl;
    cout<<"-------------------"<<endl;
    int s;
    cin>>s;
    cout<<endl;
    for(int i=0;i<k;i++)
    {
        shuzi[i][0]=rand()%(t-r)+r;//取得区间[0,100)的整数
        shuzi[i][1]=rand()%(t-r)+r;
        shuzi[i][2]=rand()%(t-r)+r;
        shuzi[i][3]=rand()%(t-r-1)+r+1;
        d=rand()%100;
        e=rand()%100;
        if(a==1||a==0) 
        {
            switch(a)
            {
            case 0:
                n=e%2;//判断运算符号的随机数
                m=d%2;
                break;
            case 1:
                n=e%4;//判断运算符号的随机数
                m=d%4;
                break;
            }
        }
        else
        {
            cout<<"输入选项有误,请正确输入。"<<endl;
            cout<<"-------------------"<<endl;
            cout<<"0.无乘除法。"<<endl;
            cout<<"1.有乘除法。"<<endl;
            cout<<"请输入选项(0或1)"<<endl;
            cout<<"-------------------"<<endl;
            cin>>a;
            i=i-1;
            continue;
        }
        
               
        if((m==3&&shuzi[i][0]%shuzi[i][1]!=0&&p==0)||(n==3&&shuzi[i][1]%shuzi[i][2]!=0&&p==0))
        {
            i=i-1;
        }
        else
        {
            if((shuzi[i][1]==0&&m==3&&a==0)||(shuzi[i][2]==0&&n==3&&a==0))
            {
                i=i-1;
            }
            else
            {
                for(int l=0;l<16;l++)
                {
                    if(yunsuanfu[m]==fuhao[l][0]&&yunsuanfu[n]==fuhao[l][1])
                    {
                        
                        g[o]=l;
                        o++;
                    }
                }
                for(int j=i-1;j>=0;j--)
                {
                    if(shuzi[i][0]==shuzi[j][0]&&shuzi[i][1]==shuzi[j][1]&&shuzi[i][2]==shuzi[j][2]&&g[i]==g[j])
                    {
                        i=i-1;
                        break;
                    }
                }
            }
        }
        
    }
    if(s==0)
    {
        for(i=0;i<k;i++)
        {
            if(g[i]==12||g[i]==13||g[i]==14)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<"÷"<<shuzi[i][1]<<fuhao[g[i]][1]<<shuzi[i][2]<<"="<<endl;
            }
            else if(g[i]==3||g[i]==7||g[i]==11)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
            else if(g[i]==15)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<"÷"<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
            else
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<fuhao[g[i]][1]<<shuzi[i][2]<<"="<<endl;
        }
    }
    else
    {
        for(i=0;i<k;i++)
        {
            int q0,q1,q2;
            q0=rand()%3;
            q1=rand()%3;
            q2=rand()%3;
            
            if(q0==1)
            {
                cout<<""<<i+1<<"题:"<<"("<<shuzi[i][0]<<"/"<<shuzi[i][3]<<")"<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
            else if(q0==0)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
            else if(q1==1)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<"("<<shuzi[i][1]<<"/"<<shuzi[i][3]<<")"<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
            else if(q1==0)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
            else if(q2==1)
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<"("<<shuzi[i][2]<<"/"<<shuzi[i][3]<<")"<<"="<<endl;
            }
            else
            {
                cout<<""<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl;
            }
        }
    }
}

int main()
{
    panduanchongfu();
    return 0;
}

 

三.运行结果。


 

四.PSP.

一、项目计划总结:

 

周活动总结表

                    姓名: 李明                                日期:2015/3/15

日期       任务

听课

编写程序

阅读课本

准备考试

 

 

日总计

周日

 

 

 

 

 

 

 

周一

 

 

 

 

 

 

 

周二

 100

 

 20

 

 

 

 120

周三

 

 30

 15

 

 

 

 45

周四

 

 60

 20

 

 

 

 80

周五

 100

 120

 20

 

 

 

 240

周六

 

 120

 20

 

 

 

 140

周总结

 200

 330

 95

 

 

 

 625

阶段时间和效率                                            周数(上一次周活动表的周数+1):

不包括上一周在内的累计时间                                                                         

总计

 

 

 

 

 

 

 

平均

 

 

 

 

 

 

 

最大

 

 

 

 

 

 

 

最小

 

 

 

 

 

 

 

以前各周的累计时间                                                                                    

总计

 

 

 

 

 

 

 

平均

 

 

 

 

 

 

 

最大

 

 

 

 

 

 

 

最小

 

 

 

 

 

 

 

二、时间记录表:

学生        李明                                                日期      2015/3/15                 

教师        王建民                                             课程           PSP       

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.11

 1900

 1930

 

 30

 编程

 

 3.12

 1700

 1800

 

 60

 编程

 

 3.13

 1630

 1730

 

 60

 编程

 

 3.13

 1900

 2000

 

 60

 编程

 

 3.14

 1900

 2100

 

 120

 编程

 

 

三、缺陷记录日志:

学生      李明             

日期        2015/2/15           

教员       王建民   

程序号    四则运算            

         

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3.11

 

 

 

 

 

 

 定义字符串数组时,没有正确定义数组内容。比较字符串时,两个字符串类型不同,一个是char类型,一个是char*类型,不能比较。

 3.12

 

 

 

 

 

 

 If判断句中,应该用==。有时一个变量进行了,两次调用,造成赋值混乱。

 3.13

 

 

 

 

 

 

 Case将:写到数字前面了。 多个判断并列,造成每个都要执行。

 3.14

 

 

 

 

 

 

 如果用户没有输入01,提示错误时没有继续循环,没用continue

 

 

 

posted @ 2015-03-15 11:41  努力的学渣  阅读(157)  评论(0编辑  收藏  举报