四则运算3

1.实验题目。

让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。
 
2.设计思想。

将程序随机产生的算式,将它们计算的答案存到数组中,并将用户输入的答案也放到数组中,比较两个数组,判断用户答对多少道题。

3.实验代码。

#include<iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
using namespace std;
#include <ctime>
#include <cstdlib>
#define  MAX 100000
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 h[MAX][2];
    for(i=0;i<k;i++)
    {
        if(g[i]==0)
        {
            h[i][0]=shuzi[i][0]+shuzi[i][1]+shuzi[i][2];
        }
        
        if(g[i]==1)
        {
            h[i][0]=shuzi[i][0]+shuzi[i][1]-shuzi[i][2];
        }
        
        if(g[i]==2)
        {
            h[i][0]=shuzi[i][0]+shuzi[i][1]*shuzi[i][2];
        }
        
        if(g[i]==3)
        {
            h[i][0]=shuzi[i][0]+shuzi[i][1]/shuzi[i][2];
            h[i][1]=shuzi[i][1]%shuzi[i][2];
        }
        if(g[i]==4)
        {
            h[i][0]=shuzi[i][0]-shuzi[i][1]+shuzi[i][2];
        }
        
        if(g[i]==5)
        {
            h[i][0]=shuzi[i][0]-shuzi[i][1]-shuzi[i][2];
        }
        
        if(g[i]==6)
        {
            h[i][0]=shuzi[i][0]-shuzi[i][1]*shuzi[i][2];
        }
        
        if(g[i]==7)
        {
            h[i][0]=shuzi[i][0]-shuzi[i][1]/shuzi[i][2];
            h[i][1]=shuzi[i][1]%shuzi[i][2];
        }
        
        if(g[i]==8)
        {
            h[i][0]=shuzi[i][0]*shuzi[i][1]+shuzi[i][2];
        }
        
        if(g[i]==9)
        {
            h[i][0]=shuzi[i][0]*shuzi[i][1]-shuzi[i][2];
        }
        
        if(g[i]==10)
        {
            h[i][0]=shuzi[i][0]*shuzi[i][1]*shuzi[i][2];
        }
        
        if(g[i]==11)
        {
            h[i][0]=shuzi[i][0]*shuzi[i][1]/shuzi[i][2];
            h[i][1]=(shuzi[i][0]*shuzi[i][1])%shuzi[i][2];
        }
        
        if(g[i]==12)
        {
            h[i][0]=shuzi[i][0]/shuzi[i][1]+shuzi[i][2];
        }
        
        if(g[i]==13)
        {
            h[i][0]=shuzi[i][0]/shuzi[i][1]-shuzi[i][2];
        }
        
        if(g[i]==14)
        {
            h[i][0]=shuzi[i][0]/shuzi[i][1]*shuzi[i][2];
        }
        
        if(g[i]==15)
        {
            h[i][0]=shuzi[i][0]/(shuzi[i][1]*shuzi[i][2]);
            if(shuzi[i][0]%shuzi[i][1]!=0)
                h[i][1]=shuzi[i][0]%(shuzi[i][1]*shuzi[i][2]);
            else
                h[i][1]=(shuzi[i][0]&(shuzi[i][1]*shuzi[i][2]))/shuzi[i][1];
        }
        
    }
    int w[100][2];
    cout<<"请输入以上题的答案(当有除法时,输入两个数第一个数为商,第二个数为余数)"<<endl;
    for(i=0;i<k;i++)
    {
        if(p==0)
        {
            cout<<"请输入第"<<i+1<<"道题的答案:"<<endl;
            cin>>w[i][0];
        }
        else
        {
            if(g[i]==3||g[i]==7||g[i]>=11)
            {
                cout<<"请输入第"<<i+1<<"道题的答案(先输入商,在输入余数):"<<endl;
                cin>>w[i][0]>>w[i][1];
            }
            else
            {
                cout<<"请输入第"<<i+1<<"道题的答案:"<<endl;
                cin>>w[i][0];
            }
        }
    }
    int f=0;
    for(i=0;i<k;i++)
    {
        if(w[i][0]==h[i][0]&&w[i][1]==h[i][1])
            f++;
    }
    if(f==k)
        cout<<"全答对了。"<<endl;
    if(f==0)
        cout<<"全答错了。"<<endl;
    else if(f!=k)
    {
        cout<<"对了"<<f<<"道题"<<endl;
        cout<<"错了"<<k-f<<"道题"<<endl;
    }
}






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

4.运行结果。

 

5.总结。

在编写中,应该使用户使用更加方便,应该加入一些提示,要考虑一些尽可能发生的情况。

6.psp

一、项目计划总结:

 

周活动总结表

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

日期       任务

听课

编写程序

阅读课本

准备考试

 

 

日总计

周日

 

 

 

 

 

 

 

周一

 

 

 

 

 

 

 

周二

 100

 

 20

 

 

 

 120

周三

 

 

 15

 

 

 

 15

周四

 

 

 20

 

 

 

 20

周五

 100

 60

 20

 

 

 

 180

周六

 

 60

 20

 

 

 

 80

周总结

 200

 60

 95

 

 

 

 355

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

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

总计

 

 

 

 

 

 

 

平均

 

 

 

 

 

 

 

最大

 

 

 

 

 

 

 

最小

 

 

 

 

 

 

 

以前各周的累计时间                                                                                    

总计

 

 

 

 

 

 

 

平均

 

 

 

 

 

 

 

最大

 

 

 

 

 

 

 

最小

 

 

 

 

 

 

 

二、时间记录表:

学生        李明                                                日期      2015/3/22                

教师        王建民                                             课程           PSP       

日期

开始时间

结束时间

中断时间

净时间

活动

备注

 3.20

 1900

  2000

 

 60

 编程

 

 3.21

 1400

 1500

 

 60

  编程

 

 

三、缺陷记录日志:

学生      李明             

日期        2015/2/22          

教员       王建民   

程序号    四则运算            

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

 3.20

 

 

 

 

 

 

 定义整型时少了分号。

 3.21

 

 

 

 

 

 

 少了大括号。

posted @ 2015-03-22 15:29  努力的学渣  阅读(137)  评论(1编辑  收藏  举报