四则运算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,一经查实,立即删除!

相关文章

kettle作业中的js如何写日志文件

在kettle作业中JavaScript脚本有时候也扮演非常重要的角色&#xff0c;此时我们希望有一些日志记录。下面是job中JavaScript记录日志的方式。 job的js写日志的方法。 得到日志输出实例 org.pentaho.di.core.logging.LogWriter.getInstance();按照日志的级别输出&#xff1a; pu…

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

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

2014! 的末尾有多少个0

2014&#xff01; 的末尾有多少个0<?xml version"1.0" encoding"UTF-8"?> 假设 末尾有 k 个0&#xff0c;所以 2014&#xff01; x * 10^k ; 10 ^ k &#xff08;2 * 5 &#xff09;^ k 2^k * 5^k, 明显所有数字中因数含有2的数字多于含有5的数…

[转载]一句话插配置文件

http://www.t00ls.net/viewthread.php?tid13901 一句话插入配置文件system.asp没有过滤双引号&#xff0c;插入一句就行。常规插法如下&#xff1a;"%><%eval request("d")%><%但金刀客这篇文件&#xff08;http://www.cqzh.cn/post/328.html&…

android插件化-获取apkplug框架已安装插件-03

上一篇文章成功的将apkplug框架嵌入了应用中而且启动 链接http://www.apkplug.com/blog/?post10 这一篇文章实现怎样获取全部已安装插件 一 获取框架的SystemBundle的上下文BundleContext apkplug框架启动会自己主动创建一个SystemBundle, 它是框架的第一个插件不可停止和卸…

Java实现栈。

定义一个接口MyStack接口&#xff1a; package Stack; public interface MyStack<T> { boolean isEmpty(); int length(); boolean push(T date); T pop();} 数组实现&#xff1a; package Stack; public class ArrayStack<T> implements MyStack<T>{ privat…

转载]SA权限九种上传方法

刚看了一种方法&#xff0c;如果是注入点&#xff0c;利用管中窥豹以二进制的方式上传&#xff0c;上传的时候最好改下名&#xff0c;比如do.exe&#xff0c;上传到目标服务器可以改成do.cmd&#xff0c;等传上去之后用copy 命令改回来。 当然用啊d也可以上传&#xff0c;还有…

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 …

带有Guice的富域模型

贫血域模型是一个非常常见的反模式。 在ORM和DI框架的世界中&#xff0c;我们自然会发现自己拥有一个由ORM管理的“域”&#xff0c;该域包含所有数据且无行为。 通过我们的DI框架有帮助地注入了辅助类&#xff0c;这些辅助类都是行为且没有数据。 在本文中&#xff0c;我将介绍…

php匿名函数小示例

<?php //$fun function($params){ // echo $params; //}; // //$fun(aa);//例一 //在普通函数中定义一个匿名函数 //function printStr(){ // $fun function($something){ // echo $something; // }; // $fun(something); // //} //printStr();//例子…

购书心得

作者&#xff1a;泉哥主页&#xff1a;http://riusksk.blogbus.com富家不用买良田&#xff0c;书中自有千钟粟&#xff1b;安居不用架高堂&#xff0c;书中自有黄金屋&#xff1b;出门莫恨无人随&#xff0c;书中车马多如簇&#xff1b;娶妻莫恨无良媒&#xff0c;书中自有颜如…

MariaDB 条件语句WHERE

MariaDB 条件语句WHEREWHERE Clause Operators Operator Description Equality<> Nonequality! Nonequality< Less than< Less than or equal to > Greater than > Greater than or equal to BETWEEN Between two specified values BETWEEN AND (jlive)[c…

Spring 3.1缓存抽象教程

即将发布的Spring 3.1版本中引入的新功能之一是缓存抽象之一 。 Spring Framework提供了对将缓存透明添加到现有Spring应用程序中的支持。 与事务支持类似&#xff0c;缓存抽象允许一致使用各种缓存解决方案&#xff0c;而对代码的影响最小。 从本质上讲&#xff0c;抽象将缓存…

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

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

如何在Java中获得类似于C的性能

总览 Java有许多可能很慢的领域。 但是&#xff0c;对于每个问题都有解决方案。 许多解决方案/黑客都需要解决Java的保护问题&#xff0c;但是如果您需要低水平的性能&#xff0c;还是可以的。 Java使高级编程变得更简单容易&#xff0c;但代价是使低级编程变得更加困难。 幸…

STARTUPINFO结构

1.结构原型 typedef struct _STARTUPINFO { DWORD cb; LPTSTR lpReserved; LPTSTR lpDesktop; LPTSTR lpTitle; DWORD dwX; DWORD dwY; DWORD dwXSize; DWORD dwYSize; DWORD dwXCountChars; DWORD dwYCountChars; DWORD dwFillAttribute; DWORD dwFlags; WORD w…

Spring声明式事务示例

事务是具有ACID &#xff08;原子的&#xff0c;一致的&#xff0c;隔离的和持久的&#xff09;属性的工作单元。 原子意味着所有更改都发生或什么都没有发生。 如果从一个帐户借钱并贷记到另一个帐户&#xff0c;则交易将确保借记和贷项均已完成或均未完成。 一致表示更改使数…

路径 (Path)–nodejs

本模块包含一套用于处理和转换文件路径的工具集。几乎所有的方法只做字符串变换&#xff0c; 不会调用文件系统检查路径是否有效。 通过 require(path) 来加载此模块。以下是本模块所提供的方法&#xff1a; path.normalize(p) 规范化字符串路径&#xff0c;注意 .. 和 . 部分 …