四则运算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()函数没有写出来,不过我会继续改进一下,不然我就用二维数组尝试重新写一个。

 

  1 #include <iostream>
  2 #include <time.h>
  3 #include <stdio.h>
  4 #include <stdlib.h>
  5 #include <math.h>
  6 #include <fstream>
  7 #include <string>
  8 using namespace std;
  9 
 10 
 11 //数字转换为字符串
 12 string int_string(int number)
 13 {
 14     int temp = abs(number);//取绝对值
 15     char str[100];
 16     _itoa_s(temp, str, 10); //运用itoa()函数将int型整数转换为字符串 
 17     string str_= str;
 18     return str_;
 19 }
 20 //算式转换为字符串
 21 string group(string str1, string str2, char m)  // group:算式组合
 22 {
 23     string Equation;       // equation:算式
 24     Equation = str1 + m + str2;
 25     return Equation;
 26 }
 27 //生成运算符
 28 char mark(int opt)
 29 {
 30     int opt1, a;
 31     char symbol[1]; // 符号数组
 32     if (opt == 0)
 33     {
 34         opt1 = 2;
 35     }
 36     if (opt == 1)
 37     {
 38         opt1 = 4;
 39     }
 40     a = rand() % opt1+1; //随机生成1-2或1-4的数,随opt的值而定,opt意为是否含有乘除法
 41     if (a == 1) symbol[0] = '+';
 42     if (a == 2) symbol[0] = '-';
 43     if (a == 3) symbol[0] = '*';
 44     if (a == 4) symbol[0] = '÷';
 45     return symbol[0];
 46 }
 47 //主函数
 48 void main()
 49 {
 50     int num1, num2, minus, remainder;
 51     int    opt, bracket, output, max, min, amount, control, b, c;
 52     string str_num1, str_num2, value; //数字-字符串
 53     cout << "是否需要包含乘除法?1(有),0(没有):" << endl;
 54     cin >> opt;    //opt:选择是否含有乘除法
 55     cout << "是否含有括号?1(有),0(没有):" << endl;
 56     cin >> bracket;
 57     cout << "是否需要包含负数1(有),0(没有):" << endl;
 58     cin >> minus;
 59     cout << "题目是否要在文件中输出?1(是),0(不是):" << endl;
 60     cin >> output;
 61     cout << "请输入数字范围:(格式为:最小数 空格 最大数)" << endl;
 62     cin >> max>>min;
 63     cout << "请输入出题数量:" << endl;
 64     cin >> amount;
 65     string equation[100]; //定义数组
 66     char symbol;
 67     ofstream fout;
 68     if (opt == 1)
 69     {
 70         cout << "除法有无余数,1(有),0(无)" << endl;
 71             cin >> remainder;
 72     }
 73     if ( output == 1 )
 74     {
 75         fout.open("output.txt");
 76         fout << amount << "道四则运算题如下:" << endl;
 77     }
 78     else
 79     {
 80         cout << amount << "道四则运算题如下:" << endl;
 81     }
 82     for (int i = 0; i<amount; i++)  //为输出规定题数
 83     {
 84         srand((int)time(NULL));     //设置时间种子,每次执行种子不同,生成不同的随机数
 85         num1 = rand() % (max - min + 1) + min;// 随机生成min-max的整数
 86         num2 = rand() % (max - min + 1) + min;// 随机生成min-max的整数
 87         control = rand() % 9 + 2;  //控制是几个数的运算式,最多支持10个数的运算式
 88         symbol = mark(opt);
 89         if (minus == 0)
 90         {
 91             if (remainder == 0)
 92             {
 93                 str_num1 = int_string(num1);
 94                 str_num2 = int_string(num2);
 95             }
 96             if (remainder == 1)//??????????
 97             {
 98                 str_num1 = int_string(num1);
 99                 str_num2 = int_string(num2);
100             }
101         }
102         if (minus == 1)//??????????????错误!
103         {
104             if (remainder == 0)
105             {
106                 str_num1 = int_string(num1);
107                 str_num2 = int_string(num2);
108             }
109             if (remainder == 1)//??????????
110             {
111                 str_num1 = int_string(num1);
112                 str_num2 = int_string(num2);
113             }
114         }
115         if (remainder == 0)
116         {
117             str_num1 = int_string(num1);
118             str_num2 = int_string(num2);
119         }
120         equation[i] = group(str_num1, str_num2, symbol);
121         if (control >= 2)
122         {
123             for (; control >= 2; control--)
124             {
125                 symbol = mark(opt);
126                 str_num1 = equation[i];
127                 if (bracket == 1)
128                 {
129                     b = rand() % 2; //随机生成0-2的数
130                     if (b == 0)  //如果b=2,就在字符串str_num1的左右加上括号
131                     {
132                         str_num1 = '(' + str_num1 + ')';
133                     }
134                 }
135                 symbol = mark(opt);
136                 str_num2 = int_string(num2);
137                 b = rand() % 2;
138                 if (b == 0)
139                 {
140                     value = str_num1;
141                     str_num1 = str_num2;
142                     str_num2 = value;
143                 }
144                 equation[i] = group(str_num1, str_num2, symbol);
145             }
146         }
147         //判断是否重复
148         int repeat = 0; //repeat:重复 
149         for (c = 0; c<i; c++)
150         {
151             if (equation[c] == equation[i])
152             {
153                 i = i - 1;
154                 repeat = 1;
155                 break;
156             }
157         }
158         if (repeat != 1)//若不重复,则输出 
159         {
160             if (output == 1)
161             {
162                 fout << equation[i] << "=" << endl;
163             }
164             else
165             {
166                 cout << equation[i] << "=" << endl;
167             }
168         }
169 
170     }
171     if (output == 1) //输出到文件
172     {
173         fout.close();
174     }
175 }

 程序运行截图:

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

 

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

 

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

