• 二柱子-四则运算2


    一、设计思想

    1、避免重复:输出时,确定了运算符号,两个运算数都相同时,重新随机产生操作数,再循环重新产生式子。
    2、可定制:设计菜单,可选择数目,也可进行下列各项的选择。
    3、是否有乘除法:菜单中选择了有乘除法,则无需修改;无乘除法,则随机产生的运算符号中就去除产生乘除的数字的可能。
    4、是否有括号:如果选择了有括号的,可像运算符号那样,产生1-2随机数,根据随机数产生左右括号。
    5、数值范围:在菜单中可选择是50以内、100以内等的选项,可在产生随机数中确定两个运算数的范围。
    6、加减有无负数:若选择有负数,则无需修改;若选择无负数,则当运算符号为减号时,要判断第一个运算数是否比第二个大,是,则可以,否则,交换两个数。
    7、除法有无余数:可以有余数,则无需修改;要求无余数,则进行除法时,计算结果,若有余数,重新产生,用循环进行。
    8、是否支持分数:若不支持分数,则无需修改;若支持分数在产生运算数时,多加1-2个参数,用来作为分数的分子/分母。
    9、是否支持小数:若不支持小数,则无需修改;若支持小数,则可增加参数,用来最为小数和小数点的确定。

    二、源代码

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

    三、运行结果:

    四、心得体会:

          1、编程过程中,一些基础的内容经常弄错、遗漏,比如输入、函数的定义等,需要练习加以巩固;

          2、开始我想的是将每一个新设功能写一个函数,再用主函数调用,但是真正编写的时候,由于功能之间有交叉,这样变量的引用和调用就出现了问题,最后我将它们都写到主函数中,各个参数都一次声明。这样的优点是编程方便、调用简单,缺点是不够清晰明了,当程序再大一些的时候非常不方便,以后需要找到别的方法去解决这个问题;

          3、我用的语言是C,它的界面不如C#美观、友好,但是编程简单、方便。

    五、PSP0级相关日志

    1、项目计划日志:

    周活动总结表

    姓名:胡金辉                                                           日期:2016/3/11

    日期任务

    听课    

    编写程序

    阅读书本

    考研复习

     

    日总计  

    周日

     

     

     

     

     

     

    周一

     

     

     

     

     

     

    周二

    300

    60

    60

     

     

    420

    周三

    100

    25

    40

    60

     

    225

    周四

    200

    210

    30

     

     

    440

    周五

    200

     30

     

     

     

    230

    周六

     

     

     

     

     

     

    周总结

     800

    325 

    130 

    60 

     

    1315 

    阶段时间和效率                                                                        周数:1

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

    总计

        

        

        

        

        

    平均

     

     

     

     

     

    最大

     

     

     

     

     

    最小

     

     

     

     

     

    以前各周的累计时间                                                                             

    总计

    800 

    325   

    130

    60 

    1315 

    平均

    800    

    325  

    130  

    60    

    1315    

    最大

    800

    325 

    130 

    60 

    1315 

    最小

    800 

    325

    130 

    60

    1315 

    2、时间记录日志:

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

    教师:王建民                                                                      课程: PSP          

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    3/7

    08:00

    12:00

    40

    200

    听课

    课间休息

     

    14:30

    15:30

     

    60

    读书

     

     

    16:10

    18:00

    10

    100

    听课

    课间休息

     

    19:30

    21:00

    30

    60

    编写程序

     

    3/8

    08:00

    09:50

    10

    100

    听课

    课间休息

     

    10:00

    11:10

    10

    60

    考研复习

     

     

    16:10

    16:35

     

    25

    编写程序

     

     

    21:00

    21:40

     

    40

    读书

     

    3/9

    09:00

    09:50

     

    50

    编写程序

     

     

    10:10

    12:00

    10

    100

    听课

    课间休息

     

    14:00

    15:50

    10

    100

    听课

    课间休息

     

    16:10

    19:50

    60

    160

    编写程序

    吃饭

     

    20:30

    21:00

     

    30

    读书

     

    3/10

    08:00

    12:00

    40

    200

    听课

    课间休息

     

    14:30

    15:00 

     

    30

    编写程序

     

     3、缺陷记录日志:

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

    教员:王建民                                                                         程序号:01

    日期

    编号

    类型   

    引入阶段

    排除阶段

    修复阶段

    修复缺陷

    3/7 

    1

     001

     设计

    编译 

    10min

     

    描述:设计程序时调用函数传参错误

     

    002 

    设计 

     编译

    1min 

     

    描述:使用了某一函数没有它的头文件

     3/8

     3

    003 

    编码 

    调试 

    5min 

     

    描述:使用do while循环时结构用错

     3/9

    004 

    编码 

    编译 

    1min

     

    描述: 使用scanf输入时漏掉了“&”

      

     5

     005

    编码 

    编译 

    1min 

     

    描述:使用某一变量没有提前声明      

      

     6

     006

    编码 

    编译 

    2min 

     

    描述:使用数组时 ,整个数组和数组中某一元素弄混,导致出错     

      

     7

     004

    编码 

    编译 

    1min

     

    描述:使用scanf输入时漏掉了“&”      

      3/10

     8

    007 

    编码 

    编译 

    1min

     

    描述:判断条件的等于应该是“==”,而我错用了“=”

     

  • 相关阅读:
    一些大佬博客里的个签
    后缀子串排序
    PAT 1024 Palindromic Number[难]
    dp训练
    字符串最长子串匹配dp矩阵[转载]
    最短路径并查集+Floyd[转载]
    素数牛客网[求大数内所有素数]
    sql server 的规格参数,限制等 (zz)
    sql server varchar(max), NVARCHAR(MAX), VARBINARY(MAX) (zz)
    Oracle Data Types NVARCHAR2 (zz)
  • 原文地址:https://www.cnblogs.com/hujinhui/p/5268212.html
Copyright © 2020-2023  润新知