四则运算之C++版

一、设计思想

  之前的版本是用Java语言实现的,在这次的练习中,我用C++语言将其功能逐一实现,其实C++与Java有很多相似之处,只是一些书写格式不同,思路还是一样的。

二、源代码

  1 #include<iostream.h>
  2 #include<stdlib.h>
  3 #include<math.h>
  4 
  5 int random_1(int n)
  6 {
  7     return rand()%n;
  8 }
  9 int random_2(int n1,int n2)//自定义产生两数之间的随机数
 10 {
 11     int temp = 0,b = 0;
 12     while((temp=rand()%n2)>=n1)//如果产生的随机数大于n1,就将其返回,否则就继续
 13     {
 14         b = temp;            
 15     }    
 16     if(b==0)
 17         b = b + 2*n1;
 18     return b;
 19 }
 20 
 21 void jianfa(int a,int b)//因为小学二年级没有学负数,所以相减不能为负数
 22 {
 23     if(a>=b)
 24         cout<<a<<" - "<<b<<" = \t";
 25     else
 26     {
 27         cout<<b<<" - "<<a<<" = \t";
 28     }
 29 }
 30 void chufa(int a,int b)//为了使除法有意义,除数不能为零,
 31 {
 32     if(b>0)        
 33         cout<<a<<" ÷ "<<b<<" = \t";
 34     //如果除数为零,就将其加上10,再进行运算
 35     else
 36     {
 37         b = b + 10;
 38         cout<<a<<" ÷ "<<b<<" = \t";
 39     }
 40 }
 41 char zhenfenshu(int a,int b)//产生真分数的方法
 42 {
 43     if(a<=b)
 44         cout<<a<<"/"<<b;
 45     else
 46         cout<<b<<"/"<<a;
 47     return 0;
 48 }
 49 void main()
 50 {
 51     bool flag = true;
 52     while(flag)
 53     {
 54         cout<<"<---小学生二年级课后作业,每天30道四则运算练习--->"<<endl;
 55 
 56         cout<<"\r\n1、请输入今日想完成的题目数量:";
 57         
 58         int num;
 59         cin>>num;
 60 
 61         cout<<"\r\n2、请选择是否有乘除运算:(有/否:1/0):";
 62 
 63         int num1;
 64         cin>>num1;
 65 
 66         cout<<"\r\n3、请选择是否需要真分数运算:(有/否:1/0):";
 67 
 68         int num2;
 69         cin>>num2;
 70 
 71         cout<<"\r\n4、请输入每行打印的个数:";
 72 
 73         int num4;
 74         cin>>num4;
 75 
 76         cout<<"\r\n5、请选择需要几位数的运算:(请输入大于1的位数,\r\n如不需要定制,输入1,随机产生不大于1000的运算):";
 77 
 78         int t,num3;
 79         cin>>t;
 80         num3 = t-1;
 81         
 82         int count = 0,d1,d2,k1,k2,k3,k4;//计数器
 83 
 84         for (int i=0;i<num ;i++ )
 85         {    
 86             if(num3==0)//如果输入为1,就将随机产生不大于1000的数
 87             {
 88                 d1 = random_1(1000);
 89                 d2 = random_1(1000);
 90                 k1 = random_1(1000);
 91                 k2 = random_1(1000);
 92                 k3 = random_1(1000);
 93                 k4 = random_1(1000);
 94             }
 95             else
 96             {
 97                 d1 = random_2((int)pow(10,num3),(int)pow(10,num3+1)-1);//自定义的产生随机数
 98                 d2 = random_2((int)pow(10,num3),(int)pow(10,num3+1)-1);
 99                 k1 = random_2((int)pow(10,num3),(int)pow(10,num3+1)-1);
100                 k2 = random_2((int)pow(10,num3),(int)pow(10,num3+1)-1);
101                 k3 = random_2((int)pow(10,num3),(int)pow(10,num3+1)-1);
102                 k4 = random_2((int)pow(10,num3),(int)pow(10,num3+1)-1);
103             }            
104             
105             int k = 0,r = 0;//声明两个变量
106             if(num1==0 && num2==0)//都没有
107             {
108                 r = random_1(4);
109                 if(r%2!=0)//将产生的奇数随机数取出
110                     k=r;
111                 if(k==0)//即使已经将k判断为奇数了,但还是会等于0,所以就再判断一次,如果为0,就将其+1;
112                     ++k;
113             }
114             else if(num1==0 && num2==1)//没乘除,有分数
115                 k = random_1(4);
116             else if(num1==1 && num2==0)//有乘除,没分数
117             {
118                 r = random_1(8);
119                 if(r%2!=0)
120                     k=r;
121                 if(k==0)
122                     ++k;
123             }
124             else//都有
125                 k = random_1(8);                
126             switch(k)//前两个是加法,2,3是减法,4,5是乘法,6,7是除法
127             {
128                 case 0:
129                     cout<<zhenfenshu(k1,k2)<<" + ";
130                     cout<<zhenfenshu(k3,k4)<<" = \t";
131                 break;
132                 case 1:
133                     cout<<d1<<" + "<<d2<<" = \t";
134                 break;
135                 case 2:
136                     cout<<zhenfenshu(k1,k2)<<" - ";
137                     cout<<zhenfenshu(k3,k4)<<" = \t";
138                 break;
139                 case 3:
140                     jianfa(d1,d2);
141                 break;
142                 case 4:
143                     cout<<zhenfenshu(k1,k2)<<" * ";
144                     cout<<zhenfenshu(k3,k4)<<" = \t";
145                 break;
146                 case 5:
147                     cout<<d1<<" * "<<d2<<" = \t";
148                 break;
149                 case 6:
150                     cout<<zhenfenshu(k1,k2)<<" ÷ ";
151                     cout<<zhenfenshu(k3,k4)<<" = \t";
152                 break;
153                 case 7:
154                     chufa(d1,d2);
155                 break;                
156             
157                 default:
158                     cout<<"duang,duang,daung";
159                 break;
160             }
161             count++;
162             if(count%num4==0)
163                 cout<<endl;
164         }        
165         cout<<"以上共有:"<<count<<"道题。"<<endl;
166         int s;
167         cout<<"是否继续(是1/否0)";
168         cin>>s;
169         if(s==1)
170             flag = true;
171         else
172             flag = false;
173     }
174 }

三、运行结果

(有乘除,没分数)

(乘除,分数都没有)

(没乘除,有分数)

(有乘除,有分数)

四、心得体会

  由于之前使用的是Java语言编写的程序,代码的风格也都是Java语言的风格,但是c++在很多方面也跟Java有相似之处,在改动的过程中疏忽了c++在调用函数的使用,必须要在前面声明函数,否则会报错,还有就是,c++中没有String数据类型,所以要将其改成char类型的。

五、PSP表格

 

posted @ 2015-03-22 19:18  Gjianhao  阅读(461)  评论(0编辑  收藏  举报