项目计划总结:

日期\任务听课/时编写程序/时查阅资料/时日总计/时
星期一210.53.5
星期二 2 2
星期三 314
星期四22 4
星期五 2.513.5
星期六 5 27
星期日    
周总计415.54.5

24

 时间记录日志:

日期开始时间结束时间中断时间净时间活动备注
3/714:0015:5010100听课软件工程上课
 16:3017:30 60编写程序作业
 21:0021:30 30阅读书籍《构建之法》
3/819:0021:00 2090查资料,编写程序作业
3/9 14:25 16:30 15 110编写程序 作业
  17:00 18:00  60 查阅资料和阅读构建之法 
  21:00 22::00 60  编写程序 作业
3/1014:0015:50 10100听课软件工程上课
 21:2022:10 50查资料,编写程序聊天+作业
3/1116:2018:30 10120继续编程... 
 19:4020:30 50阅读《构建之法》 
 21:0021:45 45查阅资料聊天+上网查阅资料
3/129:0011:40 160编程作业
  12:20 15:00  160 调试程序 
  15:00    写博客 

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

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

转载于:https://www.cnblogs.com/me-tts/p/5268771.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析Kerberos原理,及其应用和管理

文章作者&#xff1a;luxianghao 文章来源&#xff1a;http://www.cnblogs.com/luxianghao/p/5269739.html 转载请注明&#xff0c;谢谢合作。 免责声明&#xff1a;文章内容仅代表个人观点&#xff0c;如有不当&#xff0c;欢迎指正。 --- 一&#xff0c;引言 Kerberos简单来…

asp.net 导出Excel

asp.net 导出Excel 分享一个asp.net 导出假Excel代码。优点&#xff0c;不用借助于任何插件比如&#xff08;NPOI&#xff09;,复制代码&#xff0c;修改grid.DataSource直接导出。 先看导出后的效果图 1 System.Web.UI.WebControls.DataGrid grid new DataGrid();2 …

bzoj 2300 动态维护上凸壳(不支持删除)

新技能GET。 用set保存点&#xff0c;然后只需要找前趋和后继就可以动态维护了。 1 /**************************************************************2 Problem: 23003 User: idy0024 Language: C5 Result: Accepted6 Time:556 ms7 Memory:4824 kb8 …

《Linux内核分析》 第四节 扒开系统调用的三层皮(上)

黄胤凯 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、视频学习 1.系统调用的三层皮&#xff1a;xyz system_call sys_xyz 对应的是API&#xff0c;中断向量对应的中断服务程序&#xff0c;系统调用服务程…

OllyDBG反汇编快速找到程序入口一点分析

出处&#xff1a;http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html 先声明下&#xff1a;这个和脱壳没关系&#xff0c;不是找壳里面的程序入口哦&#xff0c;只是程序本身的入口&#xff0c;个别朋友不要误会哈。其实这个应该是基础&#xff0c;但我经常找…

