四则运算2

一、题目和要求

  题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版)

  要求:

  1.题目避免重复

  2.可定制(数量/打印方式)

  3.可以控制下列参数:是否有除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数,是否支持小数,精确到多少位,打印中每行的间隔

二、题目设计思路

  

  根据第一次的程序实现,已经实现了打印数量上的控制,直接确定了打印列数,其他实现基本功能

  第一步:避免题目重复;将打印的结果保存,此后每次生成的结果与之前的结果比较。

  第二步:实现可定制;通过用户输入数量数和打印的列数,实现可定制,将间隔参数也由用户来输入。参数由用户输入,将参数传递到所需函数。

    1.   通过变量num控制数量
    2.   通过变量rol控制列数
    3.   通过变量line控制间隔

  第三步:参数可控;通过用户输入选择控制信息,选择要产生的四则运算的形式。判断参数可以放在一起进行判断

  1. 由程序提供选择方式,由用户进行选择,通过输入Y/N,来选择程序要提供哪些功能。
  2. 将所有功能公有的功能单独提出,由其他功能调用
  3. 将不同的功能分别用不同的函数实现,通过对用户输入的参数的判断,实现不同功能的调用
  4. 不同的变量对应不同的函数

三、程序源代码

 // 1_1.cpp : 定义控制台应用程序的入口点。
 //
 /*四则运算二*/

 #include "stdafx.h"
 #include "iostream"
 #include "stdlib.h"
 #include "time.h"
 #include "iomanip"
 #include "String"
 using namespace std;

 /*加减法定义*/
 void add(string judge,int min,int max)
 {
     /*定义a,b,c分别表示产生的随机数和运算符*/
     int a,b,c;
     a=(rand() % (max-min+))+ min;                        //随机生成范围内的整数
     b=(rand() % (max-min+))+ min;
     c=rand()%;
     /*设置右对齐*/
     cout.flags(ios::right);
     if(judge=="Y"||judge=="y")                          //允许负数
     {
         switch(c)
         {
         :
             cout<<setw()<<a<<'+'<<b<<'=';
             break;
         :
             cout<<setw()<<a<<'-'<<b<<'=';
             break;
         }
     }
     else                                //不允许负数
     {
         switch(c)
         {
         :
             cout<<setw()<<a<<'+'<<b<<'=';
             break;
         :
             if(a>=b)
                 cout<<setw()<<a<<'-'<<b<<'=';
             else
                 cout<<setw()<<b<<'-'<<a<<'=';
             break;
         }
     }
 }
 /*四则运算定义*/
 void addmult(string judge1,string judge2,int min,int max)
 {
     int a,b,c;
     a=(rand() % (max-min+))+ min;                        //随机生成范围内的整数
     b=(rand() % (max-min+))+ min;
     c=rand()%;
     /*设置右对齐*/
     cout.flags(ios::right);
     if((judge1=="Y"||judge1=="y"))                            //允许假分数
     {
         switch(c)                                            //随机产生运算符
         {
         :
             cout<<setw()<<a<<'+'<<b<<'=';
             break;
         :
             if(judge2=="Y"||judge2=="y")                    //允许负数结果出现
             {
                 cout<<setw()<<a<<'-'<<b<<'=';
             }
             else
             {
                 if(a>=b)
                      cout<<setw()<<a<<'-'<<b<<'=';
                 else
                     cout<<setw()<<b<<'-'<<a<<'=';
             }
             break;
         :
             cout<<setw()<<a<<'*'<<b<<'=';
             break;
         :                                                //判断生成除法的条件,除数不能为零
             &&b==)
                 cout<<setw()<<b<<'/'<<a<<'=';
             &&b!=)
                 cout<<setw()<<a<<'/'<<b<<'=';
             &&b==)
                 cout<<setw()<<a<<<<'=';
             else
                 cout<<setw()<<a<<'/'<<b<<'=';
             break;
         }
     }
     else                                            //不允许假分数出现
     {
         switch(c)
         {
         :
             cout<<setw()<<a<<'+'<<b<<'=';
             break;
         :
             if(judge2=="Y"||judge2=="y")                    //允许负数结果出现
             {
                 cout<<setw()<<a<<'-'<<b<<'=';
             }
             else
             {
                 if(a>=b)
                      cout<<setw()<<a<<'-'<<b<<'=';
                 else
                     cout<<setw()<<b<<'-'<<a<<'=';
             }
             break;
         :
             cout<<setw()<<a<<'*'<<b<<'=';
             break;
         :                             //真分数判断
             )
                 cout<<setw()<<a<<'/'<<b<<'=';
             else
                 cout<<setw()<<b<<'/'<<a<<'=';
             break;
         }
     }
 }
 /*四则运算生成函数*/
 void math(int m,int n)
 {
     int min,max,row,line;
     string judge1,judge2,judge3;                                //judge1判断是否有乘除法,judge2判断是加减是否有负数结果出现,judge3判断真/假分数
     cout<<"请输入您要打印题目的数值范围:"<<endl;
     cout<<endl;
     cout<<"最小数min(>=0):";
     /*判断用户输入的是否是需要的数据*/
     )
         {
             cout<<endl;
             cout<<"输入错误,请重新输入:";
             cin.clear();
             cin.sync();
         }
     cout<<endl;
     cout<<"最大数max(<=1000):";
     ))
         {
             cout<<endl;
             cout<<"输入错误,请重新输入:";
             cin.clear();
             cin.sync();
         }
     cout<<endl;

     cout<<"是否有乘除(Y/N):";
     cin>>judge1;
     while(judge1!="Y"&&judge1!="y"&&judge1!="N"&&judge1!="n")             //输入数据异常判断
     {
         cout<<endl;
         cout<<"输入错误,请重新输入(Y/N):";
         cin>>judge1;
         cout<<endl;
     }
     /*假分数判断*/
     if(judge1=="Y"||judge1=="y")
     {
         cout<<endl;
         cout<<"是否允许假分数(Y/N):";
         cin>>judge3;
         while(judge3!="Y"&&judge3!="y"&&judge3!="N"&&judge3!="n")
         {
             cout<<endl;
             cout<<"输入错误,请重新输入(Y/N):";
             cin>>judge3;
             cout<<endl;
         }
     }
     else
     {
         judge3="N";
     }
     cout<<endl;

     /*负数结果判断*/
     cout<<"加减是否允许结果出现负数(Y/N):";
     cin>>judge2;
     while(judge2!="Y"&&judge2!="y"&&judge2!="N"&&judge2!="n")
     {
         cout<<endl;
         cout<<"输入错误,请重新输入(Y/N):";
         cin>>judge2;
         cout<<endl;
     }
     cout<<endl;

     /*用户选择打印方式和间距*/
     cout<<"请输入您要打印的方式:行间距(>=0):";
     )
         {
             cout<<endl;
             cout<<"输入错误,请重新输入:";
             cin.clear();
             cin.sync();
         }
     cout<<endl;
     cout<<"要打印的列数:";
     )
         {
             cout<<endl;
             cout<<"输入错误,请重新输入(>=1):";
             cin.clear();
             cin.sync();
         }
     cout<<endl;

     ;i<m;i++)
     {
         cout<<<<"套"<<endl;
         cout<<endl;
         ;j<n;j++)
         {
             if(judge1=="Y"||judge1=="y")
             {
                 addmult(judge3,judge2,min,max);                    //有乘除法的四则运算
             }
             else
             {
                 add(judge2,min,max);                            //无乘除法的四则运算
             }
             )%line==)
             {
                 ;r<row+;r++)
                 {
                     cout<<endl;
                 }
             }
             else
             {
                 cout<<"    ";
             }
         }

         cout<<endl;
         cout<<endl;
     }
 }

 /*主函数*/
 int main()
 {
     int num1,num2;
     string s="Y";                                //定义s,判断是否继续
     /*使用srand函数生成预置随机数种子,
     避免每次打开程序生成相同的随机数列*/
     srand((unsigned)time(NULL));

     while(s=="Y"||s=="y")
     {
         cout<<"请输入您要打印题目套数(至少一套):";
         )
         {
             cout<<endl;
             cout<<"输入错误,请重新输入:";
             cin.clear();
             cin.sync();
         }
         cout<<endl;

         cout<<"请输入您要打印题目数量:";
         )
         {
             cout<<endl;
             cout<<"输入错误,请重新输入:";
             cin.clear();
             cin.sync();
         }
         cout<<endl;

         math(num1,num2);
         cout<<"是否继续打印(Y/N):";
         cin>>s;
         cout<<endl;
         while(s!="Y"&&s!="y"&&s!="N"&&s!="n")
         {
             cout<<"输入错误,请重新输入(Y/N):";
             cin>>s;
             cout<<endl;
         }
     }

     ;

 }

