string(7723) "{"docs":[{"id":"158579","text":"\u3010Python\u3011Tkinter\u56fe\u5f62\u754c\u9762\u8bbe\u8ba1\uff08GUI\uff09","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"HGNET","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183196","_id":"158579"},{"id":"158620","text":"python\u4e4bgui-tkinter\u53ef\u89c6\u5316\u7f16\u8f91\u754c\u9762 \u81ea\u52a8\u751f\u6210\u4ee3\u7801","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"darkspr","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183190","_id":"158620"},{"id":"158603","text":"python3.6 +tkinter GUI\u7f16\u7a0b \u5b9e\u73b0\u754c\u9762\u5316\u7684\u6587\u672c\u5904\u7406\u5de5\u5177","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"chenyuebai","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183187","_id":"158603"},{"id":"27850","text":"Python GUI\u4e4btkinter\u7a97\u53e3\u89c6\u7a97\u6559\u7a0b\u5927\u96c6\u5408\uff08\u770b\u8fd9\u7bc7\u5c31\u591f\u4e86\uff09 - \u6d2a\u536b","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"shwee","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183186","_id":"27850"},{"id":"158605","text":"Python GUI\u7f16\u7a0b(Tkinter) windows\u754c\u9762\u5f00\u53d1","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"itfat","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183184","_id":"158605"},{"id":"28228","text":"tkinter python\uff08\u56fe\u5f62\u5f00\u53d1\u754c\u9762\uff09","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"yudanqu","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183159","_id":"28228"},{"id":"158613","text":"Tkinter\u56fe\u5f62\u754c\u9762\u8bbe\u8ba1\uff08GUI\uff09","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"pywjh","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183158","_id":"158613"},{"id":"341361","text":"\u91cf\u5316\u5206\u6790\u83b7\u53d6\u6570\u636e\u76843\u79cd\u59ff\u52bf\uff08\u538b\u7bb1\u5e95\u7684\u795e\u5668Tushare\uff09","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"casual","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183069","_id":"341361"},{"id":"238879","text":"\u9762\u5411\u4ea4\u6613\u7684\u65e5\u5185\u9ad8\u9891\u91cf\u5316\u4ea4\u6613\u5e73\u53f0\u7b14\u8bb0","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"TaiYangXiManYouZhe","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183067","_id":"238879"},{"id":"238890","text":"2021 \u6700\u65b0\u91cf\u5316\u6295\u8d44\u4ea4\u6613\u8d44\u6e90\u6c47\u603b","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n color: [\r\n ","username":"xgqfrms","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1641183063","_id":"238890"}],"count":535118}" array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(6) "158579" ["text"]=> string(46) "【Python】Tkinter图形界面设计(GUI)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(5) "HGNET" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183196" ["_id"]=> string(6) "158579" } [1]=> array(10) { ["id"]=> string(6) "158620" ["text"]=> string(60) "python之gui-tkinter可视化编辑界面 自动生成代码" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "darkspr" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183190" ["_id"]=> string(6) "158620" } [2]=> array(10) { ["id"]=> string(6) "158603" ["text"]=> string(66) "python3.6 +tkinter GUI编程 实现界面化的文本处理工具" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(10) "chenyuebai" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183187" ["_id"]=> string(6) "158603" } [3]=> array(10) { ["id"]=> string(5) "27850" ["text"]=> string(80) "Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) - 洪卫" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(5) "shwee" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183186" ["_id"]=> string(5) "27850" } [4]=> array(10) { ["id"]=> string(6) "158605" ["text"]=> string(45) "Python GUI编程(Tkinter) windows界面开发" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(5) "itfat" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183184" ["_id"]=> string(6) "158605" } [5]=> array(10) { ["id"]=> string(5) "28228" ["text"]=> string(39) "tkinter python(图形开发界面)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "yudanqu" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183159" ["_id"]=> string(5) "28228" } [6]=> array(10) { ["id"]=> string(6) "158613" ["text"]=> string(34) "Tkinter图形界面设计(GUI)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(5) "pywjh" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183158" ["_id"]=> string(6) "158613" } [7]=> array(10) { ["id"]=> string(6) "341361" ["text"]=> string(68) "量化分析获取数据的3种姿势(压箱底的神器Tushare)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(6) "casual" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183069" ["_id"]=> string(6) "341361" } [8]=> array(10) { ["id"]=> string(6) "238879" ["text"]=> string(51) "面向交易的日内高频量化交易平台笔记" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(18) "TaiYangXiManYouZhe" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183067" ["_id"]=> string(6) "238879" } [9]=> array(10) { ["id"]=> string(6) "238890" ["text"]=> string(41) "2021 最新量化投资交易资源汇总" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "xgqfrms" ["tagsname"]=> string(0) "" ["tagsid"]=> string(0) "" ["catesname"]=> string(0) "" ["catesid"]=> string(0) "" ["createtime"]=> string(10) "1641183063" ["_id"]=> string(6) "238890" } } ["count"]=> int(535118) } 软件工程第二次作业——自动生成小学四则运算题目程序 - 爱码网
Franty

