北邮程序设计实验 简易计算器

合集下载

C课程设计简易计算器实验报告

C课程设计简易计算器实验报告

《程序设计基础》(C++)课程设计报告计算器姓名:班级:学号:指导教师:成绩:完成时间:完成地点:计算器1 基本功能描述计算器包含基本的四则运算、开方、倒数、相反数(正负)等运算。

可对输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算。

同时包含清除功能。

2 设计思路如图1是计算器总流程图,输完第一个操作数后,若点击双目运算符,则把m_edit 传递给op1,并传递给变量calculator相对运算符对应的值,输入的第二个操作数传递给op2,点击等号根据calculator的值进行相应运算并输出结果。

若点击的是单目运算符,则直接对其处理得出结果。

若点击清零,则m_edit等于0。

设计思路流程图如下(见下页)。

图1 计算器设计思路总流程图3 软件设计创建步骤打开Microsoft Visual C++ ,选择新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名Calculator及其所在位置。

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成。

MFC AppWizard建立基于对话窗口的程序框架。

界面设计1、创建控件在对话框上的合适的位置画出编辑框和下压式按钮。

如图2所示。

图2 绘制编辑框在按钮和编辑框属性对话框中输入控件的ID值和标题属性。

如图3所示。

图3 Push Button属性按照上面的操作过程编辑其他按钮和编辑框等对象的属性。

表1 各对象属性对象ID 标题或说明编辑框IDC_EDIT1 结果显示按钮IDC_BUTTON0 0按钮IDC_BUTTON1 1按钮IDC_BUTTON2 2按钮IDC_BUTTON3 3按钮IDC_BUTTON4 4按钮IDC_BUTTON5 5按钮IDC_BUTTON6 6按钮IDC_BUTTON7 7按钮IDC_BUTTON8 8按钮IDC_BUTTON9 9按钮IDC_ BUTTONneg +/-按钮IDC_ BUTTONpot .按钮IDC_ BUTTONadd +按钮IDC_BUTTONsub -按钮IDC_BUTTONmul *按钮IDC_BUTTONdiv /按钮IDC_BUTTONsqrt sqrt按钮IDC_BUTTONCE CE完成后界面如图4所示。

北邮程序设计实践报告(计算器)附源代码

北邮程序设计实践报告(计算器)附源代码

程序设计实践设计报告课题名称:计算器设计学生姓名:班级:班内序号:学号:日期:2014年5月10日星期六1.课题概述1.1课题目标和主要内容本案例以编写基于MFC的简易计算器软件为例,通过学习MFC事件驱动机制、MFC界面设计、MFC控件使用,并掌握MFC应用程序的设计方法,独立完成一个MFC的一个MFC的应用程序。

本案例的重点是学习如何使用MFC基本控件和事件驱动机制完成一个Windows下交互式应用软件。

本次实验所用的开发平台为Visual Studio 2008。

1.2系统的主要功能基本功能单击数字键,显示当前数值单击“+”、“-”、“*”、“/”建进行运算单击“=”,显示运算结果单击“C”,清楚已有结果进行连续四则运算扩展功能进行浮点运算进行平方、绝对值、倒数运算进行三角函数运算2. 系统设计2.1 系统总体框架2.2 系统详细设计[1] 模块划分图及描述(1)对话框:此模块实现的是与用户的交互,本案例使用了两类控件:编辑框和按钮。