四、运行结果截图

五、结果分析与总结
  对于一些细节上的问题处理的不是很好,比如对判断参数的异常处理做的不好,另外做出来的程序不是很符合规范,程序编写过程中,出现了诸如类型不匹配的问题,还有就是参数传递的问题,主要还是因为自己的编程习惯不好,许多地方都被自己忽视了,这是非常需要注意的地方。另外对函数的调用不熟悉,参数和函数名都不能表达出需要的意思。总之毛病多多,需要一点点去改正

psp0级表格:

一、项目计划总结:            
姓名: 张世通         日期:2015年3月14日星期六
        听课 编写程序 阅读课本 准备考试     日总计
周日      30min        30min
周一              
周二  100min  40min          140min
周三    40min  40min        80min
周四              
周五  100min            100min
周六    80min          80min
周总结  200min  160min  70min        430min
以前各周的累计时间          
总计  200  160  70  430    
平均  200  160  70  430    
最大  200  160  70  430    
最小  200  160  70  430    
二、时间记录表:          
学生          张世通                                           日期     2015年3月14日星期六      
教师            王建民                                            课程                  PSP                
日期 开始时间 结束时间 中断时间 净时间 活动 备注
 3.10  08:00  09:50  10min  100min  听课  休息
   14:30  15:10    40  编程  
 3.11  10:30  11:30  10+10min  40min  编程  休息,聊天
   16:30  17:40  20+10min  40min  看书(第二章)  休息,聊天
 3.13  08:00  09:50 10min  100min  上课  休息
 3.14  09:00  10:50  30min  80min  编程  写作业
