四则运算

Posted 小辉辉123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四则运算相关的知识,希望对你有一定的参考价值。

一、升级要求:让程序能接受用户输入答案,并判定对错。最后给出总共对/错的数量。

二、设计思想:

      1、首先输入答案并判断对错。我想到的是定义两个数组,一个存放用户算的结果,另一个存放正确答案。每输出一道题目,就算出该题目正确答案存入数组中,当所有题目出完,用户输入结果时,再将结果与答案对比,并为用户输出提示,提醒正确或错误。

      2、最后给出总共对/错的数量。在比较用户输入的结果和答案时,若相等,输出提示时,将正确计数器加1;若不等,将错误提示器加1。最后输出两个计数器的值,并提示用户正确/错误的数值。

三、源代码

1 //信1301-2   胡金辉
  2 
  3 #include "stdafx.h"
  4 #include "stdlib.h"
  5 #include <time.h>
  6 
  7 int _tmain(int argc, _TCHAR* argv[])
  8 {
  9     srand(time(NULL)); //避免题目重复
 10 //存放正确答案和用户结果的数组
 11     int daan[100000],jieguo[100000];
 12     int x1,x2,flag,i,j,k;
 13     int x3,x4;
 14 //正确计数器和错误计数器
 15     int count1=0;
 16     int count2=0;
 17     int a[10];
 18     printf("---------------------------欢迎使用本系统打印题目!----------------------------\\n");
 19     //可定制打印的题目数
 20     printf("请输入要打印的题目数:");   
 21     scanf("%d",&a[0]);
 22     while(a[0]<=0)  //题目数必须为正数
 23     {
 24         printf("请重新输入有效的题目数:");
 25         scanf("%d",&a[0]);
 26     };
 27     //可定制运算数的范围
 28     printf("请输入运算数的范围:");
 29     scanf("%d",&a[2]);
 30     while(a[2]<=0)  //运算数必须为正数
 31     {
 32         printf("请重新输入有效的范围:");
 33         scanf("%d",&a[2]);
 34     };
 35     //可定制题目中是否有乘除法
 36     printf("请选择否有乘除法(是->1;否->0):");
 37     scanf("%d",&a[1]);
 38     while((a[1]!=1)&(a[1]!=0)) //只能选择1或0
 39     {
 40         printf("请重新输入有效的数值:");
 41         scanf("%d",&a[1]);
 42     };
 43     //可定制题目结果是否有负数
 44     printf("请选择结果有无负数(是->1;否->0):");
 45     scanf("%d",&a[3]);
 46     while((a[3]!=1)&(a[3]!=0))  //只能选择1或0
 47     {
 48         printf("请重新输入有效的数值:");
 49         scanf("%d",&a[3]);
 50     };
 51     //可定制结果是否有余数
 52     printf("请选择结果有无余数(是->1;否->0):");
 53     scanf("%d",&a[4]);
 54     while((a[4]!=1)&(a[4]!=0))  //只能选择1或0
 55     {
 56         printf("请重新输入有效的数值:");
 57         scanf("%d",&a[4]);
 58     };
 59     
 60     //可定制是否支持小数
 61     printf("请选择是否支持小数(是->1;否->0):");
 62     scanf("%d",&a[5]);
 63     while((a[5]!=1)&(a[5]!=0))  //只能选择1或0
 64     {
 65         printf("请重新输入有效的数值:");
 66         scanf("%d",&a[5]);
 67     };
 68     
 69     //可定制是否加括号
 70     printf("请选择是否加括号(是->1;否->0):");
 71     scanf("%d",&a[6]);
 72     while((a[6]!=1)&(a[6]!=0))  //只能选择1或0
 73     {
 74         printf("请重新输入有效的数值:");
 75         scanf("%d",&a[6]);
 76     };
 77 
 78     //循环打印符合要求的题目
 79     for(i=0;i<a[0];i++)
 80     {
 81         switch(a[1]) 
 82         {
 83         case 1:j=rand()%4;break;  //有乘除法
 84             case 0:j=rand()%2;break;  //无乘除法
 85             }
 86             x1=rand()%a[2]+1;
 87                 x2=rand()%a[2]+1;
 88           
 89         //循环打印
 90             if(j==0)
 91         {
 92             
 93             switch(a[6])
 94             {
 95             case 0:
 96                 switch(a[5])
 97                 {
 98                 case 0:printf("%d+%d=\\t\\t",x1,x2);break;
 99                 case 1:
100                     x3=rand()%9+1;
101                     x4=rand()%9+1;
102                     printf("%d.%d+%d.%d=\\t\\t",x1,x3,x2,x4);break;
103                 }
104                 break;
105                 
106             case 1:
107                 switch(a[5])
108                 {
109                 case 0:printf("(%d+%d)=\\t",x1,x2);break;
110                 case 1:
111                     x3=rand()%9+1;
112                     x4=rand()%9+1;
113                     printf("(%d.%d+%d.%d)=\\t",x1,x3,x2,x4);break;
114                 }
115                 break;
116             }
117 //计算当运算法则为加法时的正确结果,并存入数组
118             jieguo[i]=x1+x2;
119         }
120         if(j==1)
121         {
122                         switch(a[3])
123                         {
124                 case 1: 
125                                 break;
126                     case 0:                   //结果无负数
127                             if(x1<x2)            //被减数比减数小则交换
128                             {
129                                 flag=x1;
130                                 x1=x2;
131                                 x2=flag;
132                              }
133                         break;
134                     }
135             switch(a[6])
136             {
137             case 0:
138                 switch(a[5])
139                 {
140                 case 0:printf("%d-%d=\\t\\t",x1,x2);break;
141                 case 1:
142                     x3=rand()%9+1;
143                     x4=rand()%9+1;
144                     printf("%d.%d-%d.%d=\\t\\t",x1,x3,x2,x4);break;
145                 }
146                 break;
147                 
148             case 1:
149                 switch(a[5])
150                 {
151                 case 0:printf("(%d-%d)=\\t",x1,x2);break;
152                 case 1:
153                     x3=rand()%9+1;
154                     x4=rand()%9+1;
155                     printf("(%d.%d-%d.%d)=\\t",x1,x3,x2,x4);break;
156                 }
157                 break;
158             }
159 //计算当运算法则为减法时的正确结果,并存入数组
160             jieguo[i]=x1-x2;
161         }
162         if(j==2)
163         {
164             
165             switch(a[6])
166             {
167             case 0:
168                 switch(a[5])
169                 {
170                 case 0:printf("%d*%d=\\t\\t",x1,x2);break;
171                 case 1:
172                     x3=rand()%9+1;
173                     x4=rand()%9+1;
174                     printf("%d.%d*%d.%d=\\t\\t",x1,x3,x2,x4);break;
175                 }
176                 break;
177                 
178             case 1:
179                 switch(a[5])
180                 {
181                 case 0:printf("(%d*%d)=\\t",x1,x2);break;
182                 case 1:
183                     x3=rand()%9+1;
184                     x4=rand()%9+1;
185                     printf("(%d.%d*%d.%d)=\\t",x1,x3,x2,x4);break;
186                 }
187                 break;
188             }
189 //计算当运算法则为乘法时的正确结果,并存入数组
190             jieguo[i]=x1*x2;
191         }
192         if(j==3)
193         {    
194             switch(a[4])
195             {
196             case 1:                         //结果可有余数
197                 break;
198             case 0:                        //结果无余数
199                 while(x1%x2!=0)            //如果不能整除,则重新生成
200                 {
201                     x1=rand()%a[2]+1;   
202                     x2=rand()%a[2]+1; 
203                    };
204                 break;
205                }
206             switch(a[6])
207             {
208             case 0:
209                 switch(a[5])
210                 {
211                 case 0:printf("%d/%d=\\t\\t",x1,x2);break;
212                 case 1:
213                     x3=rand()%9+1;
214                     x4=rand()%9+1;
215                     printf("%d.%d/%d.%d=\\t\\t",x1,x3,x2,x4);break;
216                 }
217                 break;
218                 
219             case 1:
220                    switch(a[5])
221                 {
222                 case 0:printf("(%d/%d)=\\t",x1,x2);break;
223                 case 1:
224                       x3=rand()%9+1;
225                     x4=rand()%9+1;
226                     printf("(%d.%d/%d.%d)=\\t",x1,x3,x2,x4);break;
227                   }
228                 break;
229             }
230 //计算当运算法则为除法时的正确结果,并存入数组
231             jieguo[i]=x1/x2;
232         }
233     }
234 
235     for(k=0;k<a[0];k++)
236     {
237         
238         printf("请输入第%d个答案:",k+1);
239         scanf("%d",&daan[k]);
240 //比较结果是否正确,并计数
241         if(daan[k]==jieguo[k])
242         {
243             printf("正确!\\n");
244                 count1++;    
245         }
246         else
247         {
248             printf("错误!\\n");
249                 count2++;
250         }
251 
252 
253     }
254     printf("\\n正确答案有%d个,",count1);   
255     printf("错误答案有%d个。\\n",count2);
256     printf("------------------------------出题完毕,欢迎再次使用!--------------------------\\n");
257     return 0;
258 }