(2)事件驱动函数:例如:void CcalculatorDlg::OnBnClickedBtn1(){// TODO: 在此添加控件通知处理程序代码ClickNum("1");}此模块处理的是程序如何响应鼠标的单击,主要由消息映射和消息处理函数两部组成。

(3)运算函数:例如:void CcalculatorDlg::Compute(char chOper){UpdateData(TRUE);m_nTemp2=(float)atof(m_strResult);switch(chOper){case'+':m_nTemp2=m_nTemp1+m_nTemp2; break;case'-':m_nTemp2=m_nTemp1-m_nTemp2; break;case'*':m_nTemp2=m_nTemp1*m_nTemp2; break;case'/':m_nTemp2=m_nTemp1/m_nTemp2; break;case'%':{int n1=(int)m_nTemp1;int n2=(int)m_nTemp2;m_nTemp2=(float)(n1%n2); break;}case'=':m_nTemp2=m_nTemp1; break;}m_nTemp1=m_nTemp2;m_strResult.Format("%f",m_nTemp2);m_IsFirstNum=TRUE;UpdateData(FALSE);}此模块是本实验的核心内容,它控制着整个程序的逻辑功能,它所实现的主要是逻辑运算以及数据交换。

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告简易计算器实验报告引言:计算器是我们日常生活中常用的工具之一。

它可以帮助我们进行简单的数学运算,提高计算的效率。

在本次实验中,我们将设计并制作一台简易计算器,通过实践来掌握计算器的原理和工作原理。

实验目的:1. 了解计算器的基本原理和工作原理;2. 掌握计算器的设计和制作方法;3. 提高动手能力和创造力。

实验材料:1. 电路板;2. 按键;3. LED显示屏;4. 电容;5. 电阻;6. 电源。

实验步骤:1. 连接电路板和电源,确保电路板能够正常工作;2. 将按键连接到电路板上,用于输入数字和运算符;3. 连接LED显示屏,用于显示计算结果;4. 添加电容和电阻,用于控制电路的稳定性和电流;5. 调试电路,确保计算器能够正确运行。

实验结果:经过一番调试,我们成功制作出了一台简易计算器。

它可以进行基本的加减乘除运算,并且在LED显示屏上显示结果。

通过按键输入数字和运算符,我们可以进行各种运算,从而得到我们想要的结果。

这台计算器虽然简单,但是它的实用性和便携性都非常高。

实验分析:在本次实验中,我们主要学习了计算器的基本原理和工作原理。

计算器是通过按键输入数字和运算符,然后经过电路的计算和控制,最终在显示屏上显示结果。

在电路中,电容和电阻的作用是为了保证电路的稳定性和电流的控制。

通过这个实验,我们更加深入地了解了计算器的内部结构和工作原理。

实验总结:通过本次实验,我们成功制作了一台简易计算器,并且对计算器的原理和工作原理有了更深入的了解。

实验过程中,我们不仅提高了动手能力和创造力,还培养了解决问题的能力。

计算器作为一种常见的工具,它的设计和制作过程并不复杂,但是它的实用性和便携性却非常高,为我们的生活带来了很大的便利。

未来展望:通过这次实验,我们对计算器的原理和工作原理有了初步的了解。

在未来,我们可以进一步深入研究计算器的更高级功能和更复杂的电路设计。

同时,我们也可以将这种简易计算器的设计思想应用到其他领域,如电子设备、机器人等,从而提高我们的创造力和创新能力。

简单计算器—实训报告

简单计算器—实训报告

Linux应用与编程实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目: B2-简单计算器二、实习时间:19周~ 20周实习地点: J13- 128三、实习任务:实现一个简单计算器,计算器包括加、减、乘、除四种运算。

用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中四、小组分工说明:独立完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1. 概述 -------------------------------------------------------- 42. 相关技术 -------------------------------------------------- 42.1 QT中信号和槽 -------------------------------------- 42.2 字符串输出数据组 -------- 错误!未定义书签。

3. 需求分析 -------------------------------------------------- 54. 总体设计与详细设计 ----------------------------------- 54.1 系统模块划分 --------------------------------------- 54.2 主要功能模块 --------------------------------------- 55. 编码实现 -------------------------------------------------- 6 6.测试情况说明------------------------------------------- 157. 实训中遇到的主要问题及解决方法 ---------------- 168. 实训收获与体会 ---------------------------------------- 161. 概述1.1 实训项目简介本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。

简单计算器的制作(实验版)

简单计算器的制作(实验版)
w属性修改为 属性修改为true,才能响应键盘按键 注意:将form1窗体的 窗体的 属性修改为 才能响应键盘按键 的按下消息. 的按下消息.
设计与实现
运算. (13)单个操作数的运算的处理,例如"1/x"运算.在按钮"1/x"的单击 )单个操作数的运算的处理,例如" 运算 在按钮" 的单击 事 件过程OnButton3Click中编写实现代码: 中编写实现代码: 件过程 中编写实现代码
注意: 注意:加,减,乘,除这些按钮都要做相应的处理!! 除这些按钮都要做相应的处理!!
设计与实现
(8)退格键(BackSpace)功能的实现.在按钮"BackSpace"的单击 )退格键( )功能的实现.在按钮" 的单击 事 件过程OnBackSpaceBtnClick中编写实现代码: 中编写实现代码: 件过程 中编写实现代码
设计与实现
当用户按下运算操作符按钮,在按钮" 单击事件过程中编写实现代码 单击事件过程中编写实现代码: 当用户按下运算操作符按钮,在按钮"+"单击事件过程中编写实现代码:
设计与实现
(4)定义一个可以根据不同的操作符进行不同运算的过程: 定义一个可以根据不同的操作符进行不同运算的过程: 定义一个可以根据不同的操作符进行不同运算的过程
设计与分析
混合运算的情况: 混合运算的情况 (1)在没有按下运算操作符按钮之前,通过按钮输入的数 字均作为第一个操作数,保存在opnum1变量中; (2)选择运算的种类,按下运算操作符按钮,首先对上一 次的运算进行求解,并把结果显示出来,同时把该计 算结果作为第一个操作数,存在到opnum1变量中,把 按下的运算操作符也保存在ca_operator变量中; (3)按下运算操作符按钮后(设置一个变量operated来记 录),通过按钮输入的数字均作为第二个操作数保存 在opnum2变量中; (4)按下"="按钮后,根据选择的运算操作符对两个操作数 进行运算,并把结果显示在edit编辑框中.

北邮程序设计实验报告

北邮程序设计实验报告

实验名称:程序设计实验实验时间:2023年X月X日实验地点:北邮计算机实验室一、实验目的1. 熟悉C语言编程环境,掌握基本的程序设计方法。

2. 通过实际编程,提高逻辑思维和问题解决能力。

3. 理解算法设计的重要性,掌握常用的算法设计方法。

二、实验内容本次实验主要分为以下几个部分:1. 编写一个计算两个整数相加的程序。