三、缺陷记录日志:          
学生             张世通                   
日期       2015年3月14日                
教员            王建民                    
程序号            01                         
日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
 3.10  1  1  编码  编译  1min  
 描述:类型错误,定义的判断字符为string字符串,输入的为char类型
 3.11  2  2  编码  调试  5min  
 描述:嵌套中使用while循环,判断参数错误,造成死循环
 3.14  3  3  编码  调试  20min  
 描述:输入数据时int类型参数与非int类型参数的区分出现问题,不友好,未设置异常判断
             
 

例子:在输入打印数量和行数列数控制参数时,输入字符则会进入死循环,未加参数不匹配时的报错提醒

四则运算2+psp0级表格的更多相关文章

  1. 四则运算三+psp0级表格

    一.题目 在四则运算二的基础上,选择一个方向进行拓展,我选择的是增加了答题模块 二.设计思路 1.在上次的基础上,增加了答题模块,每出现一道四则运算题目,便提醒输入结果,如果结果错误,就会提示错误 2 ...

  2. 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。

    一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...

  3. PSP0级 周活动总结表+时间记录日志+缺陷记录日志 表格模板

    一.项目计划总结: 周活动总结表 姓名:               日期: 日期\任务 听课 编写程序 阅读课本 准备考试     日总计 周日               周一           ...

  4. 用FlexGrid做开发,轻松处理百万级表格数据

    表格数据处理是我们项目开发中经常会遇到的设计需求之一,所需处理的数据量也较大,通常是万级.甚至百万级.此时,完全依赖平台自带的表格工具,往往无法加载如此大的数据量,或者加载得很慢影响程序执行. 那么, ...

  5. 第一个PSP0级

    1.计划: 需求描述: 按照图片要求设计添加新课程界面.(0.5分) 在后台数据库中建立相应的表结构存储课程信息.(0.5分) 实现新课程添加的功能. 要求判断任课教师为王建民.刘立嘉.刘丹.王辉.杨 ...

  6. 第二次程序+PSP0级

    第二周,老师接着上次的程序有对四则运算的程序,做出来一些要求,这次要求可以控制乘除法,有无括号,控制输出方式,控制结果有无负数,有无余数. 我在对原先的程序分析了一下,发现我原先的程序可扩展性特别差, ...

  7. 四则运算3+psp0

    题目要求: 1.程序可以判断用户的输入答案是否正确,如果错误,给出正确答案,如果正确,给出提示. 2.程序可以处理四种运算的混合算式. 3.要求两人合作分析,合作编程,单独撰写博客. 团队成员:张绍佳 ...

  8. 四则运算2+psp0

    程序要求: 1.题目避免重复 2.可定制(数量\打印方式) 3.可以一下控制参数 ① 是否有乘除法 ② 是否有括号(最多支持十个数参与运算) ③ 数值范围 ④加减有无负数 ⑤除法有无余数 分析:① 如 ...

  9. PROJECT | 四则运算UI设计 - PSP表格&需求分析

    PSP表格(TP版) 需求分析 [GUI编程语言选择] 考虑到Java编写GUI效率偏低且界面不算特别美观(即使有Windowbuilder插件帮助),所以我们使用控件更多,开发效率更高,具有集成开发 ...

