程序要求:

1.题目避免重复

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

3.可以一下控制参数

① 是否有乘除法

② 是否有括号(最多支持十个数参与运算)

③ 数值范围

④加减有无负数

⑤除法有无余数

分析:① 如果是两个数的算式很容易就可以输出,但是多个数就有点儿难住我了,仔细想想可以将一个算式看作为一个数再加上一个符号和一个数就可以输出,但int型和char型无法一起输出,于是我就去网上寻找解决办法,找到了itoa()函数,这个函数可以将int型转为字符型,这样就可以将一个算式作为一个string字符串输出,具体的用法我是在  http://www.cnblogs.com/lidabo/archive/2012/07/10/2584706.html  和http://blog.csdn.net/lwj103862095/article/details/12005105   这个博客上学习的。将整数型转为字符型后加入括号也就容易了许多,我是用这样一个语句加入的:str_num1 = '(' + str_num1 + ')',在字符串str_num的左右添加括号。

② 选择是否添加乘除法,首先建立一个存储符号的数组,如果不添加乘除就随机生成1或2两个数,1代表“+”,2代表“-”,如果添加乘除就随机生成1-4四个数,1代表“+”,2代表“-”,3代表“*”,4代表“÷”

③数值范围的控制:num1 = rand() % (max - min + 1) + min;// 随机生成min-max的整数

④加减有无负数和除法有无余数这两个功能目前还没有实现,我感觉这两个功能的实现如果我一开始用二维数组写这个程序会容易很多,现在我用itoa()函数没有写出来,不过我会继续改进一下,不然我就用二维数组尝试重新写一个。

 #include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <fstream>
#include <string>
using namespace std; //数字转换为字符串
string int_string(int number)
{
int temp = abs(number);//取绝对值
char str[];
_itoa_s(temp, str, ); //运用itoa()函数将int型整数转换为字符串
string str_= str;
return str_;
}
//算式转换为字符串
string group(string str1, string str2, char m) // group:算式组合
{
string Equation; // equation:算式
Equation = str1 + m + str2;
return Equation;
}
//生成运算符
char mark(int opt)
{
int opt1, a;
char symbol[]; // 符号数组
if (opt == )
{
opt1 = ;
}
if (opt == )
{
opt1 = ;
}
a = rand() % opt1+; //随机生成1-2或1-4的数,随opt的值而定,opt意为是否含有乘除法
if (a == ) symbol[] = '+';
if (a == ) symbol[] = '-';
if (a == ) symbol[] = '*';
if (a == ) symbol[] = '÷';
return symbol[];
}
//主函数
void main()
{
int num1, num2, minus, remainder;
int opt, bracket, output, max, min, amount, control, b, c;
string str_num1, str_num2, value; //数字-字符串
cout << "是否需要包含乘除法?1(有),0(没有):" << endl;
cin >> opt; //opt:选择是否含有乘除法
cout << "是否含有括号?1(有),0(没有):" << endl;
cin >> bracket;
cout << "是否需要包含负数1(有),0(没有):" << endl;
cin >> minus;
cout << "题目是否要在文件中输出?1(是),0(不是):" << endl;
cin >> output;
cout << "请输入数字范围:(格式为:最小数 空格 最大数)" << endl;
cin >> max>>min;
cout << "请输入出题数量:" << endl;
cin >> amount;
string equation[]; //定义数组
char symbol;
ofstream fout;
if (opt == )
{
cout << "除法有无余数,1(有),0(无)" << endl;
cin >> remainder;
}
if ( output == )
{
fout.open("output.txt");
fout << amount << "道四则运算题如下:" << endl;
}
else
{
cout << amount << "道四则运算题如下:" << endl;
}
for (int i = ; i<amount; i++) //为输出规定题数
{
srand((int)time(NULL)); //设置时间种子,每次执行种子不同,生成不同的随机数
num1 = rand() % (max - min + ) + min;// 随机生成min-max的整数
num2 = rand() % (max - min + ) + min;// 随机生成min-max的整数
control = rand() % + ; //控制是几个数的运算式,最多支持10个数的运算式
symbol = mark(opt);
if (minus == )
{
if (remainder == )
{
str_num1 = int_string(num1);
str_num2 = int_string(num2);
}
if (remainder == )//??????????
{
str_num1 = int_string(num1);
str_num2 = int_string(num2);
}
}
if (minus == )//??????????????错误!
{
if (remainder == )
{
str_num1 = int_string(num1);
str_num2 = int_string(num2);
}
if (remainder == )//??????????
{
str_num1 = int_string(num1);
str_num2 = int_string(num2);
}
}
if (remainder == )
{
str_num1 = int_string(num1);
str_num2 = int_string(num2);
}
equation[i] = group(str_num1, str_num2, symbol);
if (control >= )
{
for (; control >= ; control--)
{
symbol = mark(opt);
str_num1 = equation[i];
if (bracket == )
{
b = rand() % ; //随机生成0-2的数
if (b == ) //如果b=2,就在字符串str_num1的左右加上括号
{
str_num1 = '(' + str_num1 + ')';
}
}
symbol = mark(opt);
str_num2 = int_string(num2);
b = rand() % ;
if (b == )
{
value = str_num1;
str_num1 = str_num2;
str_num2 = value;
}
equation[i] = group(str_num1, str_num2, symbol);
}
}
//判断是否重复
int repeat = ; //repeat:重复
for (c = ; c<i; c++)
{
if (equation[c] == equation[i])
{
i = i - ;
repeat = ;
break;
}
}
if (repeat != )//若不重复,则输出
{
if (output == )
{
fout << equation[i] << "=" << endl;
}
else
{
cout << equation[i] << "=" << endl;
}
} }
if (output == ) //输出到文件
{
fout.close();
}
}

