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

  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/luyu2783/p/4347924.html
Copyright © 2011-2022 走看看