四则运算2+psp0级表格
四则运算2
一、题目和要求
题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版)
要求:
1.题目避免重复
2.可定制(数量/打印方式)
3.可以控制下列参数:是否有除法,是否有括号,数值范围,加减有无负数,除法有无余数,是否支持分数,是否支持小数,精确到多少位,打印中每行的间隔
二、题目设计思路
根据第一次的程序实现,已经实现了打印数量上的控制,直接确定了打印列数,其他实现基本功能
第一步:避免题目重复;将打印的结果保存,此后每次生成的结果与之前的结果比较。
第二步:实现可定制;通过用户输入数量数和打印的列数,实现可定制,将间隔参数也由用户来输入。参数由用户输入,将参数传递到所需函数。
- 通过变量num控制数量
- 通过变量rol控制列数
- 通过变量line控制间隔
第三步:参数可控;通过用户输入选择控制信息,选择要产生的四则运算的形式。判断参数可以放在一起进行判断
- 由程序提供选择方式,由用户进行选择,通过输入Y/N,来选择程序要提供哪些功能。
- 将所有功能公有的功能单独提出,由其他功能调用
- 将不同的功能分别用不同的函数实现,通过对用户输入的参数的判断,实现不同功能的调用
- 不同的变量对应不同的函数
三、程序源代码
// 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级表格的更多相关文章
- 四则运算三+psp0级表格
一.题目 在四则运算二的基础上,选择一个方向进行拓展,我选择的是增加了答题模块 二.设计思路 1.在上次的基础上,增加了答题模块,每出现一道四则运算题目,便提醒输入结果,如果结果错误,就会提示错误 2 ...
- 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。
一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...
- PSP0级 周活动总结表+时间记录日志+缺陷记录日志 表格模板
一.项目计划总结: 周活动总结表 姓名: 日期: 日期\任务 听课 编写程序 阅读课本 准备考试 日总计 周日 周一 ...
- 用FlexGrid做开发,轻松处理百万级表格数据
表格数据处理是我们项目开发中经常会遇到的设计需求之一,所需处理的数据量也较大,通常是万级.甚至百万级.此时,完全依赖平台自带的表格工具,往往无法加载如此大的数据量,或者加载得很慢影响程序执行. 那么, ...
- 第一个PSP0级
1.计划: 需求描述: 按照图片要求设计添加新课程界面.(0.5分) 在后台数据库中建立相应的表结构存储课程信息.(0.5分) 实现新课程添加的功能. 要求判断任课教师为王建民.刘立嘉.刘丹.王辉.杨 ...
- 第二次程序+PSP0级
第二周,老师接着上次的程序有对四则运算的程序,做出来一些要求,这次要求可以控制乘除法,有无括号,控制输出方式,控制结果有无负数,有无余数. 我在对原先的程序分析了一下,发现我原先的程序可扩展性特别差, ...
- 四则运算3+psp0
题目要求: 1.程序可以判断用户的输入答案是否正确,如果错误,给出正确答案,如果正确,给出提示. 2.程序可以处理四种运算的混合算式. 3.要求两人合作分析,合作编程,单独撰写博客. 团队成员:张绍佳 ...
- 四则运算2+psp0
程序要求: 1.题目避免重复 2.可定制(数量\打印方式) 3.可以一下控制参数 ① 是否有乘除法 ② 是否有括号(最多支持十个数参与运算) ③ 数值范围 ④加减有无负数 ⑤除法有无余数 分析:① 如 ...
- PROJECT | 四则运算UI设计 - PSP表格&需求分析
PSP表格(TP版) 需求分析 [GUI编程语言选择] 考虑到Java编写GUI效率偏低且界面不算特别美观(即使有Windowbuilder插件帮助),所以我们使用控件更多,开发效率更高,具有集成开发 ...
随机推荐
- poj1006_Biorhythms
英语真差劲啊,看题目没看明白,无奈重新开始手抄题目,突然发现一句话 “For each cycle,you will be given the number of days form the begi ...
- word文档中的字号和磅的对应关系
字号 磅 初号 42 小初 36 一号 26 小一 24 二号 22 小二 18 三号 16 小三 15 四号 14 小四 12 五号 10.5 小五 9 六号 7.5 小六 6.5 七号 5.5
- php5.3 连接 sqlserver2005
操作系统:XP php5.3以后,已经不对sqlserver支持连接扩展了,不过微软官方还是对php5.3以后进行了扩展解决方案. 1.确认要连接sqlserver的数据库版本为2005 2.确认ph ...
- 设计模式-适配器模式(Adapter)
简介: 适配器模式在我看来是最无聊的一种模式,因为他根本不是一种新的创意模式,而是一种不得已而为之的模式.就算不学适配器模式,在具体应用场景中也会自然而然的想到这种解决方案. 张三在英国留学时买了个笔 ...
- 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 ...
- PHP XML笔记汇总
一.XML Expat解析器 内建的Expat解析器使在PHP中处理XML文档成为可能. XML用于描述数据,其焦点是数据是什么.XML 文件描述了数据的结构. 在XML中,没有预定义的标签.您必须定 ...
- 三个有用的SQL辅助工具
三个有用的SQL辅助工具 编写人:CC阿爸 2015-1-23 工欲善其事必先利其器,今天在这里,我想与大家一起分享三个有用的SQL辅助工具.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 相信 ...
- MongoDB探索之路(一)——入门
1.MongoDB和传统关系型数据库的比较 2.面向文档的 NoSQL 数据库主要解决的问题不是高性能的并发读写,而是保证海量数据存储的同时,具有良好的查询性能. 3.MongoDB可以作为日志分 ...
- 開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能【VB/C# 雙語法】
開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能[VB/C# 雙語法] 我.....作者都沒拿到書呢! 全台灣最專業的電腦書店 -- 天瓏書局 已經開賣了! 感謝天 ...
- Mysql 简单问题汇总(持续更新)
主从架构相关问题 问题现象:从机连接主机时报错 [ERROR] Slave I/O: error connecting to master 'repl@192.168.0.50:3306' - ret ...