一、设计思想
之前的版本是用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<<" = "; 25 else 26 { 27 cout<<b<<" - "<<a<<" = "; 28 } 29 } 30 void chufa(int a,int b)//为了使除法有意义,除数不能为零, 31 { 32 if(b>0) 33 cout<<a<<" ÷ "<<b<<" = "; 34 //如果除数为零,就将其加上10,再进行运算 35 else 36 { 37 b = b + 10; 38 cout<<a<<" ÷ "<<b<<" = "; 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<<" 1、请输入今日想完成的题目数量:"; 57 58 int num; 59 cin>>num; 60 61 cout<<" 2、请选择是否有乘除运算:(有/否:1/0):"; 62 63 int num1; 64 cin>>num1; 65 66 cout<<" 3、请选择是否需要真分数运算:(有/否:1/0):"; 67 68 int num2; 69 cin>>num2; 70 71 cout<<" 4、请输入每行打印的个数:"; 72 73 int num4; 74 cin>>num4; 75 76 cout<<" 5、请选择需要几位数的运算:(请输入大于1的位数, 如不需要定制,输入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)<<" = "; 131 break; 132 case 1: 133 cout<<d1<<" + "<<d2<<" = "; 134 break; 135 case 2: 136 cout<<zhenfenshu(k1,k2)<<" - "; 137 cout<<zhenfenshu(k3,k4)<<" = "; 138 break; 139 case 3: 140 jianfa(d1,d2); 141 break; 142 case 4: 143 cout<<zhenfenshu(k1,k2)<<" * "; 144 cout<<zhenfenshu(k3,k4)<<" = "; 145 break; 146 case 5: 147 cout<<d1<<" * "<<d2<<" = "; 148 break; 149 case 6: 150 cout<<zhenfenshu(k1,k2)<<" ÷ "; 151 cout<<zhenfenshu(k3,k4)<<" = "; 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表格