首页 > 技术文章 > 新增四则运算用户选择功能小程序

luyu2783 2015-03-14 12:16 原文

一 设计思想

1.因为要设定许多可控参数,可以把这些参数构成一个数组,也就是一个参数集,然后对每个参数分情况进行设定;

2.数组中包括题目数量、乘除控制、数值范围、分数控制、正负控制、打印列数共6个元素;

3.对于控制变量,可以设置为1和0 控制;

二 程序代码

#include "stdafx.h"
#include "stdlib.h"      //调用其中随机函数
#include "iostream.h"
#include "time.h"
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];
    cout<<"请输入是否有乘除(有->1;   无->0):"<<endl;
    cin>>a[1];
    cout<<"请输入出数值范围:";
    cin>>a[2];
    cout<<"请输入是否选择分数(有->1;   无->0):"<<endl;
    cin>>a[3];
    cout<<"请输入结果是否有负数(有->1;   无->0):"<<endl;
    cin>>a[4];
    cout<<"请输入几列:"<<endl;
    cin>>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:
            cout<<k1<<"+"<<k2<<"="<<"\t\t";
            break;
        case 1:
            cout<<k1<<"-"<<k2<<"="<<"\t\t";
            break;
        case 2:
            cout<<k1<<"*"<<k2<<"="<<"\t\t";
            break;
        case 3:
            cout<<k1<<"/"<<k2<<"="<<"\t\t";
            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<<endl;
    return 0;
}

三 运行结果截图

 

四 编程心得

1.编程前首先看到这一个又一个的要求,就不知道该如何下手了,后来按照上课老师帮我们分析的思路,这一个又一个可以控制的参数,可以放到一个数组中,同类参数可以考虑这样做,也避免了编程时思路混乱或者功能遗漏。

2.编程时对于是否有分数这个功能选择时,本来想生成一个函数,返回一个分数值,但是这个分数值的显示应该是个字符串,没有做出来,就在主函数里面用了选择语句,重新写了一个式子输出,比较笨的方法。

3。在打印方式的列数功能实现时,也是费了一番周折。

推荐阅读