zoukankan      html  css  js  c++  java
  • 四则运算的扩展

     扩展:

      接受用户输入答案,并显示结果和答对个数。

    附上代码:

      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[],double results[],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             double result1=1,result2=1;
     95             switch(digits[5]){    
     96             case 0:
     97                   //计算括号里面的值,并赋值在result中
     98                 switch(characters[digits[3]])
     99                 {
    100                 case '+':result1=(double)digits[0]+(double)digits[1];break;
    101                 case '-':result1=(double)digits[0]-(double)digits[1];break;
    102                 case '*':result1=(double)digits[0]*(double)digits[1];break;
    103                 case '/':result1=(double)digits[0]/(double)digits[1];break;
    104                 }
    105                 switch(characters[digits[4]])
    106                 {
    107                 case '+':results[k]=(double)result1+(double)digits[2];break;
    108                 case '-':results[k]=(double)result1-(double)digits[2];break;
    109                 case '*':results[k]=(double)result1*(double)digits[2];break;
    110                 case '/':results[k]=(double)result1/(double)digits[2];break;
    111                 }
    112                 if((characters[digits[3]]=='/'&&digits[1]==0)||(characters[digits[4]]=='/'&&digits[2]==0))//数学规则,商不能为0
    113                 {
    114                     goto P;
    115                 }
    116                 else
    117                 {
    118                     if((characters[digits[3]]=='+'||characters[digits[3]]=='-')        //括号在前
    119                         &&(characters[digits[4]]=='*'||characters[digits[4]]=='/'))    //排除无用括号
    120                     {
    121                         cout<<"(";
    122                         if((int)Arithmetic_arr[k][0]<0)
    123                         {
    124                             cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
    125                         }
    126                         else
    127                             cout<<(int)Arithmetic_arr[k][0];
    128                         cout<<Arithmetic_arr[k][1];
    129                         if((int)Arithmetic_arr[k][2]<0)
    130                         {
    131                             cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
    132                         }
    133                         else
    134                             cout<<(int)Arithmetic_arr[k][2];
    135                         cout<<")"<<Arithmetic_arr[k][3];
    136                         if((int)Arithmetic_arr[k][4]<0)
    137                         {
    138                             cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
    139                         }
    140                         else
    141                             cout<<(int)Arithmetic_arr[k][4];
    142                         cout<<"=";
    143 
    144                         if(flag%character3==0) {cout<<endl;}
    145                         else {cout<<setw(character4);}
    146                         
    147                         break;
    148                     }
    149                     else 
    150                     {
    151                         goto P;
    152                     }
    153                 }
    154                 
    155             case 1:  //括号在后
    156                 switch(characters[digits[4]])
    157                 {
    158                 case '+':result2=(double)digits[1]+(double)digits[2];break;
    159                 case '-':result2=(double)digits[1]-(double)digits[2];break;
    160                 case '*':result2=(double)digits[1]*(double)digits[2];break;
    161                 case '/':result2=(double)digits[1]/(double)digits[2];break;
    162                 }
    163                 switch(characters[digits[3]])
    164                 {
    165                 case '+':results[k]=(double)digits[0]+(double)result2;break;
    166                 case '-':results[k]=(double)digits[0]-(double)result2;break;
    167                 case '*':results[k]=(double)digits[0]*(double)result2;break;
    168                 case '/':results[k]=(double)digits[0]/(double)result2;break;
    169                 }
    170                 if((characters[digits[4]]=='/'&&digits[2]==0)||(characters[digits[3]]=='/'&&result2==0))    //数学规则,商不能为0
    171                 {
    172                     goto P;
    173                 }
    174                 else
    175                 {
    176                     if((characters[digits[3]]=='*'&&(characters[digits[4]]=='+'||characters[digits[4]]=='-'))
    177                         ||(characters[digits[3]]=='/'&&(characters[digits[4]]=='+'||characters[digits[4]]=='-'||characters[digits[4]]=='*'))
    178                         ||(characters[digits[3]]=='-'&&(characters[digits[4]]=='+'||characters[digits[4]]=='-')))    //排除无用括号    
    179                     {    
    180                         if((int)Arithmetic_arr[k][0]<0)
    181                         {
    182                             cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
    183                         }
    184                         else
    185                             cout<<(int)Arithmetic_arr[k][0];
    186                         cout<<Arithmetic_arr[k][1];
    187                         cout<<"(";
    188                         if((int)Arithmetic_arr[k][2]<0)
    189                         {
    190                             cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
    191                         }
    192                         else
    193                             cout<<(int)Arithmetic_arr[k][2];
    194                         cout<<Arithmetic_arr[k][3];
    195                         if((int)Arithmetic_arr[k][4]<0)
    196                         {
    197                             cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
    198                         }
    199                         else
    200                             cout<<(int)Arithmetic_arr[k][4];
    201                         cout<<")"<<"=";
    202                         
    203                         if(flag%character3==0) {cout<<endl;}
    204                         else {cout<<setw(character4);}
    205                         break;
    206                     }
    207                     
    208                     else 
    209                     {
    210                         goto P;
    211                     }
    212                 }
    213             }    
    214         }
    215         else{
    216             
    217             if((int)Arithmetic_arr[k][0]<0)
    218             {
    219                 cout<<"("<<(int)Arithmetic_arr[k][0]<<")";
    220             }
    221             else
    222                 cout<<(int)Arithmetic_arr[k][0];
    223             cout<<Arithmetic_arr[k][1];
    224             if((int)Arithmetic_arr[k][2]<0)
    225             {
    226                 cout<<"("<<(int)Arithmetic_arr[k][2]<<")";
    227             }
    228             else
    229                 cout<<(int)Arithmetic_arr[k][2];
    230             cout<<Arithmetic_arr[k][3];
    231             if((int)Arithmetic_arr[k][4]<0)
    232             {
    233                 cout<<"("<<(int)Arithmetic_arr[k][4]<<")";
    234             }
    235             else
    236                 cout<<(int)Arithmetic_arr[k][4];
    237             cout<<"=";
    238             if(flag%character3==0) {cout<<endl;}
    239             else {cout<<setw(character4);}
    240         }
    241     }        
    242 }
    243 
    244 int main()
    245 {
    246     while(1)
    247     {
    248         cout<<"------------------小学生四则运算产生器-------------------"<<endl;
    249         
    250         srand((unsigned)time(NULL));    //为rand()函数生成不同的随机种子
    251         
    252         int num1,num2=6,num3;
    253         
    254         cout<<"请输入定制数目(输入零结束):"<<endl;      //题目数
    255         
    256         cin>>num1;
    257 
    258         cout<<"答案小数精确度:"<<endl;      //题目数
    259         
    260         cin>>num3;
    261         
    262         if(num1==0){
    263 
    264             cout<<"---------------------谢谢使用!!!----------------------"<<endl;
    265             exit(0);
    266         }
    267         
    268         char ** Arithmetic_arr=new char*[num1];  //存放运算式动态数组
    269 
    270         double * results=new double[num1];
    271 
    272         double * answer=new double[num1];  //正确答案数组results与接收答案数组answer
    273         
    274         int digits[6];                    //存放计算的随机数字的数组,前三个为随机运算数字,第四第
    275                                         //五为随机产生运算符号标志数,第六为判断括号位置标志数。
    276         int count=0;
    277 
    278         char characters[6]={'+','-','*','/','(',')'};    //存放加减乘除及括号等字符数组
    279         
    280         Demo(digits,characters,Arithmetic_arr,results,num1,num2);  //调用计算函数
    281         
    282         delete [] Arithmetic_arr;  //释放动态数组空间
    283 
    284         cout<<"---------------------------------------------------------"<<endl;
    285 
    286         cout<<"请输入结果:"<<endl;
    287 
    288         for(int i=0;i<num1;i++)
    289         {
    290             cout<<""<<i+1<<"题答案是:    ";
    291             cin>>answer[i];
    292         }
    293         for(int j=0;j<num1;j++)
    294         {
    295             if(results[j]==answer[j])
    296             {
    297                 count++;
    298             }
    299         }
    300         cout<<"---------------------------------------------------------"<<endl;
    301         cout<<"按回车显示答案!"<<endl;
    302         cout<<"---------------------------------------------------------"<<endl;
    303 
    304         getch();
    305 
    306         for(int k=0;k<num1;k++)
    307         {
    308             cout<<""<<k+1<<"题正确答案是:    "<<fixed<<setprecision(num3)<<results[k]<<endl;
    309         }
    310         cout<<"---------------------------------------------------------"<<endl;
    311 
    312         cout<<"答对的题目个数为"<<count+1<<""<<endl;
    313 
    314         cout<<endl<<"------------------请输入任意键继续!---------------------"<<endl;
    315         
    316         getch();
    317         
    318         system("CLS");
    319     }
    320     return 0;
    321 }


    运行结果截图:

    结论:

      程序的结构很重要,良好的可扩展性便于日后添加新的功能。

  • 相关阅读:
    线性参考
    unix下安装Server(静默方式)
    ArcGIS Server REST开发模式
    Python中调用AO
    Oracle 冷备份
    平头缓冲
    Oracle 热备份
    Socket获取远程连接者的IP
    c#调用cmd执行相关命令
    C#_winform_DataGridView_的18种常见属性 (转)
  • 原文地址:https://www.cnblogs.com/bill927/p/4346969.html
Copyright © 2011-2022 走看看