四则运算2+psp0
程序要求:
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的更多相关文章
- 四则运算三+psp0级表格
一.题目 在四则运算二的基础上,选择一个方向进行拓展,我选择的是增加了答题模块 二.设计思路 1.在上次的基础上,增加了答题模块,每出现一道四则运算题目,便提醒输入结果,如果结果错误,就会提示错误 2 ...
- 四则运算2+psp0级表格
四则运算2 一.题目和要求 题目:写一个能自动生成小学四则运算题目的程序,要求一次输出不少于30道,只能是整数100以内的四则运算(四则运算1升级版) 要求: 1.题目避免重复 2.可定制(数量/打印 ...
- 四则运算3+psp0
题目要求: 1.程序可以判断用户的输入答案是否正确,如果错误,给出正确答案,如果正确,给出提示. 2.程序可以处理四种运算的混合算式. 3.要求两人合作分析,合作编程,单独撰写博客. 团队成员:张绍佳 ...
- 撰写一篇博客要求讲述四则运算2的设计思想,源程序代码、运行结果截图、编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志。
一.撰写一篇博客要求讲述四则运算2的设计思想,源程序代码.运行结果截图.编程总结分析,并按照PSP0级的要求记录开发过程中的时间记录日志. 1.设计思想: ①创建test.jsp建立第一个前端界面,提 ...
- 四则运算2及PSP0设计项目计划
时间比较紧,我简单写写我的设计思路: 题目在四则运算1的基础上控制产生题目的数量,这个可以用变量控制:打印方式也可选用变量控制,程序的关键是括号的生成.我们可以将整个四则运算式看成()+()的模型,然 ...
- 四则运算2及psp0设计
随机生成运算式,要求: 1.题目避免重复. 2.可定制(数量/打印方式). 3.可以控制一下参数. 要求:是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数. 刚开始看到这样一个题目感觉还 ...
- 软件工程课后作业——四则运算Ⅲ(C++)
一.设计思路 题目:可以答题并判断对错,最后显示做对几道题. 在原有的基础上,又拓展了答题模块. 在结构体中添加了answer属性,把输入的答案与正确答案比较,若相等则计数加一. 二.源代码 (1)四 ...
- 软件工程随堂小作业——随机四则运算Ⅱ(C++)
一.设计思路 设计思路已给出,此处不再赘述. 二.源代码 (1)四则运算2.cpp(源文件) // 四则运算2.cpp : Defines the entry point for the consol ...
- 软件工程——四则运算3(C#)
一.设计思想 设计两个窗体,在第一个窗体中选择功能参数,在第二个窗体中显示所出题目. 二.源代码 Form1.cs: using System; using System.Collections.Ge ...
随机推荐
- tp框架如何处理mysql先排序在分组
$giModel = M('GroupIntegral'); $gi_table = $giModel->order('id desc')->limit('999')->buildS ...
- c++读取ini的Section节名
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include "iostream&q ...
- 嵌入式C语言自我修养 12:有一种宏,叫可变参数宏
12.1 什么是可变参数宏 在上面的教程中,我们学会了变参函数的定义和使用,基本套路就是使用 va_list.va_start.va_end 等宏,去解析那些可变参数列表我们找到这些参数的存储地址后, ...
- CentOS 7.2搭建xl2tp服务器
## 1.下载xl2tpd.tar.gz源码包 ```wget http://pkgs.fedoraproject.org/repo/pkgs/xl2tpd/xl2tpd-1.3.8.tar.gz/d ...
- golang channel 使用总结
原文地址 不同于传统的多线程并发模型使用共享内存来实现线程间通信的方式,golang 的哲学是通过 channel 进行协程(goroutine)之间的通信来实现数据共享: Do not commun ...
- go字符串转换
package main import ( "fmt" "strconv" ) /* 常用总结 1.str 转 int a, _ := strconv.Atoi ...
- c++拆分字符,不拆开中文
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <string.h&g ...
- Java六大设计原则
类的设计原则 依赖倒置原则-Dependency Inversion Principle (DIP) 里氏替换原则-Liskov Substitution Principle (LSP) 接口 ...
- 20155210潘滢昊 Java第二次试验
20155210潘滢昊 Java第二次试验 实验内容 学会JunitTest的使用 实验代码 MyUtilTest代码: import org.junit.*; import junit.framew ...
- 实验三 敏捷开发与XP实践-1
实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实 ...