四则运算实验报告

实验课程:程序设计与数据结构
实验题目:结对编程-四则运算
实验日期:2017.5.12
实验成员:20162309邢天岳(结对同学20162313苑洪铭)
实验内容:编译一个程序,使其:
1. 自动生成小学四则运算题目(加、减、乘、除)
2. 持多运算符(比如生成包含100个运算符的题目)
3. 支持真分数
4. 统计正确率
5. 支持整数
指导老师:娄老师、谢老师。

实验设计思路:
对于四则运算的程序,首先要想到的是使用if、else语句,考虑到在实验要求中需要支持真分数,则需要分类进行编译。对于算式的计算,需要应用到栈的方法,对教材第14章的理解需要进行再次巩固。在如何计算出值和表达式方面,通过参考博客,需要学习逆波兰式算法,得出计算结果,由于需要判断的语句较多,则需要进行多次输入新的变量。
1066526-20170513161644894-1835860467.png

在设计整个实验的过程中,首先需要完成的是伪代码的编写,由于代码量比较大,在编译过程中有一定的困难,新输入的变量和调用的方法都相对较多,十分容易产生混淆,同时本次实验的代码的层次十分多,环节较为复杂,在编译过程中出现逻辑错误的可能性很高,需要进行多次编写和修改。在几个实验要求中,支持真分数运算是比较困难的一个部分,首先要确定输入值是否为真分数,这里就有了一个比较的过程。
1066526-20170513202819832-1426055335.png
1066526-20170513205228644-962317538.png
在判断完之后将进行计算,并在最后需要加上返回语句,输出结果,同时由于一个真分数的分母不能为0,在编写过程中需要加上额外的判断语句。
1066526-20170513205651222-1985078169.png

在完成了这两个难点之后,判断答案并进行记录,统计正确率是总结整个代码的过程,对于答题情况的统计,同样要通过变量进行统计。
1066526-20170513225255879-268622830.png

通过基本实验思路框架,可以较为系统地将代码编写完成,并完成运行。
1066526-20170513230710394-2050033706.png

实验过程中所遇到的困难:
1. 多运算符代码编写所需要用到的知识环节较为陌生,在编译过程中语法多次出现错误。
2. 在第一次编译过程中,已经定义了变量,但任然在idea上仍然出现较多红线,将代码原样复制到bash命令行中,再上传后再次复制回idea上则可以正常运行,检查代码并没有发现逻辑错误和语法错误。

解决方案:
多运算符问题在网上查阅资料后,仍然没有较为明确的解决方法,在与20162318张泰毓同学交流学习后,结合他在码云上的代码,完成了多运算符的代码编译,完善了代码。
编译方法为:给代码增加一个for循环语句,在不加入括号的情况下,运算符由数字、符号、数字、符号组成,将这个语句进行长度加一的循环,就完成了多运算符的计算。
1066526-20170514170635504-805143413.png

结对学习情况:
本次实验,我与20162313苑洪铭结对共同完成本次实验,苑洪铭同学在java学习上基本功比较扎实,在对代码的理解上比较深入。在循环语句(是否继续进行运算)的编译上,苑洪铭同学多次调试后完成了编写。
1066526-20170514000911863-631971571.png

同时,苑洪铭同学在学习上稳扎稳打,擅于结合教材内容和在网上查阅相关资料来解决代码编译过程中所遇到的问题,比如在编译统计运算结果的代码的过程中,计算总题数和计算正确的题数,这部分的代码仍然需要定义新的变量,而在出现真分数的场合对产生的随机数还有额外的需求,这里需要调用一个私有变量,用private方法,并再次定义两个变量来完成。再次定义的变量数量较多,再次进行计算时使用到了Math.random方法。

1066526-20170514112645426-1678574618.png

同时,苑洪铭同学在编写代码的过程中仍然存在一些小问题,本次实验的代码我们组编写的量比较大,其中多次出现的重复代码有一定的数量,使代码在整体情况上比较赘余,不够简洁,经过我们共同的检查和修改之后,最后完成了一个较为完整和明晰的程序,经测试后可以正常运行,并且符合结对编程项目的需求。

测试方法及运行结果截图:
1066526-20170514114519582-48539335.png

由截图可以看出,运行是成功的,同时程序会自动识别真分数的约分情况。

结对搭档20162313苑洪铭同学博客地址:http://www.cnblogs.com/yuanhongming/

PSP表格:

PSP2.1Personal Software Process Stages预估耗时(小时)实际耗时(小时)
Planning计划1517
· Estimate· 估计这个任务需要多少时间811
· Analysis· 需求分析 (包括学习新技术)22
· Design Spec· 生成设计文档0.50.33
· Design Review· 设计复审 (和同事审核设计文档)0.50.5
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)11.5
· Design· 具体设计23
· Coding· 具体编码34
· Code Review· 代码复审21.5
· Test· 测试(自我测试,修改代码,提交修改)11
Reporting报告11
· Test Report· 测试报告22.5
· Size Measurement· 计算工作量0.50.5
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划22

实验总结:
本次实验是学习java以来一次较为完整和系统的考察学习情况的实验过程,通过结对实验的方式来实现。本次实验有一定的难度,考察方式较为全面,需要投入较多的时间和精力,在一些实验要求上,比如在给定的一定数量(较大)的代码输出结果中,需要为客户自动筛选出是否存在重复代码,以及多重的判断语句,
1066526-20170514142513441-1664949693.png
在编译上确实存在困难,本周也只是完成了一部分实验内容,一些完善工作还需要完成。通过结对编程任务,在java运用上体会到了还有很多在教材学习上没有学习到和掌握的知识,只是单纯地完成教材上的代码任务很难全面的学习,通过每周的实验任务以及随堂代码运行检查可以有效地进行巩固对学习有很大帮助。
四则运算的实验的代码量相对较多,在测试和运行时,单纯的命令行就无法较为简洁地完成了,则idea的一些好处就体现出来了,代码量大的程序idea可以更加方便地进行错误的检查,判断语法,对实验的完成有很大的帮助。

转载于:https://www.cnblogs.com/Metwox/p/6849178.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验目的: 本实验旨在通过编写程序实现简单的四则运算,加深对程序控制流程、运算符、函数等概念的理解,提高编程能力。 实验过程: 根据题目要求,我们需要实现加减乘除四种运算。首先需要定义变量来存储用户输入的两个数和运算结果,然后根据用户选择的运算符进行相应的计算,并将结果输出。 具体实现过程如下: 1. 定义变量num1、num2、result,来存储用户输入的两个数和运算结果。 2. 通过输入函数scanf()获取用户输入的两个数num1和num2。 3. 通过输入函数scanf()获取用户选择的运算符operator。 4. 根据用户选择的运算符operator进行相应的计算,将结果保存在变量result中。 5. 通过输出函数printf()将结果输出。 6. 程序结束。 以下为程序示例: ``` #include <stdio.h> int main() { float num1, num2, result; char operator; printf("请输入两个数和运算符(例如:2+3):\n"); scanf("%f%c%f", &num1, &operator, &num2); switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': if (num2 == 0) { printf("除数不能为0!\n"); return 0; } result = num1 / num2; break; default: printf("输入的运算符不正确!\n"); return 0; } printf("运算结果为:%f\n", result); return 0; } ``` 实验结果: 运行程序,输入两个数和运算符,程序可以正确计算出结果并输出。 实验结论: 本实验通过编写程序实现简单的四则运算,加深了对程序控制流程、运算符、函数等概念的理解,提高了编程能力。同时,还需要注意输入输出的格式和数据类型的匹配,以及对除数为0的情况进行特殊处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值