@

作业说明

  1. 发布一篇随笔,使用markdown语法进行编辑
  2. 文字准确,样式清晰
  3. 请在本次及之后的每次作业随笔的最前面加上以下内容
  4. 博客班级 填写这份作业所在的博客班级的链接
  5. 作业要求 填写这份作业要求的链接
  6. 作业目标 填写这份作业要达到哪些目标

代码如下:

这个作业属于哪个课程 班级链接
这个作业要求在哪里 班级链接
这个作业的目标 文中问题分析部分说明
学号 3180405308

题目要求

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

2)程序要求能处理用户的输入,判断对错,累积分数

3)程序支持可以由用户自行选择加、减、乘、除运算

4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

代码分析

结构体

//含有一个二元算数式的三个值以及一个标志符的结构体
typedef struct{
    float x = 0,y = 0;    //x,y为给定的随机数
    float r = 0;  //r为算数式结果
}Arithmetic;

选择函数

//根据用户选择识别将要进行的四则运算类型
Arithmetic choose(Arithmetic n){
    int choose = 0;
    cout<<"请选择您需要进行的四则运算类型\n"<<"1.加法\t2.减法\t3.乘法\t4.除法\n";
    cin>>choose;
    switch (choose) {
        case 1:
            n = Addition();
            break;
        case 2:
            n = Subtraction();
            break;
        case 3:
            n = Multiplication();
            break;
        case 4:
            n = Division();
            break;
            
        default:
            break;
    }
    
    return n;
}

转译用户输入结果

float conversion(string input){
    bool flag = false, sign = false;
    //flag标记用户输入中是否存在/号,有/号则true否则false
    //sign标记用户输入是否为负数,是负数则true否则false
    float a = 0, b = 0, result = 0;
    for (int i = 0; i<input.length(); i++) {
        if (input[i] != '/' && input[i] != '-') {
            int num = input[i]-'0'; //将char型转换为int型
            if (!flag) {    //若果flag为false,则说明还未遇到/号
                a *= 10;    //a记录/号前的数值
                a += num;
            } else {
                b *= 10;    //b记录/号后的数值
                b += num;
            }
        } else if (input[i] == '/'){
            flag = true;
        } else {
            sign = true;
        }
    }
    
    if (flag && sign) { //既有/号,又是负值
        result = -a/b;
    } else if (flag && !sign){  //有/号,但为正值
        result = a/b;
    } else if (!flag && sign){  //没有有/号,但为负值
        result = -a;
    } else {    //没有有/号,且为正值
        result = a;
    }
    return result;
}

判断对错函数

bool judge(Arithmetic n){
    bool flag = false;  //flag用于记录用户输入答案是否正确,正确return true,否则return false
    string input;
    cin>>input;
    if (n.r == conversion(input))
        flag = true;
    
    return flag;
}

Addition加法