五、心得体会:

      1、首先看到这个要求时,我首先想到的是在现有的循环中加判断条件,每确定一种运算法则就计算出结果并比较,但是在实现的过程中,我发现这样非常繁琐,而且输出时每出一道题就会要求输出答案,这样页面很不美观。于是我新加了for循环,在所有题目出完后,一起写答案。

      2、我发现在代码编写的过程中,出现的语法问题大大减少,并不像开始的时候那样有很多细小错误,之前出现的错误我也有意识注意。但是还是有两个小问题:使用数组没有提前定义、计算数值的算式位置放错,通过编译也都解决。

六、PSP0级相关日志:

1、项目计划日志

周活动总结表

姓名:胡金辉                                                                    日期:3/19

日期\\任务 听课     编写程序 阅读书本 考研复习  安装软件 日总计  
周日            
周一            
周二            
周三            
周四  300  50  30  90  80  550
周五  200  60  30      290
周六            
周总结  500  110  60  90  80  840

阶段时间和效率                                                                      周数:1

不包括上一周在内的累计时间                                                                

总计                         
平均          
最大          
最小          

 以前各周的累计时间                                                                         

总计 500 110 60 90 80 840
平均 500 110 60 90  80 840 
最大 500 110 60 90 80 840
最小 500  110 60  90  80 840 