随机推荐

  1. poj1006_Biorhythms

    英语真差劲啊,看题目没看明白,无奈重新开始手抄题目,突然发现一句话 “For each cycle,you will be given the number of days form the begi ...

  2. word文档中的字号和磅的对应关系

    字号 磅 初号 42 小初 36 一号 26 小一 24 二号 22 小二 18 三号 16 小三 15 四号 14 小四 12 五号 10.5 小五 9 六号 7.5 小六 6.5 七号 5.5

  3. php5.3 连接 sqlserver2005

    操作系统:XP php5.3以后,已经不对sqlserver支持连接扩展了,不过微软官方还是对php5.3以后进行了扩展解决方案. 1.确认要连接sqlserver的数据库版本为2005 2.确认ph ...

  4. 设计模式-适配器模式(Adapter)

    简介: 适配器模式在我看来是最无聊的一种模式,因为他根本不是一种新的创意模式,而是一种不得已而为之的模式.就算不学适配器模式,在具体应用场景中也会自然而然的想到这种解决方案. 张三在英国留学时买了个笔 ...

  5. STL使用sort注意的问题

    结构体使用sort算法时,重载operator<(..).如果我们按下面这样写 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  6. PHP XML笔记汇总

    一.XML Expat解析器 内建的Expat解析器使在PHP中处理XML文档成为可能. XML用于描述数据,其焦点是数据是什么.XML 文件描述了数据的结构. 在XML中,没有预定义的标签.您必须定 ...

  7. 三个有用的SQL辅助工具

    三个有用的SQL辅助工具 编写人:CC阿爸 2015-1-23 工欲善其事必先利其器,今天在这里,我想与大家一起分享三个有用的SQL辅助工具.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 相信 ...

  8. MongoDB探索之路(一)——入门

    1.MongoDB和传统关系型数据库的比较  2.面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能.  3.MongoDB可以作为日志分 ...

  9. 開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能【VB/C# 雙語法】

    開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能[VB/C# 雙語法] 我.....作者都沒拿到書呢! 全台灣最專業的電腦書店 -- 天瓏書局 已經開賣了! 感謝天 ...

  10. Mysql 简单问题汇总(持续更新)

    主从架构相关问题 问题现象:从机连接主机时报错 [ERROR] Slave I/O: error connecting to master 'repl@192.168.0.50:3306' - ret ...