Arithmetic Addition(){
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    if (rand()%2 == 0) {//若为0则进行整数四则运算,若为1则进行真分数的四则运算
        n.x = rand()%size+1;
        n.y = rand()%size+1;
        n.r = n.x + n.y;
        printf("%.0f + %.0f = ?\n",n.x,n.y);
    } else {
        float a,b,c,d;
        a = rand()%size+1;
        b = rand()%size+1;
        c = rand()%size+1;
        d = rand()%size+1;
        if (a<b) {  //需要保证数值是真分数
            n.x = a/b;
        } else if (a==b){   //分子分母如果相同的话直接赋值为1
            n.x = 1;
        }else {     //需要保证数值是真分数
            n.x = b/a;
        }
        if (c<d) {  //需要保证数值是真分数
            n.y = c/d;
        } else if (c==d){   //分子分母如果相同的话直接赋值为1
            n.y = 1;
        }else {     //需要保证数值是真分数
            n.y = d/c;
        }
        n.r = n.x + n.y;
        
        if (n.r==0) {   //结果为0说明两个真分数都是1/1
            printf("%.0f + %.0f = ?\n",n.x,n.y);
        } else if (n.x==1){ //仅有一个真分数,一个1/1
            printf("%.0f + %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
        } else if (n.y==1){
            printf("%.0f/%.0f + %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
        } else {        //除去其他可能,仅剩下两个数都是真分数的情况
            printf("%.0f/%.0f + %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
        }
    }
    
    return n;
}

Subtraction减法

Arithmetic Subtraction(){
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    if (rand()%2 == 0) {//若为偶数则进行整数四则运算,若为奇数则进行真分数的四则运算
        n.x = rand()%size+1;
        n.y = rand()%size+1;
        n.r = n.x - n.y;
        printf("%.0f - %.0f = ?\n",n.x,n.y);
    } else {
        float a,b,c,d;
        a = rand()%size+1;
        b = rand()%size+1;
        c = rand()%size+1;
        d = rand()%size+1;
        if (a<b) {
            n.x = a/b;
        } else if (a==b){
            n.x = 1;
        }else {
            n.x = b/a;
        }
        if (c<d) {
            n.y = c/d;
        } else if (c==d){
            n.y = 1;
        }else {
            n.y = d/c;
        }
        n.r = n.x - n.y;
        
        if (n.r==0) {
            printf("%.0f - %.0f = ?\n",n.x,n.y);
        } else if (n.x==1){
            printf("%.0f - %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
        } else if (n.y==1){
            printf("%.0f/%.0f - %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
        } else {
            printf("%.0f/%.0f - %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
        }
    }
    
    return n;
}

Multiplication乘法

Arithmetic Multiplication(){
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    if (rand()%2 == 0) {//若为偶数则进行整数四则运算,若为奇数则进行真分数的四则运算
        n.x= rand()%size+1;
        n.y= rand()%size+1;
        n.r = n.x * n.y;
        printf("%.0f * %.0f = ?\n",n.x,n.y);
    } else {
        float a,b,c,d;
        a = rand()%size+1;
        b = rand()%size+1;
        c = rand()%size+1;
        d = rand()%size+1;
        if (a<b) {
            n.x = a/b;
        } else if (a==b){
            n.x = 1;
        }else {
            n.x = b/a;
        }
        if (c<d) {
            n.y = c/d;
        } else if (c==d){
            n.y = 1;
        }else {
            n.y = d/c;
        }
        n.r = n.x * n.y;
        
        if (n.r==0) {
            printf("%.0f * %.0f = ?\n",n.x,n.y);
        } else if (n.x==1){
            printf("%.0f * %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
        } else if (n.y==1){
            printf("%.0f/%.0f * %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
        } else {
            printf("%.0f/%.0f * %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
        }
    }
    
    return n;
}

Division除法

Arithmetic Division(){  //除法不需要考虑两个整数的,没有意义,直接两个真分数的除法
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    float a,b,c,d;
    a = rand()%size+1;
    b = rand()%size+1;
    c = rand()%size+1;
    d = rand()%size+1;
    if (a<b) {
        n.x = a/b;
    } else if (a==b){
        n.x = 1;
    }else {
        n.x = b/a;
    }
    if (c<d) {
        n.y = c/d;
    } else if (c==d){
        n.y = 1;
    }else {
        n.y = d/c;
    }
    n.r = n.x / n.y;
    
    if (n.r==0) {
        printf("%.0f / %.0f = ?\n",n.x,n.y);
    } else if (n.x==1){
        printf("%.0f / %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
    } else if (n.y==1){
        printf("%.0f/%.0f / %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
    } else {
        printf("%.0f/%.0f / %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
    }
    
    return n;
}

main函数

int main(int argc, const char * argv[]) {
    int score = 0, cnt = 0;
    
    printf("请设置题目数量\n");	//此处用于测试,源码部分,这段内容注释掉
    scanf("%d",&cnt);

//    if (string(argv[1])=="-n") {      //在terminals或者command中运行的时候,参数顺序存放在argv数组中
//        string c = argv[2];
//        cnt = stoi(c);
//    }
    
    for (int i = 0; i<cnt; i++) {
        Arithmetic t;
        t = choose(t);
        if (judge(t) == true) {
            score+=10;
            cout<<"恭喜您回答正确!\n";
        } else {
            cout<<"很抱歉您的答案不正确,再想想哦~\n";
        }
    }
    printf("满分为:%d  您的得分为:%d分\n",cnt*10,score);
    
    return 0;
}

个人小结

  1. 问题分析:

  2. 问题分析:

  3. 问题分析:

  4. 问题分析:

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 5 3
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 5 5
Development 开发 300 300
Analysis 需求分析(包括学习新技术) 15 45
Design Spec 生成设计文档 5 20
Design Review 设计复审 5 5
Coding Standard 代码规范 3 3
Design 具体设计 10 12
Coding 具体编码 200 200
Code Review 代码复审 10 20
Test 测试(自我测试,修改代码,提交修改) 10 60
Reporting 报告 5 5
Test Report 测试报告 5 5
Size Measurement 计算工作量 20 30
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 20

源码

//
//  main.cpp
//  四则运算生成
//
//  Created by Chen on 2020/11/2.
//  Copyright © 2020 xxc. All rights reserved.
//

#include <iostream>
#include <string.h>
#define size 10
using namespace std;

//含有一个二元算数式的三个值
typedef struct{
    float x = 0,y = 0;    //x,y为给定的随机数
    float r = 0;  //r为算数式结果
}Arithmetic;

Arithmetic choose(Arithmetic n);//选择函数,根据用户选择 识别将要进行的四则运算类型
float conversion(string input);//用户输入转换
bool judge(Arithmetic n);//结果判断
Arithmetic Addition();//加法运算
Arithmetic Subtraction();//减法运算
Arithmetic Multiplication();//乘法运算
Arithmetic Division();//除法运算


int main(int argc, const char * argv[]) {
    int score = 0, cnt = 0;
    
//    printf("请设置题目数量\n");
//    scanf("%d",&cnt);

   if (string(argv[1])=="-n") {      //在terminals或者command中运行的时候,参数顺序存放在argv数组中
        string c = argv[2];
        cnt = stoi(c);
	}
    
    for (int i = 0; i<cnt; i++) {
        Arithmetic t;
        t = choose(t);
        if (judge(t) == true) {
            score+=10;
            cout<<"恭喜您回答正确!\n";
        } else {
            cout<<"很抱歉您的答案不正确,再想想哦~\n";
        }
    }
    printf("满分为:%d  您的得分为:%d分\n",cnt*10,score);
    
    return 0;
}

//函数
//选择函数,根据用户选择识别将要进行的四则运算类型
Arithmetic choose(Arithmetic n){
    int choose = 0;
    cout<<"请选择您需要进行的四则运算类型\n"<<"1.加法\t2.减法\t3.乘法\t4.除法\n";
    cin>>choose;
    switch (choose) {
        case 1:
            n = Addition();
            break;
        case 2:
            n = Subtraction();
            break;
        case 3:
            n = Multiplication();
            break;
        case 4:
            n = Division();
            break;
            
        default:
            break;
    }
    
    return n;
}

//转译用户输入结果
float conversion(string input){
    bool flag = false, sign = false;
    //flag标记用户输入中是否存在/号,有/号则true否则false
    //sign标记用户输入是否为负数,是负数则true否则false
    float a = 0, b = 0, result = 0;
    for (int i = 0; i<input.length(); i++) {
        if (input[i] != '/' && input[i] != '-') {
            int num = input[i]-'0'; //将char型转换为int型
            if (!flag) {    //若果flag为false,则说明还未遇到/号
                a *= 10;    //a记录/号前的数值
                a += num;
            } else {
                b *= 10;    //b记录/号后的数值
                b += num;
            }
        } else if (input[i] == '/'){
            flag = true;
        } else {
            sign = true;
        }
    }
    
    if (flag && sign) { //既有/号,又是负值
        result = -a/b;
    } else if (flag && !sign){  //有/号,但为正值
        result = a/b;
    } else if (!flag && sign){  //没有有/号,但为负值
        result = -a;
    } else {    //没有有/号,且为正值
        result = a;
    }
    return result;
}

//判断对错函数
bool judge(Arithmetic n){
    bool flag = false;  //flag用于记录用户输入答案是否正确,正确return true,否则return false
    string input;
    cin>>input;
    if (n.r == conversion(input))
        flag = true;
    
    return flag;
}

//Addition加法
Arithmetic Addition(){
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    if (rand()%2 == 0) {//若为0则进行整数四则运算,若为1则进行真分数的四则运算
        n.x = rand()%size+1;
        n.y = rand()%size+1;
        n.r = n.x + n.y;
        printf("%.0f + %.0f = ?\n",n.x,n.y);
    } else {
        float a,b,c,d;
        a = rand()%size+1;
        b = rand()%size+1;
        c = rand()%size+1;
        d = rand()%size+1;
        if (a<b) {  //需要保证数值是真分数
            n.x = a/b;
        } else if (a==b){   //分子分母如果相同的话直接赋值为1
            n.x = 1;
        }else {     //需要保证数值是真分数
            n.x = b/a;
        }
        if (c<d) {  //需要保证数值是真分数
            n.y = c/d;
        } else if (c==d){   //分子分母如果相同的话直接赋值为1
            n.y = 1;
        }else {     //需要保证数值是真分数
            n.y = d/c;
        }
        n.r = n.x + n.y;
        
        if (n.r==0) {   //结果为0说明两个真分数都是1/1
            printf("%.0f + %.0f = ?\n",n.x,n.y);
        } else if (n.x==1){ //仅有一个真分数,一个1/1
            printf("%.0f + %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
        } else if (n.y==1){
            printf("%.0f/%.0f + %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
        } else {        //除去其他可能,仅剩下两个数都是真分数的情况
            printf("%.0f/%.0f + %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
        }
    }
    
    return n;
}

//Subtraction减法
Arithmetic Subtraction(){
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    if (rand()%2 == 0) {//若为偶数则进行整数四则运算,若为奇数则进行真分数的四则运算
        n.x = rand()%size+1;
        n.y = rand()%size+1;
        n.r = n.x - n.y;
        printf("%.0f - %.0f = ?\n",n.x,n.y);
    } else {
        float a,b,c,d;
        a = rand()%size+1;
        b = rand()%size+1;
        c = rand()%size+1;
        d = rand()%size+1;
        if (a<b) {
            n.x = a/b;
        } else if (a==b){
            n.x = 1;
        }else {
            n.x = b/a;
        }
        if (c<d) {
            n.y = c/d;
        } else if (c==d){
            n.y = 1;
        }else {
            n.y = d/c;
        }
        n.r = n.x - n.y;
        
        if (n.r==0) {
            printf("%.0f - %.0f = ?\n",n.x,n.y);
        } else if (n.x==1){
            printf("%.0f - %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
        } else if (n.y==1){
            printf("%.0f/%.0f - %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
        } else {
            printf("%.0f/%.0f - %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
        }
    }
    
    return n;
}

//Multiplication乘法
Arithmetic Multiplication(){
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    if (rand()%2 == 0) {//若为偶数则进行整数四则运算,若为奇数则进行真分数的四则运算
        n.x= rand()%size+1;
        n.y= rand()%size+1;
        n.r = n.x * n.y;
        printf("%.0f * %.0f = ?\n",n.x,n.y);
    } else {
        float a,b,c,d;
        a = rand()%size+1;
        b = rand()%size+1;
        c = rand()%size+1;
        d = rand()%size+1;
        if (a<b) {
            n.x = a/b;
        } else if (a==b){
            n.x = 1;
        }else {
            n.x = b/a;
        }
        if (c<d) {
            n.y = c/d;
        } else if (c==d){
            n.y = 1;
        }else {
            n.y = d/c;
        }
        n.r = n.x * n.y;
        
        if (n.r==0) {
            printf("%.0f * %.0f = ?\n",n.x,n.y);
        } else if (n.x==1){
            printf("%.0f * %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
        } else if (n.y==1){
            printf("%.0f/%.0f * %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
        } else {
            printf("%.0f/%.0f * %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
        }
    }
    
    return n;
}

//Division除法
Arithmetic Division(){  //除法不需要考虑两个整数的,没有意义,直接两个真分数的除法
    Arithmetic n;
    srand((unsigned)time(NULL));
    
    float a,b,c,d;
    a = rand()%size+1;
    b = rand()%size+1;
    c = rand()%size+1;
    d = rand()%size+1;
    if (a<b) {
        n.x = a/b;
    } else if (a==b){
        n.x = 1;
    }else {
        n.x = b/a;
    }
    if (c<d) {
        n.y = c/d;
    } else if (c==d){
        n.y = 1;
    }else {
        n.y = d/c;
    }
    n.r = n.x / n.y;
    
    if (n.r==0) {
        printf("%.0f / %.0f = ?\n",n.x,n.y);
    } else if (n.x==1){
        printf("%.0f / %.0f/%.0f = ?\n",n.x,c<d?c:d,c>d?c:d);
    } else if (n.y==1){
        printf("%.0f/%.0f / %.0f = ?\n",a<b?a:b,a>b?a:b,n.y);
    } else {
        printf("%.0f/%.0f / %.0f/%.0f = ?\n",a<b?a:b,a>b?a:b,c<d?c:d,c>d?c:d);
    }
    
    return n;
}

相关文章:

  • 2021-10-18
  • 2018-03-31
  • 2020-04-14
  • 2021-09-21
  • 2018-03-10
  • 2021-10-16
  • 2021-10-10
猜你喜欢
  • 2021-08-29
  • 2021-10-07
  • 2020-01-05
  • 2021-08-27
  • 2018-03-22
  • 2021-10-03
相关资源
相似解决方案