2. 编写一个计算两个整数相减的程序。

3. 编写一个计算两个整数相乘的程序。

4. 编写一个计算两个整数相除的程序(要求考虑除数为0的情况)。

5. 编写一个判断两个整数是否相等的程序。

三、实验步骤1. 打开C语言编程环境,创建一个新的项目。

2. 编写计算两个整数相加的程序:```c#include <stdio.h>int main() {int a, b, sum;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);sum = a + b;printf("两个整数相加的结果为:%d\n", sum); return 0;}```3. 编写计算两个整数相减的程序:```c#include <stdio.h>int main() {int a, b, sub;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);sub = a - b;printf("两个整数相减的结果为:%d\n", sub); return 0;}```4. 编写计算两个整数相乘的程序:```c#include <stdio.h>int main() {int a, b, mul;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);mul = a b;printf("两个整数相乘的结果为:%d\n", mul);return 0;}```5. 编写计算两个整数相除的程序(考虑除数为0的情况):```c#include <stdio.h>int main() {int a, b, div;printf("请输入两个整数:\n");scanf("%d %d", &a, &b);if (b == 0) {printf("除数不能为0,请重新输入。

c0205_简易计算器

c0205_简易计算器

c0205_简易计算器【问题描述】编程实现简易的计算器:读⼊两个整数运算数(data1和data2)及⼀个运算符(op),计算表达式data1 op data2的值,其中op可以是+,-,*,/.【输⼊形式】控制台输⼊运算数和运算符:1.⾸先输⼊以空格分隔的两个整数,分别是data1和data2;2.输⼊⼀个字符作为运算符op,op可以是’+’,’-’,’*’,’/’。

输⼊时,data1、data2、op之间各留有⼀个空格。

具体格式见样例输⼊。

【输出形式】控制台输出运算结果【样例输⼊】23 5 *【样例输出】115【样例说明】输⼊中先后输⼊第⼀个运算数23,第⼆个运算数5,运算符’*’,要求对23和5进⾏乘法运算。

计算结果为115。

--------------个⼈代码:#include <stdio.h>int main(){int x,y;char op;scanf("%d %d %c",&x,&y,&op);switch(op){case'+':printf("%d\n",x+y);break;case'-':printf("%d\n",x-y);break;case'*':printf("%d\n",x*y);break;case'/':printf("%g\n",x*1.0/y);break;}getchar();return0;}标答:#include <stdio.h>main(){int a, b;char op;int result = 0;scanf("%d %d %c", &a, &b, &op);switch (op) {case'+':{result = a + b;break;}case'-':{result = a - b;break;}case'*':{result = a * b;break;}case'/':{result = a / b;break;}default:break;}printf("%d\n", result);}------------------1、switch-case语句switch (op) {case'+':...;break;case'-' :...;break;case'*':...;break;case'/' :...;break;default :...;break; }。

北邮编程实验报告

北邮编程实验报告

实验名称:编程基础实验实验日期:2023年X月X日实验地点:北邮计算机实验室实验指导教师:XXX老师实验目的:1. 熟悉编程环境,掌握基本的编程技能。

2. 理解编程的基本概念和语法规则。

3. 培养逻辑思维和问题解决能力。

实验内容:本次实验主要涉及以下几个方面:1. 编程环境搭建2. 基本语法学习3. 编程实践实验步骤:一、编程环境搭建1. 安装编程软件:首先,在北邮计算机实验室的计算机上安装了Visual Studio Code,这是一个功能强大的代码编辑器,可以支持多种编程语言。

2. 配置环境变量:为了方便调用编程软件,我们将环境变量设置好,使得在命令行中输入软件名称即可启动。

二、基本语法学习1. 数据类型:学习了整型、浮点型、字符型等基本数据类型,并掌握了它们的特点和适用场景。

2. 运算符:了解了算术运算符、关系运算符、逻辑运算符等,并学会了如何使用它们进行简单的计算和判断。

3. 控制语句:学习了if-else语句、for循环、while循环等,掌握了如何控制程序的执行流程。

4. 函数:了解了函数的定义、调用和参数传递,学会了如何封装代码,提高代码的可读性和可重用性。

三、编程实践1. 编写计算器程序:根据所学知识,编写了一个简单的计算器程序,实现了加减乘除等基本运算。

2. 编写排序算法:学习了冒泡排序、选择排序、插入排序等基本排序算法,并实现了它们的代码。

3. 编写学生信息管理系统:根据实际需求,设计并实现了一个学生信息管理系统,包括添加、删除、修改和查询学生信息等功能。

实验结果:通过本次实验,我成功完成了以下任务:1. 熟悉了编程环境,掌握了基本的编程技能。

2. 理解了编程的基本概念和语法规则。

3. 培养了逻辑思维和问题解决能力。

实验总结:1. 编程环境搭建:在北邮计算机实验室,我成功安装了Visual Studio Code编程软件,并配置了环境变量。

2. 基本语法学习:通过学习,我掌握了数据类型、运算符、控制语句和函数等基本语法,为后续编程实践打下了基础。

数电实验简易计算器

数电实验简易计算器

北京邮电大学数电综合实验报告题目:简易计算器学院:信息与通信工程学院班级:学号:班内序号:姓名:数字电路综合实验报告简易计算器一、实验课题及任务要求设计并实现一个简易计算器。

基本要求:1.利用4X4 小键盘作为输入,包括:数字键0-9,清除键,等号键及‘+’‘-’‘*’运算符号键;2.实现输入为99 以内自然数的加、减、乘运算;3.能够实现多次连续计算(无优先级,从左到右计算结果),如:12+34×2-78=14;4.最大结果为99999(五位),溢出报警;5.用数码管显示输入的数字和结果,最左侧数码管用来表示数字的正负,其他五位数码管表示结果;结果的绝对值大于99999时,数码管显示‘Error’。

提高要求:1.实现输入为9999 以内自然数的加、减法;2.除法运算,不能除尽时小数保留1 位有效数字;3.能够区分运算优先级(先乘除,后加减),如:12+34×2-78=2 ;4.自拟其他功能。

二、系统设计2.1系统总体框图2.2逻辑流程图2.3MDS图2.4分块说明程序主要分为6个模块:分频器模块,键盘扫描模块,防抖模块,控制模块,数码管模块,报警模块。

VHDL文件devider包括分频器模块,keyboard包括键盘扫描模块,datain 包括防抖模块,控制模块,数码管模块,报警模块。

1.分频器模块系统时钟是50MHz,利用分频器得到25赫兹的时钟用于键盘扫描;100赫兹的时钟用于键盘去抖;1000赫兹的时钟用于数码管显示。

2.键盘扫描模块本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别。

键盘扫描的实现过程如下:对于4×4键盘,连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可。

为了完成这一识别过程,在时钟的上升沿输出列扫描信号其中一列输出低电平,另外三列输出高电平;在时钟的下降沿读入行值,当四行全为1时,表明无键按下;若某一列的行值为0,表示该行有键被按下。

09上机实验四 实现简单计算器功能

09上机实验四 实现简单计算器功能

实验四
实验目的:
1.掌握流程控制语句的特点和用法。

实验内容:
编写一个程序,模拟具有加、减、乘、除四种功能的简单计算器,程序流程图如下图所示:
该程序具体要求如下:
1. 运行程序,显示当前值及命令提示command>。

2. 通过键入字符‘+’、‘-’、‘*’或‘/’(分别表示加、减、乘或除运算符)响应程序的提示command>,能够支持加、减、乘、除运算。

3. 当一个运算符输入后,程序便要求输入同当前值一起运算的第二个数。

若给定了第二个数,程序便执行指定的运算,显示新的当前值。

4. 在程序提示command>后可接受字符‘C’作为清除当前值的命令,即将当前值设置为0。

5. 在程序提示command>后可接受字符'Q'命令,终止程序的运行。

实验步骤:
1.使用VC++ 6.0;
实验要求:
随机抽查程序。

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。

二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。

乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。

2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。

栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。

3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。

然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。

三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。

2、操作系统:Windows 10 操作系统。

四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。

2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。

遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。

3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。

根据运算符的优先级进行相应的运算,将结果压入操作数栈。

4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

北邮JAVA第三次作业科学计算器(附源代码)

北邮JAVA第三次作业科学计算器(附源代码)

北邮JAVA第三次作业科学计算器(附源代码)JAVA第三次作业选题:科学计算器一、设计思路(1)布局1.数字键盘有0~9和小数点2.符号键盘有+某÷,幂,开方,lg,ln3.功能按键有清屏(AC)和删除(Del)(2)计算器流程状态转移图设定的标志位和变量有:booleannumflag=fale;//标志:是否输入数字booleanopflag=fale;//标志:是否输入运算操作符Stringt某t=null;//显示到文本框里的字符串Stringnum_t某t=\;//当前操作数的字符串形式Stringop=\;//存放输入的运算操作符num1=0;//第一个操作数num2=0;//第二个操作数privateBigDecimalbig_num1=newBigDecimal(Double.toString(0)); //解决浮点数的精度丢失问题privateBigDecimalbig_num2=newBigDecimal(Double.toString(0));1.关于操作数操作数为输入数字时会改变的数,有num1和num2。

按下运算符和控制字符,会设定当前下在键入的操作数,由opflag控制,fale表示正在操作num1,true表示正在操作num2。

初始状态下的操作数为num1。

按下AC会恢复操作数为初始状态num1。

按Delete、开方、lg、ln不会改变当前的操作数。

其中后三者只对num1有效。

其他的运算符和控制符都会使操作数为num2。

2.计算器的状态框图输入第一个数,比如53numflag=true(num1)opflag=falenum_t某t=”53”op=””t某t=”53”初始状态numflag=faleopflag=falenum_t某t=””op=””t某t=nullnum1,num2=0按下一个运算符,比如+numflag=faleopflag=truenum_t某t=””op=”+”t某t=”num1+”其中按下按=显示结果,恢复初始状态numflag=true(num1)opflag=falenum_t某t=””op=””t某t=”reult”“=”后,结果存输入第二个数,比如66入numflag=true(num2)opflag=truenum_t某t=”66”op=””t某t=”num1+66”num1,继续输入数字会在num1的结果上处理。

北邮大三计算机体系结构实验三DLX处理器程序设计

北邮大三计算机体系结构实验三DLX处理器程序设计

北邮大三计算机体系结构实验三DLX处理器程序设计DLX处理器是一种精简指令集计算机体系结构,它包含了32个通用寄存器,支持32位指令和数据,以及高度定制化的流水线架构,能够提供高效的指令执行能力。

本文将针对DLX处理器进行程序设计,主要实现一个简单的计算程序。

首先,我们将使用汇编语言来设计DLX处理器的程序。

DLX处理器的指令集采用32位指令,并且按照固定格式进行编码。

在本实验中,我们将实现一个简单的加法程序。

首先,我们需要定义一些常量和变量。

在DLX处理器中,可以使用32个通用寄存器来存储数据和中间结果。

我们可以使用其中的3个寄存器来存储输入数据和输出结果。

```assembly.datainput1: .word 5input2: .word 7result: .word 0```接下来,我们需要编写程序的主体部分。

程序的主体部分包含了一系列的指令,用来执行具体的计算任务。

在本实验中,我们将使用ADD指令来执行加法操作,并将结果存储到result寄存器中。

```assembly.textmain:L.D F0, input1L.D F2, input2ADD.DF4,F0,F2S.D result, F4```在这段代码中,我们首先使用L.D指令将input1中的值加载到浮点寄存器F0中,然后使用L.D指令将input2中的值加载到浮点寄存器F2中。

接着,我们使用ADD.D指令将F0和F2中的值相加,并将结果存储到F4中。

最后,我们使用S.D指令将F4中的值存储到result寄存器中。

最后,我们需要在程序中添加一些必要的指令,用来启动和结束程序的执行。

在DLX处理器中,程序的执行是按照顺序进行的,因此我们只需要添加一些简单的指令即可。

```assemblystart:j mainnop```总结起来,本文针对北邮大三计算机体系结构实验三DLX处理器程序设计,我们使用汇编语言设计了一个简单的加法程序。

北邮数电实验报告

北邮数电实验报告

数字电路与逻辑设计实验报告一、要求要求:设计制作一个简易计算器,实现最大输入两位十进制数字的加减乘运算。

基本要求:1、实现最大输入两位十进制数字的加减乘运算;八个拨码开关按两位8421bcd码输入。

2、能够实现多次连算(无优先级,从左到右计算结果),如12+34×56-78=2498。

3、最大长度以数码管最大个数为限,溢出报警。

提高要求:1、有正负数区分。

2、实现除法(不能整除时小数保留2位有效数字)。

3、其它扩展功能。

二、系统设计:设计思路:1、将该程序进行分模块设计。

可以将程序分为:主程序、译码模块和防抖模块。

其中,主程序负责将输入的数据进行存储,对数据进行运算,将数据输出到数码上等;防抖模块负责对按键输入的数防抖;译码模块负责对输入的数据进行译码(由8421bcd码转化为十进制的编码)。

2、分模块进行相应模块的编写。

3、对编好的模块进行测试。

4、编写主程序并进行调试。

总体框图:流程图:分块设计:(按实际操作的分块)输入模块:由符号开关和拨码开关构成。

采用序列存储的方式存储相应的输入。

输入译码模块:将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。

数码显示模块:将寄存器内的数进行输出到数码管上。

显示所输入的第一个数以及最后的结果。

计算模块:调用相应的计算方式,对所输入的数进行计算。

防抖模块:在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

三、仿真波形及波形分析:分析(波形仿真时,为了方便观察,将8421bcd码输入方式,该为了十进制的直接输入方式,并将输出,有原来的数码管显示改成了直接数字显示)由图中可以看出,当输入12 ,按下“确定”,数字就输入到了寄存器中,输入“+”号(对应仿真中的fuhao“100000”),在输入一个数35,按下“确定”,该计算器就件寄存器中的数与第二次输入的数进行相加,得到结果47。

此时该结果又被直接保存到了寄存器中,继续输入运算符“-”(对应仿真中得fuhao“010000”),输入第三个数18,按下“确定”,计算器对其做减法运算,得到结果29,该结果又在寄存器中存储着。

北邮erlangB计算器实验报告

北邮erlangB计算器实验报告

实验二:Erlang B公式计算器实验报告学院:信息与通信工程学院班级::学号:一、实验目的Erlang B公式通信网理论基础这门课程的学习重点之一,其表达了交换系统的时间阻塞率B(s,a)与到达的呼叫量a以及中继线的数目s之间的关系,为网络的规划和中继线容量配置奠定了基础。

本次实验要求用计算机语言编写ErlangB公式计算器,实现给定任意两个变量求解第三个变量的功能,使学生掌握ErlangB公式的计算方法,培养数值分析计算与算法设计能力。

二、实验原理Erlang即时拒绝系统用于建模交换系统,设呼叫流的到来服从Poisson过程,λ为呼叫的到达率,呼叫的持续时间服从参数μ的负指数分布。

系统有s条中继线,呼叫到来时,如系统中有空闲的中继线,则呼叫可到达任意一个空闲的中继线,如果没有空闲的中继线,就拒绝该呼叫。

在这样的情况下,该交换系统的排队系统模型为)(//ssMM。

利用生灭过程稳态分布的结论,可求解M/M/s(s)系统的时间阻塞率为B(B,B)=BBB!∑BBB!BB=0,该公式给出了a,s,与B之间的关系。

本次实验要求编写Erlang B公式的计算器,实现给定任意两个变量求解第三个变量的功能:(1) 给定到达的呼叫量a和中继线的数目s,求解系统的时间阻塞率B;(2) 给定系统的时间阻塞率的要求B和到达的呼叫量a,求解中继线的数目s,以实现网络规划;(3) 给定系统的时间阻塞率要求B以及中继线的数目s,判断该系统能支持的最大的呼叫量a。

三、实验容1. 设计语言及开发工具:(1)计算器:界面生成采用C++语言(MFC),函数采用C语言在VC++6.0中编写;(2)作图程序:C语言和MATLAB语言,采用MATLAB开发。

2. 计算器主要功能函数以下三个函数共同使用如下三个变量,但它们的使用方式不同,可能作为输出也可能是输入:a.到达呼叫量(a,非负双精度浮点数);b.时间阻塞率(eb,浮点数,取值围0~1);c.中继线数(s,非负整数)。

简易计算器实训报告(一)

简易计算器实训报告(一)

简易计算器实训报告(一)简易计算器实训报告实训目的本次简易计算器实训的目的在于让学生了解python语言的基本语法和运算符,同时通过实践操作,提升学生的编程思维和实际应用能力。

实训内容本次实训内容主要包括以下方面:1.简易计算器的基本功能:加、减、乘、除。

2.计算器的界面设计与功能实现。

3.错误处理与异常捕获。

实训步骤步骤一:设计计算器界面在本次实训中,我们采用tkinter库来设计计算器的用户界面。

具体步骤如下:1.创建一个窗口;2.在窗口中添加各种按钮和文本框,用于输入和显示计算结果;3.将按钮按照功能分类,为每个按钮设置对应的事件处理函数。

步骤二:实现基本计算功能根据下拉菜单中所选的运算符,我们可以对输入的两个数进行相应的计算。

具体实现方法如下:1.在计算器窗口中添加一个下拉菜单,用于选择运算符;2.根据所选运算符,获取相应的输入数据,并调用对应的计算函数;3.将计算结果输出到窗口中。

步骤三:错误处理与异常捕获在实际应用中,我们不能保证用户输入的一定是数字,所以我们需要对输入做一些错误处理。

具体方法如下:1.在获取用户输入时,先对输入的字符串进行判断,如果用户输入不合法,弹出提示窗口;2.对于除数为0等异常情况进行相应的异常捕获处理,避免程序崩溃。

实训总结通过本次实训,我们学习了python语言的基本语法和运算符,并通过实践操作,学习了tkinter库的使用方法。

通过本次实训,我们还深入了解了计算器的界面设计和功能实现过程。

此外,我们也学会了一些常用的错误处理和异常捕获方法。

未来拓展本次实训只是简易计算器的基本实现,还有很多可以拓展的功能,如:1.添加科学记数法、三角函数、对数函数、平方根等高级数学运算;2.设计多个数字输入框,实现多操作数的计算;3.添加历史记录功能,记录用户计算过程和结果;4.将计算器移植到移动设备或网页上,提供更为便捷的计算服务。

5.添加输入历史记录及回显功能,便于用户查错和复查。

C语言程序设计之简单计算器

C语言程序设计之简单计算器

C语言程序设计之简单计算器C语言是一种广泛应用于操作系统、嵌入式系统和各种应用程序的高级程序设计语言。

在学习C语言的过程中,我们可以通过编写简单的计算器程序来巩固所学的知识。

计算器程序的基本功能是接收用户输入的两个数字和一个运算符,然后根据用户的选择进行相应的运算,最后输出结果。

下面是一个简单的计算器程序的实现。

首先,我们需要包含头文件stdio.h和stdlib.h,以便使用标准输入输出函数和动态内存分配函数。

#include <stdio.h>#include <stdlib.h>接下来,我们定义一个函数menu,用于显示计算器的菜单选项。

用户可以选择进行加法、减法、乘法或除法运算,或者退出程序。

void menprintf("====================================\n");printf("简单计算器\n");printf("1. 加法\n");printf("2. 减法\n");printf("3. 乘法\n");printf("4. 除法\n");printf("5. 退出程序\n");printf("====================================\n");printf("请选择您要进行的运算:");然后,我们定义一个函数add,用于执行加法运算。

该函数接收两个参数:num1和num2,分别表示用户输入的两个数字。

float add(float num1, float num2)return num1 + num2;类似地,我们可以定义函数sub、mul和div,用于执行减法、乘法和除法运算。

float sub(float num1, float num2)return num1 - num2;float mul(float num1, float num2)return num1 * num2;float div(float num1, float num2)if (num2 != 0)return num1 / num2;} elseprintf("错误:除数不能为0!\n");return 0;}最后,我们在主函数中调用这些函数,实现计算器的功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北京邮电大学程序设计实践报告课题名称:_ 简单计算器的设计与实现__学生姓名:______ _______________班级:___________________班内序号:________________________学号:__________________日期:_____2014年5月20日_________1.课题概述1.1课题目标和主要内容本课题主要内容是设计并实现一个与Windows自带标准型计算器相似的计算器,在完成基本要求的基础上添加一些更全面地计算功能,比如括号的实现,达到多次试验计算结果正确、无明显bug出现的目的。

使用的开发平台是MFC,采用的工具是VC++ 6.0。

1.2系统的主要功能功能列表数字按钮0~9的数字键入四则运算加减乘除的二元运算的实现一元简单运算正弦、余弦、正切、正负号的功能退格、清零在对已有运算或者数字进行退格或清零多层括号实现多层括号的优先级运算2. 系统设计2.1 系统总体框架NY开始运算是否有括号保留现场数值运算若有括号结束立刻算出括号内的结果遇到等号或者四则符号也算出相应结果循环连续运算设计思想:自己先参看了Windows 自带的标准型计算器,发现Windows 中的编辑框是双行显示,一开始进行双行显示无疑增大了难度,所有自己决定先单行显示。

然后编辑框中参数类型可以是double 也可以是Cstring ,自己发现网上众多代码都是CString ,这种类型方便显示和字符、数字的键入,但自己为了与网上那些代码区分,决定用double 类型,这样在键入数字的时候就会复杂一些。

在完成基本功能(四则运算和简单一元运算后),自己又添加了括号优先级功能。

2.2 系统详细设计 [1] 模块划分图及描述各个模块中包含着相应的操作,比如一元运算模块包括了三角和倒数等运算,但是每一个模块中各个函数实现的原理大致相同 [2] 类关系图及描述本课题并无复杂的类关系继承,只是MFC 自己封装的一些类,然后在其中写消息处理函数。

[3] 程序流程图及描述CMyDlgCDialog封装各种成员函数该计算器具有连续运算的功能,运算后的结果可以作为下次运算的输入继续参与运算,而且如果判断有左括号输入,则调用结构体来保留现场,继续参与运算。

[4] 存储结构、内存分配在括号功能实现中需要采用一定的结构整体保留括号内的内容,自己采用了结构体,并且结构体通过结构指针构成一个链,这样就可以实现多层括号的功能。

2.3 关键算法分析由于课题中引入了很多起到标志位作用的标识符,在算法分析之前先对各个标志符号进行简单介绍。

flag :为了让系统知道已按过加-除/清零/开根号/求百分比/倒数/等号按钮 d :为了让系统知道已按过小数点"."按钮,调整为向编辑框输入小数点后的值 a1,a2,a3,a4:为了让系统知道已分别按过了加/减/乘/除按钮,使系统做相应的运算 a :为了让系统知道已按过按钮加-除按钮,实现连续运算 backz :为退格时取整用,backbl 为退格时乘倍率时用 f :为负数时实现退格wei :控制输入编辑框的位数不超过9位算法1:数字输入函数[1]算法功能:当点击相应的数字按钮,让编辑框中显示添加相应的数字(0~9)[2] 算法基本思想:用UpdataData 函数实现编辑框中内容和double 类型的互传,分多种情况将数字合理地添加到编辑框中。

输入数字运算符号运算结果连续运算[3] 代码逻辑:(令点击的数字为x,伪代码如下)if (d=1 和flag=0和wei<9) dotbl自乘0.1 ; m_strResult+=dotbl*x;wei自加; 1backbl自乘10;//实现小数点之后的数字输入if(flag=0 and d=0)or(flag=1) m_strResult=x; wei+=1;//按下清零/加-除按钮后编辑框的值为xif(flag=0 and d=0 and wei<9) m_strResult=m_strResult*10+x ;wei+=1;//小数点之前对于数字的连续输入以上内容通过标志符号的识别来判断输入数字属于哪种情况,然后按不同情况进行数字的添加处理。

算法2:一元运算符号函数[1]算法功能:实现对编辑框中已有数字的一元运算,比如取倒数、求正弦、余弦、正切值[2] 算法基本思想:调用Cmath函数库中数学操作符号,对已有的double类型的数直接进行函数操作。

[3] 代码逻辑:(伪代码如下)三角运算以正弦为例:(系统默认把操作数当成角度值)m_strResult=sin( m_strResult除以180乘以pi )//先将其转化成弧度值,然后直接调用函数m_strResult=(int)( m_strResult乘以10^7)除以10^7 //这样可以控制正弦值输出为7位有效数字flag=1,wei=0; d=0;dotbl=1; //运算之后对相应的标志符号重置,flag表示已按过一元运算符号按钮,算出结果后wei和d自然重置为0,小数点倍率dotbl重置为1。

算法3:二元四则运算函数[1]算法功能:实现数值的加减乘除四则运算,并可以进行连续的运算[2] 算法基本思想:分成两种情况如果之前已进行过四则运算操作,则当再次点击四则运算符号的时候,相当于点击了等号直接计算出之前的值,并将相应四则运算符标志位置为有效。

第二种情况就是第一次进行四则运算,只需要保留相应数据并将相应四则运算标志位置为有效即可。

[3] 代码逻辑:(伪代码及代码分析如下)注:a1,a2,a3,a4:为了让系统知道已分别按过了加/减/乘/除按钮,使系统做相应的运算if(a为1) {if(a1有效)m_strResult =m+n ;if (a2有效) m_strResult =m-n……}m_strResult赋值给m刷新编辑框,并记录改变相应的标志位符号a4=1,flag=1,a=1,wei=0;d=0,dotbl=1;备注:由于等号的消息处理函数与四则运算符号的很相似,在报告中就不予以单独说明※算法4:优先级括号运算[1]算法功能:实现优先级括号运算,并能使用多层括号。

[2] 算法基本思想:一旦点击左括号,则开始用结构体保存相应的数值和符号现场,把他们当成一个整体,当右括号出现的时候算出结构体中结果并赋值给一个变量。

并通过结构体指针,将各个保留的现场(结构体)进行链式连接,实则这个结构也类似于一个栈,这样便可以达成多层括号的目的。

[3] 代码逻辑:(伪代码及代码分析如下)struct kuohao *newKuohao = (struct kuohao *)malloc(sizeof(struct kuohao));//在点击左括号之后,先申请一个动态的空间,并用结构体指针指向相应的地址,然后将结构体中各个成员变量赋予初值。

(由于报告要求,在这里不予以列出赋值过程)newKuohao->next = myKuoha myKuohao = newKuohao;//以上语句,是为了实现多层括号功能留有的余地,如果是第一次建立结构体,则先和mykuohao构成连接,如果已有kuohao结构体,以上操作则相当于头插法将新建立的结构体插入链头,相当于先入后出的栈。

if(myKuohao == NULL) return;//当点击右括号的时候,则开始将之前的链逐一解开,也相当于栈中的结构体依次出栈,每次出栈都将结构体中的结果算出并将以保留,这样一个一个出栈后直到myKuohao这个指针为空即栈为空的时候,此时退出函数体。

2.4 其他为了实现多层括号功能,自己采用了一种栈的模型,实际上是由结构体组成的链来构成的。

在每次点击左括号时候,建立新的结构体并保留相应的数值和符号,然后将各个结构体连接起来,此处采用了头插法。

在最后点击右括号的时候,相当于栈中的结构体依照陷入后出的规则依次出栈,直至栈空。

此功能的实现并没有使用系统自带的STL中的栈,因为其各种参数和模式较为固定,使用起来较为死板,于是自己用结构体链的形式仿制成一个栈,巧妙地实现了该功能,这也是该实验最大的亮点。

3.程序运行结果分析输入数据来源和格式:对话框中按钮点击后产生的数值和符号输出显示方式:显示在计算器的编辑框中主要界面:操作流程:该操作流程与Windows自带的标准型计算器相同,只不过编辑框是单行显示响应时间:2秒46运行效果:当输入5*(3+4)=之后由于该课题使用double类型,不能以字符串的形式将运算式均显示在编辑框中,如果老师想要验证结果可以用VC6.0运行程序后验证。

4.总结4.1课题的难点和关键点①由于第一次使用MFC,对其中各种操作形式比较陌生,即使有算法上的思路但是操作起来比较迷茫。

解决方法:自己先阅读了黄维通版的《C++面向对象的可视化操作》,待明白MFC的操作过程和原理之后才开始进行算法的实现。

②在实现了标准型计算器的基本功能之后,想要添加括号功能的时候遇到了很大的困难。

解决方法:首先自己查阅了很多优先级实现的资料,发现可以使用栈来完成以上的功能,如果调用STL标准模板类,使用起来比较死板;而如果自己去写一个栈,实现起来代码量较大并且较为复杂。

最后使用了将结构体连接的形式构成链,虽然是链结构但实际上运用的还是栈的思想,在多层括号实现过程中还采用了头插法的方式。

4.2本课题的评价实验评价:计算器的设计与实现是初学者经常会做的课题,网上也有很多版本的代码,为了与网上各种版本进行区分,自己在编辑框的类型中选择了double,并添加了多层括号的优先级功能。

虽然做的过程遇到不少困难,但是整体对自己完成情况还是比较满意,毕竟第一次做MFC的图形化操作。

不足之处:与Windows自带的计算器比较有一个不足就是编辑框的显示问题,只能单行显示,并且不能整体字符串同时显示在编辑框中,这是由于自己编辑框类型定义为double确实无法用字符串的形式,将符号与数值都更新到编辑框上。

改进方法:针对上述不足,我打算使用双行的编辑框,第一行的类型设置为CString,用来显示计算过程中的字符串,例如“1+(3+4)=”;而第二行的类型设置为double,用来显示计算结果,因为结果一般只是以数值的形式显示出来。

这种方法实现过程中会将整个代码进行大的修改,可能遇到的麻烦事情就是会涉及到double类型和CString类型之间的转换等,不过克服之后应该会实现类似windows自带计算器的那种显示模式。

4.3心得体会①关于程序的一点重要体会就是,想起来容易做起来难,其实简易计算器的设计思路很简单,就是在每个按钮结构上添加相应的消息处理函数,然后实现计算的数值和编辑框里数值的互传。

相关文档
最新文档