zoukankan      html  css  js  c++  java
  • 四则运算程序 进一步改进代码并新增答题测试功能

    一、设计思想

         编写一个判断函数,由用户输入运算题后结果,并与正确结果对比,输出答题的对错数。

    二、程序代码

    #include "stdafx.h"
    #include "stdlib.h"      //调用其中随机函数
    #include "iostream.h"
    #include "time.h"
    int wrong=0,right=0;
    void Addjudge(int k1,int k2)
    {
        int k3;
        cout<<"请回答"<<k1<<"+"<<k2<<"=";
        cin>>k3;
        if(k1+k2!=k3)
           {
              cout<<"回答错误"<<endl;
              wrong++;
           }
           else 
           {
              cout<<"回答正确"<<endl;
              right++;
           } 
    }//判断加法运算是否正确
    void Subjudge(int k1,int k2)
    {        
        int k3;
        cout<<"请回答"<<k1<<"-"<<k2<<"=";
        cin>>k3;
        if(k1-k2!=k3)
           {
              cout<<"回答错误"<<endl;
              wrong++;
           }
           else 
           {
              cout<<"回答正确"<<endl;
              right++;
           } 
    }//判断减法运算是否正确
    void Chengjudge(int k1,int k2)
    {
            
        int k3;
        cout<<"请回答"<<k1<<"*"<<k2<<"=";
        cin>>k3;
        if(k1*k2!=k3)
           {
              cout<<"回答错误"<<endl;
              wrong++;
           }
           else 
           {
              cout<<"回答正确"<<endl;
              right++;
           } 
    }//判断乘法运算是否正确
    void Chujudge(int k1,int k2)
    {    
        int k3;
        cout<<"请回答"<<k1<<"/"<<k2<<"=";
        cin>>k3;
        if(k1/k2!=k3)
           {
              cout<<"回答错误"<<endl;
              wrong++;
           }
           else 
           {
              cout<<"回答正确"<<endl;
              right++;
           } 
    }//判断除法运算是否正确
    
    int main(int argc, char* argv[])
    {
        int a[6],ch;      //定义一个数组,用来存放可控参数
        int temp;
        srand((unsigned)time(NULL)); //使随机产生的式子每次不重复
        int k1,k2;  //k1,k2为两个随机数,产生n个式子
        cout<<"请输入出题数目:"<<endl;
        cin>>a[0];
        if(a[0]<0)
        {
            cout<<"出错!请重新输入!"<<endl;
            cin>>a[0];
        }
       //输入出题数目a[0]
        cout<<"请输入是否有乘除(有->1;   无->0):"<<endl;
        cin>>a[1];
        while(a[1]<0||a[1]>1)
        {
             cout<<"错误!请正确输入操作序号(0~1):";
             cin>>a[1];
        }
       //输入是否乘除a[1]
        cout<<"请输入出数值范围:";
        cin>>a[2];
       //输入数值范围a[2]
        cout<<"请输入是否选择分数(有->1;   无->0):"<<endl;
        cin>>a[3];
        while(a[3]<0||a[3]>1)
        {
            cout<<"错误!请正确输入操作序号(0~1):";
            cin>>a[3];
        }
       //输入是否有分数a[3]
        cout<<"请输入结果是否有负数(有->1;   无->0):"<<endl;
        cin>>a[4];
        while(a[4]<0||a[4]>1)
        {
           cout<<"错误!请正确输入操作序号(0~1):";
           cin>>a[4];
        }
        //输入结果是否为负数a[4]
        cout<<"请输入几列:"<<endl;
        cin>>a[5];
        if(a[5]<0)
        {
            cout<<"出错!请重新输入!"<<endl;
            cin>>a[5];
         }
         //输入几列a[5]
        for(int i=1;i<=a[0];i++)      //由用户决定打印多少道题a[0]
        {
    
            if(a[3]==0){
            k1=rand()%(a[2]);   //随机产生a[2]以内的数,a[2]是由用户输入的数值范围
            k2=rand()%(a[2]);
            if(a[4]==0)         //控制结果没有负数,如果相减出现负数,则交换两个数
            {
                if(k1<k2)
                {
                temp=k1;
                k1=k2;
                k2=temp;
                }
            }
            else
            {
            k1=rand()%(a[2]);   
            k2=rand()%(a[2]);
            }
            if(a[1]==1){           //a[1]为控制乘除参数
                ch=rand()%4;      //ch有四种情况,加减乘除
            }
            else
                ch=rand()%2;      //ch有两种情况,加减,没有乘除
    
            if((i+1)%a[5]==0)      //a[5]为打印列数,式子个数除以列数的余数决定了它的位置
            {
                cout<<endl;
            }
            switch(ch)
            {
            case 0:    
                Addjudge(k1,k2);
                break;
            case 1:
                  Subjudge(k1,k2);
                break;
            case 2:
                Chengjudge(k1,k2);
                break;
            case 3:
                Chujudge(k1,k2);
                break;
            }        
            }    
            else
            {
                int n1,n2,n3,n4;
                    n1=rand()%20;   //随机产生20以内的数
                    n2=rand()%20;
                    n3=rand()%20;   
                    n4=rand()%20;     
                   if(a[1]==1){
                    ch=rand()%4;
            }
            else
                ch=rand()%2;       //随机产生一个运算符号
            if((i+1)%a[5]==0)
                {
                    cout<<endl;
                }
            switch(ch)        //输出分数
            {
            case 0:
                cout<<"("<<n1<<"/"<<n2<<")+("<<n3<<"/"<<n4<<")="<<"		";
                break;
            case 1:
                cout<<"("<<n1<<"/"<<n2<<")-("<<n3<<"/"<<n4<<")="<<"		";
                break;
            case 2:
                cout<<"("<<n1<<"/"<<n2<<")*("<<n3<<"/"<<n4<<")="<<"		";
                break;
            case 3:
                cout<<"("<<n1<<"/"<<n2<<")/("<<n3<<"/"<<n4<<")="<<"		";
                break;
            }
            }
        }
            cout<<"您总做了"<<a[0]<<"个题,正确"<<right<<"的道,错误"<<wrong<<""<<endl;
        cout<<endl;
        return 0;
    }

    三、实验截图

    四、实验心得

        1.首先,程序中增加了用户在决定所出题目做出选择时,如果输入超出正确范围,报错重输。

        2.以前编程不愿意用函数实现程序部分功能,导致程序写起来所有代码都在主函数中,功能模块不清晰。以后编程要注意经常使用函数调用。

        3.分数的实现过于复杂,这个程序只实现了整数运算的结果判断。进行用户运算结果测试对于打印题目中的列数没有意义了,测试是与出题同步进行的,一边出题一边做题。

  • 相关阅读:
    【Django Admin皮肤】 Simpleui 自定义常用 持续更新中...
    【webSokect】基于django Channels的简单实现
    【webSocket】实现原理
    【webSocket】长轮询
    【前端实时时间】JS原生代码
    【数据结构的补全整理】规定在周一到周五中,赛选出8点到18点中的计划安排,空计划时刻补全空值
    JS面试经典知识(一)
    Python中 zipfile 出现乱码
    Linux shell 对数据进行归档
    Linux 函数的使用
  • 原文地址:https://www.cnblogs.com/luyu2783/p/4347924.html
Copyright © 2011-2022 走看看