2、时间记录日志

学生:胡金辉                                                                     日期:3/19

教师:王建民                                                                      课程:PSP

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/19 08:00 12:00 40 200 听课 课间休息
  14:00 15:50 10  100 听课 课间休息
  16:00 17:30   90 考研复习  
  18:30 20:00 10 80 安装软件 休息
  20:10 21:00   50 编写程序  
  21:00 21:30   30 阅读  
 3/20 08:00 12:00 40  200 听课 课间休息 
  14:30 15:40 10  60 编写程序 休息、问题 
  21:00 21:30   30  阅读   

3、缺陷记录日志

学生:胡金辉                                                               日期:3/19

教员:王建民                                                                程序号:02

日期 编号 类型    引入阶段 排除阶段 修复阶段 修复缺陷
3/19  1  001  设计 编译  20min  
描述:判断语句位置错误
  002  编码  编译 1min   
描述:使用数组之前没有定义
 3/20  3 003  设计 编译  5min   
描述:计算数值的算式位置放错

                                                             结对编程伙伴:李青  http://www.cnblogs.com/liqing1/

工作照:

 

以上是关于四则运算的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中并行化以下代码片段?

20个简洁的 JS 代码片段

获取 badarith,[erlang,'+',[error,0],[],同时使用 Erlang 片段在 TSUNG 中执行算术运算

20个简洁的 JS 代码片段

四则运算

四则运算单元测试