程序运行截图:

问题(错误)1:num2每次生成的数都一样

错误2:无法生成含乘除法的算式

总结:通过本次编程我发现我还有太多的不足,对于很多编程的基本知识还没有掌握,现在想想以前总是对编程不上心,得过且过,真的很后悔,现在大三我一定积极努力,努力把编程水平提升上去。

项目计划总结:

日期\任务 听课/时 编写程序/时 查阅资料/时 日总计/时
星期一 2 1 0.5 3.5
星期二   2   2
星期三   3 1 4
星期四 2 2   4
星期五   2.5 1 3.5
星期六   5  2 7
星期日        
周总计 4 15.5 4.5

24

时间记录日志:

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/7 14:00 15:50 10 100 听课 软件工程上课
  16:30 17:30   60 编写程序 作业
  21:00 21:30   30 阅读书籍 《构建之法》
3/8 19:00 21:00  20 90 查资料,编写程序 作业
3/9  14:25  16:30  15  110 编写程序  作业
   17:00  18:00    60  查阅资料和阅读构建之法  
   21:00  22::00   60   编写程序  作业
3/10 14:00 15:50  10 100 听课 软件工程上课
  21:20 22:10   50 查资料,编写程序 聊天+作业
3/11 16:20 18:30  10 120 继续编程...  
  19:40 20:30   50 阅读《构建之法》  
  21:00 21:45   45 查阅资料 聊天+上网查阅资料
3/12 9:00 11:40   160 编程 作业
   12:20  15:00    160  调试程序  
   15:00        写博客  

缺陷记录日志:(错误很多,没有专门去记录,以后会注意养成这个习惯的)

日期 编号 引入阶段 排除阶段 修复时间&问题描述
3/7 1 编码 编译  
3/8        
3/9        
3/10-3/11 2 编码 编译  
3/11-3/12 3 编码 编译  
         

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

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

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

  2. 四则运算2+psp0级表格

    四则运算2 一.题目和要求 题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版) 要求: 1.题目避免重复 2.可定制(数量/打印 ...

  3. 四则运算3+psp0

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

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

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

  5. 四则运算2及PSP0设计项目计划

    时间比较紧,我简单写写我的设计思路: 题目在四则运算1的基础上控制产生题目的数量,这个可以用变量控制:打印方式也可选用变量控制,程序的关键是括号的生成.我们可以将整个四则运算式看成()+()的模型,然 ...

  6. 四则运算2及psp0设计

    随机生成运算式,要求: 1.题目避免重复. 2.可定制(数量/打印方式). 3.可以控制一下参数. 要求:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数. 刚开始看到这样一个题目感觉还 ...

  7. 软件工程课后作业——四则运算Ⅲ(C++)

    一.设计思路 题目:可以答题并判断对错,最后显示做对几道题. 在原有的基础上,又拓展了答题模块. 在结构体中添加了answer属性,把输入的答案与正确答案比较,若相等则计数加一. 二.源代码 (1)四 ...

  8. 软件工程随堂小作业——随机四则运算Ⅱ(C++)

    一.设计思路 设计思路已给出,此处不再赘述. 二.源代码 (1)四则运算2.cpp(源文件) // 四则运算2.cpp : Defines the entry point for the consol ...

  9. 软件工程——四则运算3(C#)

    一.设计思想 设计两个窗体,在第一个窗体中选择功能参数,在第二个窗体中显示所出题目. 二.源代码 Form1.cs: using System; using System.Collections.Ge ...

随机推荐

  1. C# 删除指定目录下的所有文件及文件夹

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  2. 大数据学习--day16(集合总体架构--ArrayList--LinkedList)

    集合总体架构--ArrayList--LinkedList Collection接口的实现类用法上都有相似的方法.Map同理. List: 特性 :      1. 有索引     2. 有序     ...

  3. VS2015创建WDK的问题

    在微软官网找了半天.. 搜索window driver kit,好吧.进入一页英文页面.. https://docs.microsoft.com/en-us/windows-hardware/driv ...

  4. Python学习之——Oracle数据库连接

    一.安装Oracle客户端 1.下载对应安装文件,官网地址:http://www.oracle.com/technetwork/database/database-technologies/insta ...

  5. 关于使用READ TABLE语句

    READ tabe 是用来遍历内表,取第一条符合条件的记录. READ TABLE <itab> [INTO <wa>] WITH KEY <key> [BINAR ...

  6. SQL SERVER循环遍历(普通循环和游标循环)

    1.首先需要一个测试表数据Student 2.普通循环 1)循环5次来修改学生表信息 --循环遍历修改记录--declare @i int   set @i=0while @i<5begin   ...

  7. Could not connect to '192.168.80.145' (port 22): Connection failed的解决办法(远程连不上xshell)

    问题状况表现1 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置!!!. 问题状况表现2 这个问题一般是你 的什么配置影响了虚拟机的网卡网关设置. 解决办法 网上的那些解决方案,我都试过,比如. ...

  8. 20155207第二周myod以及课堂测试

    第二周myod以及课堂测试 第二周测试5 题目 1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main ...

  9. 20155306 实验四 Android程序设计

    20155306 实验四 Android程序设计 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3.掌握An ...

  10. idea热部署时 编写Controller会接收不到参数

    因为我是热部署启动服务器后才编写的request和getparameter 所以可能接收不到 重启一下服务器即可