码迷,mamicode.com
首页 > 其他好文 > 详细

四则运算程序 进一步改进代码并新增答题测试功能

时间:2015-03-18 20:22:49      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

一、设计思想

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

二、程序代码

#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<<")="<<"\t\t";
            break;
        case 1:
            cout<<"("<<n1<<"/"<<n2<<")-("<<n3<<"/"<<n4<<")="<<"\t\t";
            break;
        case 2:
            cout<<"("<<n1<<"/"<<n2<<")*("<<n3<<"/"<<n4<<")="<<"\t\t";
            break;
        case 3:
            cout<<"("<<n1<<"/"<<n2<<")/("<<n3<<"/"<<n4<<")="<<"\t\t";
            break;
        }
        }
    }
        cout<<"您总做了"<<a[0]<<"个题,正确"<<right<<"的道,错误"<<wrong<<""<<endl;
    cout<<endl;
    return 0;
}

三、实验截图
技术分享

四、实验心得

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

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

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

 

四则运算程序 进一步改进代码并新增答题测试功能

标签:

原文地址:http://www.cnblogs.com/luyu2783/p/4347924.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!