PHP计划任务之关闭浏览器后仍然继续执行的函数

函数名称&#xff1a;ignore_user_abort 本函数配置或取得使用端连接中断后&#xff0c;PHP 程序是否仍继续执行。默认值为中断连接后就停止执行。在 PHP 配置文件中 (php3.ini/php.ini) 的 ignore_user_abort 选项就是配置处。本功能在 PHP 3.0.7 版之后才开始提供。 官方说明…

记对一个key file crackme的破解

crackme下载地址: http://kssd.pediy.com/tutorial/exercise/section04/chap6-1-4-03.zip ------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------…

Chrome/Chromium HTML5 video 视频播放硬件加速

Chromium站点上有个大致的框图。描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的&#xff1a; 而依据Android Kitkat上的Chromium代码分析&#xff0c;HTML5 video播放硬件加速&#xff0c;终于是使用MediaCodec.java来利用本地…

.net mvc结合微软提供的FormsAuthenticationTicket登陆

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…

JS 操作 radio input(cc问卷管理)

1、选中特定的单选按钮 function showDetail(content){$("input[name^radio]").removeAttr("checked");for(var i0;i<content.length;i){$("#radio"(i1)content.substr(i,1)).attr("checked","checked");} }2、手动添加问…

Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能 在上一篇文章中对Lucene进行了介绍之后 &#xff0c;现在是时候提高它&#xff0c;创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能&#xff08;其他搜索引擎也支持此功能&#xff09;。 这是一个例子&#xff1a; Lucene …

Android-做个性化的进度条

1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时&#xff1a;进度图片逐步显示&#xff0c;背景图片逐…

(笔试题)二进制1的个数相同的距离最小数

题目&#xff1a; 输入&#xff1a;整数A输出&#xff1a;整数B条件&#xff1a;A和B的二进制1的个数相同&#xff0c;且A和B之间的距离|A-B|最小。思路&#xff1a; 题目没有说明整数类型&#xff0c;这里认为是带符号的整数&#xff0c;即区分正负数。 根据题意&#xff0c;A…

hadoop5--mapreduce设计模式

运行结果附图 本节课程主要内容为学习MapReduc设计模式&#xff0c;并编写java程序对日志文件进行处理。 课本上介绍的MapReduce的设计模式主要包含:计数(Counting),分类(Classification),过滤处理(Filtering),排序(Sorting),去重计数(Distinct Counting),相关计数(Cross-Corre…

jqGrid,REST,AJAX和Spring MVC集成

两年多以前&#xff0c;我写了一篇关于两个如何在Struts2中实现优雅的CRUD的文章。 实际上&#xff0c;我必须就该主题写两篇文章&#xff0c;因为该主题如此广泛。 今天&#xff0c;我采用了一套更为流行的&#xff0c;完善的框架和库&#xff0c;采用了更为轻量级的现代方法。…

Java-马士兵设计模式学习笔记-代理模式--动态代理 修改成可以代理任意接口

一、概述 1.目标&#xff1a;把Proxy修改成可以代理任意接口及其任意方法 2.思路&#xff1a; (1)代理任意接口&#xff1a;把接口类型作为参数传给Proxy的newProxyInstance(Class interfze) (2)代理任意方法&#xff1a;用interfze.getMethods()取出所有方法&#xff0c;拼接实…

C语言5-7习题

本题要求实现一个函数&#xff0c;用下列公式求cos(x)的近似值&#xff0c;精确到最后一项的绝对值小于e&#xff1a; #include <stdio.h> #include <math.h>double funcos( double e, double x );int main() { double e, x;scanf("%lf %lf", &…

BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义  任意边小于其余三边之和 换句话说就是  最长边小于其余三边之和 这样的话问题转化为 最长边依次减其余三边的结果是否小于等于0 还有一点是题目出现0边 即最…

习题6-1 分类统计字符个数 (15 分)

本题要求实现一个函数&#xff0c;统计给定字符串中英文字母、空格或回车、数字字符和其他字符的个数。 函数接口定义&#xff1a; void StringCount( char s[] );其中 char s[] 是用户传入的字符串。函数StringCount须在一行内按照 letter 英文字母个数, blank 空格或回车…