zoukankan      html  css  js  c++  java
  • 四则运算测试

    测试元素:

      1、题目数目;

      2、数值范围;

      3、是否带括号;

      4、是否有乘除;

      5、每行容纳算式个数;

      6、算式行间距.

    第一次测试:30  100  Y  Y   2  12

    结果:

    格式混乱,检查发现setw()函数逻辑位置不对;修改后显示正常。

    第二次测试:20  1  N  N  2   12

    结果:

    无法避免重复时程序出错,未解决;

    第三次测试:2000  1000  Y  Y  4  6

    结果:

    出现大数据时,会出现除数为零的情况,上面显示的结果是解决后的截图

    其他情况下测试未发现明显异常

    修改后的源代码如下:

      1 #include<iostream>
      2 #include<conio.h>
      3 #include<cstdlib>
      4 #include<ctime>
      5 #include <iomanip>
      6 using namespace std;
      7 
      8 void Rand_Cal_one(int digits[],char characters[],int range)  //随机产生运算数(包含乘除)
      9 {
     10     for(int i=0;i<6;i++){
     11         if(i<3){
     12             digits[i]=rand()%range;//生成四则运算的计算随机数
     13             continue;
     14         }
     15         else if(i<5){
     16             digits[i]=rand()%4;//随机产生标志判断计算符号
     17             continue;
     18         }
     19         else{
     20             digits[i]=rand()%2;//随机产生标志数判断括号位置
     21         }
     22     }
     23 }
     24 
     25 void Rand_Cal_two(int digits[],char characters[],int range)  //随机产生运算数(不含乘除)
     26 {
     27     for(int i=0;i<6;i++){
     28         if(i<3){
     29             digits[i]=rand()%range;//生成四则运算的计算随机数
     30             continue;
     31         }
     32         else if(i<5){
     33             digits[i]=rand()%2;//随机产生标志判断计算符号
     34             continue;
     35         }
     36         else{
     37             digits[i]=rand()%2;//随机产生标志数判断括号位置
     38         }
     39     }
     40 }
     41 
     42 void Demo(int digits[],char characters[],char * Arithmetic_arr[],int m,int n) //产生符合要求的运算式
     43 {
     44     char character1,character2;
     45     int character3,character4,range;
     46     cout<<"请输入数字范围(最大值):"<<endl;
     47     cin>>range;
     48     cout<<"请选择是否带括号: Y表示带括号,N表示不带括号"<<endl;
     49     cin>>character1;
     50     cout<<"请选择是否有乘除: Y表示有乘除,N表示无乘除"<<endl;
     51     cin>>character2;
     52     cout<<"请选择每行容纳算是数量:"<<endl;
     53     cin>>character3;
     54     
     55     if(character3!=1){    
     56         cout<<"请选择行间距(1-n):"<<endl;    
     57         cin>>character4;
     58     }
     59     
     60     cout<<"-------------------"<<m<<"道算式题如下-------------------------"<<endl;
     61     
     62     for(int k=0; k<m; k++){
     63         int flag=k+1;
     64 P:
     65         if (character2=='Y'){
     66             Rand_Cal_one(digits,characters,range);
     67         }
     68         else{
     69             Rand_Cal_two(digits,characters,range);
     70         }
     71         Arithmetic_arr[k]=new char[n];    
     72         if(k!=0){    
     73             for(int i=0;i<k;i++){        
     74                 if( digits[0]==Arithmetic_arr[i][0]                    //避免重复
     75                     && characters[digits[3]]==Arithmetic_arr[i][1]
     76                     && digits[1]==Arithmetic_arr[i][2]
     77                     && characters[digits[4]]==Arithmetic_arr[i][3]
     78                     && digits[2]==Arithmetic_arr[i][4]
     79                     &&digits[5]==Arithmetic_arr[i][5]){
     80                     
     81                     goto P;    
     82                 }
     83             }
     84         }
     85         
     86         Arithmetic_arr[k][0]=digits[0];        //第一个操作数
     87         Arithmetic_arr[k][1]=characters[digits[3]];//第一个运算符
     88         Arithmetic_arr[k][2]=digits[1];        //第二个操作数
     89         Arithmetic_arr[k][3]=characters[digits[4]];//第二个运算符
     90         Arithmetic_arr[k][4]=digits[2];        //第三个操作数
     91         Arithmetic_arr[k][5]=digits[5];   //存放括号位置标志
     92         
     93         if (character1=='Y'){
     94             switch(digits[5]){    
     95             case 0:
     96                 if((characters[digits[3]]=='/'&&digits[1]==0)||(characters[digits[4]]=='/'&&digits[2]==0))//数学规则,商不能为0
     97                 {
     98                     goto P;
     99                 }
    100                 else
    101                 {
    102                     if((characters[digits[3]]=='+'||characters[digits[3]]=='-')        //括号在前
    103                         &&(characters[digits[4]]=='*'||characters[digits[4]]=='/'))    //排除无用括号
    104                     {
    105                         cout<<"(";
    106                         if((int)Arithmetic_arr[k][0]<0)
    107                         {
    108                             cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
    109                         }
    110                         else
    111                             cout<<(int)Arithmetic_arr[k][0];
    112                         cout<<Arithmetic_arr[k][1];
    113                         if((int)Arithmetic_arr[k][2]<0)
    114                         {
    115                             cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
    116                         }
    117                         else
    118                             cout<<(int)Arithmetic_arr[k][2];
    119                         cout<<")"<<Arithmetic_arr[k][3];
    120                         if((int)Arithmetic_arr[k][4]<0)
    121                         {
    122                             cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
    123                         }
    124                         else
    125                             cout<<(int)Arithmetic_arr[k][4];
    126                         cout<<"=";
    127                         
    128                         
    129                         
    130                         if(flag%character3==0) {cout<<endl;}
    131                         else {cout<<setw(character4);}
    132                         
    133                         break;
    134                     }
    135                     else 
    136                     {
    137                         goto P;
    138                     }
    139                 }
    140                 
    141             case 1:  //括号在后
    142                 int result=1;  //计算括号里面的值,并赋值在result中
    143                 switch(characters[digits[4]])
    144                 {
    145                 case '+':result=digits[1]+digits[2];break;
    146                 case '-':result=digits[1]-digits[2];break;
    147                 case '*':result=digits[1]*digits[2];break;
    148                 case '/':result=digits[1]/digits[2];break;
    149                 }
    150                 if((characters[digits[4]]=='/'&&digits[2]==0)||(characters[digits[3]]=='/'&&result==0))    //数学规则,商不能为0
    151                 {
    152                     goto P;
    153                 }
    154                 else
    155                 {
    156                     if((characters[digits[3]]=='*'&&(characters[digits[4]]=='+'||characters[digits[4]]=='-'))
    157                         ||(characters[digits[3]]=='/'&&(characters[digits[4]]=='+'||characters[digits[4]]=='-'||characters[digits[4]]=='*'))
    158                         ||(characters[digits[3]]=='-'&&(characters[digits[4]]=='+'||characters[digits[4]]=='-')))    //排除无用括号    
    159                     {    
    160                         if((int)Arithmetic_arr[k][0]<0)
    161                         {
    162                             cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
    163                         }
    164                         else
    165                             cout<<(int)Arithmetic_arr[k][0];
    166                         cout<<Arithmetic_arr[k][1];
    167                         cout<<"(";
    168                         if((int)Arithmetic_arr[k][2]<0)
    169                         {
    170                             cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
    171                         }
    172                         else
    173                             cout<<(int)Arithmetic_arr[k][2];
    174                         cout<<Arithmetic_arr[k][3];
    175                         if((int)Arithmetic_arr[k][4]<0)
    176                         {
    177                             cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
    178                         }
    179                         else
    180                             cout<<(int)Arithmetic_arr[k][4];
    181                         cout<<")"<<"=";
    182                         
    183                         if(flag%character3==0) {cout<<endl;}
    184                         else {cout<<setw(character4);}
    185                         break;
    186                     }
    187                     
    188                     else 
    189                     {
    190                         goto P;
    191                     }
    192                 }
    193             }    
    194         }
    195         else{
    196             
    197             if((int)Arithmetic_arr[k][0]<0)
    198             {
    199                 cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
    200             }
    201             else
    202                 cout<<(int)Arithmetic_arr[k][0];
    203             cout<<Arithmetic_arr[k][1];
    204             if((int)Arithmetic_arr[k][2]<0)
    205             {
    206                 cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
    207             }
    208             else
    209                 cout<<(int)Arithmetic_arr[k][2];
    210             cout<<Arithmetic_arr[k][3];
    211             if((int)Arithmetic_arr[k][4]<0)
    212             {
    213                 cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
    214             }
    215             else
    216                 cout<<(int)Arithmetic_arr[k][4];
    217             cout<<"=";
    218             if(flag%character3==0) {cout<<endl;}
    219             else {cout<<setw(character4);}
    220         }
    221     }        
    222 }
    223 
    224 int main()
    225 {
    226     while(1)
    227     {
    228         cout<<"------------------小学生四则运算产生器-------------------"<<endl;
    229         
    230         srand((unsigned)time(NULL));    //为rand()函数生成不同的随机种子
    231         
    232         int num1,num2=6;
    233         
    234         cout<<"请输入定制数目(输入零结束):"<<endl;      //题目数
    235         
    236         cin>>num1;
    237         
    238         if(num1==0){
    239 
    240             cout<<"---------------------谢谢使用!!!----------------------"<<endl;
    241             exit(0);
    242         }
    243         
    244         char ** Arithmetic_arr=new char*[num1];  //存放运算式动态数组
    245         
    246         int digits[6];                    //存放计算的随机数字的数组,前三个为随机运算数字,第四第
    247                                         //五为随机产生运算符号标志数,第六为判断括号位置标志数。
    248         char characters[6]={'+','-','*','/','(',')'};    //存放加减乘除及括号等字符数组
    249         
    250         Demo(digits,characters,Arithmetic_arr,num1,num2);  //调用计算函数
    251         
    252         delete [] Arithmetic_arr;  //释放动态数组空间
    253         
    254         cout<<endl<<"------------------请输入任意键继续!---------------------"<<endl;
    255         
    256         getch();
    257         
    258         system("CLS");
    259     }
    260     return 0;
    261 }
    View Code


    结论:通过这次编写程序,我觉得难的不是是否对语法有多么精通,而是编写的算法是否精炼简洁,最难的是逻辑问题的解决;

    当小的问题在一个函数下,无需通过大量的结构化以及参数的传递很容易就能解决;但当函数结构扩大时,良好的算法结构才是

    维护及修改程序的总要条件。

  • 相关阅读:
    Android开发--Layout元素
    Android开发--RelativeLayout的应用
    group by调优的一些测试
    mysql explain中key_len的计算
    mysql索引长度的一些限制
    order by调优的一些测试
    metadata lock
    JDBC连接数据库
    Java—Map.Entry
    innodb buffer pool
  • 原文地址:https://www.cnblogs.com/bill927/p/4342578.html
Copyright © 2011-2022 走看看