模拟计算器程序
模拟量快速计算工具
模拟量的输入/输出都可以用下列的通用换算公式换算: Ov = [(Osh - Osl)*(Iv - Isl)/(Ish - Isl)] + Osl 其中: Ov: Iv: Osh: Osl: Ish: Isl: 换算结果 换算对象 换算结果的高限 换算结果的低限 换算对象的高限 换算对象的低限
换算对象即可。
换算对象的低限 换算对象的高 限 换算对象
4 20 7.9
ቤተ መጻሕፍቲ ባይዱ
6400 换算结果的低限 32000 换算结果的高限 12640 换算结果
1 输入换算对象的高限和底限,再输入换算结果的高限和底限 2 输入换算对象,比如7.9,那么换算结果12640将自动显示 3 如果根据数字量计算模拟量,那么将数字量当做换算对象即可。
零基础学习PLC入门,6个指令完成模拟量程序梯形图(附程序)
零基础学习PLC入门,6个指令完成模拟量程序梯形图(附程序)这一节讲述4-20mA的模拟量信号进入西门子S7-200PLC以后,PLC怎样通过程序把它变成我们想要的实际数值。
虽然这节讲的是西门子PLC的模拟量处理程序,但道理都是一样的,你只要把程序的原理弄明白了,在其他品牌的PLC上应用也是一样的,不管是三菱的还是施耐德的都一样。
所以文章最后我会附上本节所讲的程序的下载方法,有需要的朋友可以自己下载研究。
通过上一节的学习我们知道,模拟量其实就是一个在一定数字范围内连续变化的数值。
这个数字范围绝大多数都是用4-20mA这个电流信号作为标准范围,至于为什么这样用,上一节已经讲的很清楚了,这里不再重复。
接下来看图1。
图1,的左边是一个量程范围为0-10kpa的压力变送器,它的输出电流就是0-10kpa对应4-20mA,所以压力在5kpa时对应的电流就是12mA,我们只要在电路中串联一个数字万用表就能看到电流的读数,然后我们通过这个读数,拿一个计算器通过加减乘除就能算出实际的压力是5kpa。
这就是手动的算法,如果用这种算法去算实际压力值,简直就是太老土了。
这些活只要交给PLC去干就行了,你只要把程序写好PLC就会不知疲倦的去算还不会出错,我们腾出时间看点自己想看的片片多好呢。
那怎么让PLC去算呢?很简单,我们只要做两件事就可以了。
第一,硬件部分,看图1的右边,我们只要在原来接数字万用表的地方,接一个PLC的模拟量输入模块就行了,你没看错,原理就是这样的。
它实际的接线图就是下面的图2。
在图2我们看到压力变送器和PLC的模拟量模块串联在一起,模拟量模块把接收到的4-20mA电流信号经过处理传送给PLC,这样PLC就能通过程序计算出实际的压力值了。
它的内部处理过程如下。
图3,是模拟量信号在PLC内部的处理过程和工作原理,只要能看明白这张图,我下面讲程序时你就能很容易理解了。
其实模拟量模块内部和压力变送器内部一样,都是有一块电路板。
用labview设计一个计算器(虚拟仪器)
科目:姓名:学号:院系:类别:(学术、专业)实验一Labview 计算器一、实验目的通过利用labview设计一个简易计算器熟练的掌握labview基本功能和基本操作方法。
二、实验要求利用设计的计算器可以进行简单的四则运算、可以进行平方、开根号和倒数运算、计算器可以进行清零和关闭计算器操作、在输入数据时不慎将某个数字输错可以运用BackSpace清除该值等一些基本简单的运算。
三、实验原理和框图1、前面板设计前面板是LabVIEW的图形用户界面,在LabVIEW环境中可以对这些对象的外观和属性进行设计,LabVIEW提供了非常丰富的界面对象,可以方便地设计出生动、直观、操作方便的用户界面。
本系统中前面板显示程序的输入和输出对象,即,控件和显示器。
本程序中控件主要是按钮,显示器主要是文本显示。
在前面板设计过程中先在前面板整齐排列放置22个确定按钮,将这22按钮的标签隐藏,然后修改这22个确定按钮的名字分别为:0~9十个数字、小数点、正负号、加、减、乘、除、等号、倒数、根号、清零、退格和X的Y次方。
前面板还包括一个文本显示控件用于显示计算的结果和计算器的某些提示,通过改变显示控件的大小使之于计算器的大小相适应。
计算器的前面板还有程序框图中while循环的停止按钮,当按钮按下时计算器停止工作退出到LabVIEW的编辑界面。
为了前面板的美观和防止按钮的移动,分别将前面板的各个按钮和文字进行组合和对前面板进行装饰,装饰采用修饰中的平面框。
如下图所示:2.后面板设计程序框图对象包括接线端和节点,将各个对象连线连接便创建了程序框图,接线端的颜色和符号表明了相应输入控件或显示控件的数据类型。
程序框图是程序的核心,程序要实现的功能都是通过程序框图反应出来的。
本课程设计的程序框图主要运用了while循环、时间结构、条件结构和平铺顺序等结构。
通过上图可以看出当小数点按钮按下时,0.和存临时数据通过字符串连接控件将两者连接到一起;小数点按钮没有按下时,临时数据和小数点通过字符串连接按钮也将两者连接在一起,将连接到一起的数据送到显示控件。
计算机c语言实训报告
计算机c语言实训报告计算机c语言实训报告(通用3篇)计算机c语言实训报告篇1一、课题名称:简洁计算器设计一个简洁的程序来模拟计算器的功能。
二、设计目的:1、通过理论学问与实际需求相结合,编辑解决一些日常中的实际问题,培育初步的独立分析和设计力量。
2、了解应用程序设计解决实际问题的详细过程和实现方法,把握应用C语言进行程序设计的基本规范;3、重点把握C语言的程序编写、函数设计、算法设计和程序调试方法;4、初步把握系统开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
三、设计任务:1、通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、_、等运算符号),然后将其信息存入文件中。
输入一个算术计算式,就在屏幕上显示结果。
2、输入简洁的加减乘除算术计算式,并在屏幕上显示计算结果;四、设计要求:1、用C语言实现程序设计并进行调试;2、画出查询模块的流程图;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机互交)。
5、完成设计说明书(A4)。
五、代码设计:#include stdio.h main { float x,y;char operator;printf(x,yun suan fu ,y: ); scanf(%f%c%f,x,operator,y); switch(operator){case +: printf(%.2f+%.2f=%.2f,x,y,x+y); break; case -:printf(%.2f-%.2f=%.2f,x,y,x-y); break; case _:printf(%.2f_%.2f=%.2f,x,y,x_y); break; case /: if(y==0)printf(chushushilingwuyiyi); elseprintf(%.2f/%.2f=%.2f,x,y,x/y); break;default: printf(yunsunfuwuxiao); } }?七、设计总结:学习C程序这门课一个学期了,这是我们学的第一门专业课,所以作为我这个计算机系的同学来说当然非常重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我初步把握了一些关于这门课的学问这次的课程设计是对我们一个学期来所学的学问的综合考察,里面涉及到了我们大多数所学学问。
模拟计算器
摘要计算器是微型计算机的一种特殊类型,它与一般通用计算机的主要区别在于程序输入的方式不同计算机的程序一般都已经固定,只需按键输入数据和运算符号就会得出结果,很容易就能掌握。
而一般计算机的程序可以根据需要随时改动,或重新输入新的程序。
简易计算器主要用于加减乘除。
科学计算器,又增添了初等函数运算(有的还带有数据总加、求平均值等统计运算)。
现代电子计算器首次问世是1963年。
那时的计算器是台式的,在美国波士顿的电子博览会上展出过。
与计算机相比,它小巧玲珑,计算迅捷,一般问题不必事先编写复杂的程序。
随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器/计数器、并行和串行接口、看门狗、前置放大电路、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。
随着社会需求,计算器也从原有单一的数字加减计算演变为复杂的多种计算。
现在不再单一的在某一方面,而是涉及到生活的方方面面。
本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果数码管上显示出来数据和结果,能够实现个位数的四则运算。
本设计是用单片机STC89C52来控制,采用共阳极数码管显示,软件部分是由C语言来编写的。
关键词STC89C52 计算器显示器单片机目录第一章绪论1.1 课题研究的可行性当今时代,是一个新技术层出不穷的时代。
在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。
7-11模拟电子计算器
模拟电子计算器功能简介:简易电子计算器输入按键为4*4矩阵键盘,显示为8位数码管。
只可输入正数,可连续计算,计算结果只能是整数。
输入大于4位报警,发光二极管作为按键输入提示。
计算结果最大32767,最小-32768,超过计算范围计算结果溢出。
1、电源电路(1)电源电路电源电路采用集成稳压器L7805三端稳压电路,三条引脚输出,分别是输入端、接地端和输出端,它的1、3角接整流二极管IN4007主要是因为IN4007能承受很大的反向电流对整个电源起到保护作用,C1 、C2分别是输入和输出端滤波电容。
(2)采用L7805优点该系列集成稳压IC型号中的78后面的数字代表该三端集成稳压电路的输出电压,如7805表示输出电压为正5V。
三端稳压器件来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。
引脚号标注方法是按照引脚电位从高到底的顺序标注的。
这样标注便于记忆。
引脚①为最高电位,②脚为最低电位,不论正压还是负压,③脚均为输出端。
2、显示电路:显示电路主要由数码管及段码限流电阻R5~R12和位选驱动电路组成,数码管为四位一体共阳数码管,为动态扫面显示。
位选驱动为PNP型三极管驱动。
单片机给基极低电平三极管导通,对应的数码管选通供电,显示内容取决于段码的内容。
3、串口通讯电路串口通讯用MAX232实现TTL电平和PC电平之间的转换。
其中C8电容为退耦电容,C6、C7、C9、C10电容构成电荷泵电路,功能为产生+12V和—12V两个电源。
4、键盘输入电路简易电子计算器输入按键为4*4矩阵键盘。
共用八个IO端口,四个行扫描和四个列扫描,完成16按键的识别与输入。
5、单片机处理电路单片机电路包括复位电路,时钟电路和中央处理器电路组成,复位电路为上电复位及手动复位。
工作原理为系统刚上电时,由于电容两端的电压不能突变电容C5可以近似看成短路状态,这时RST端电压为Urst=(R14/(R13+R14))*Vcc为高电平,电容C5通过电阻R13及R14不断充电,当C5充满电时RST为低电平,单片机完成上电复位过程。
模拟计算器
t="";
int h=0;
for(m=j;m<i;m++) t=t+s[m];
number[p] = stringToNumber(t);;
do
{
if (s[i]==')')
{
*/
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
const int maxn=100;
int number[maxn];
char symbolt[maxn];
string s,t;
while (symbolt[p]!='(') pop();
p--;
number[p]=number[p+1];
}
else
{
while (can()) pop();
push();
}
i++;
case '*':{number[p]=number[p]*number[p+1];break;}
case '/':{number[p]=number[p]/number[p+1];break;}
}
}
bool can()
{
if (((s[i]=='+')||(s[i]=='-'))&&symbolt[p]!='(')) return true;
数据结构实验报告总结
数据结构实验报告总结设计题目:模拟计算器程序学生姓名:谢先斌系别:计算机与通信工程学院专业:计算机科学与技术班级:1班学号:541007010144指导教师:卢冰李晔XX 年 6 月 21 日郑州轻工业学院课程设计任务书题目模拟计算器程序专业、班级计算机科学与技术10-01班学号541007010144 姓名谢先斌主要内容:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。
基本要求:要检查有关运算的条件,并对错误的条件产生报警。
主要参考资料:严蔚敏吴伟民编著《数据结构(C语言版)》清华大学出版社第44页栈、第52页表达式求值完成期限: XX年6月21日指导教师签名:课程负责人签名:XX年 6月 21 日一、设计题目模拟计算器的程序设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。
设计要求:要检查有关运算的条件,并对错误的条件产生报警。
二、算法设计的思想本程序设计主要是应用了栈,利用栈的“先进后出”原理,建立了两个栈,分别为运算符栈pOStack和运算数栈pDStack。
算法的基本思想(参考课本p53页)是:(1) 首先置操作数栈为pDStack空栈,表达式起始符为“=”,位运算符栈的栈底元素;(2) 依次读入表达式中的每个字符,若是操作数则进入pDStack栈,若是运算符则和pOStack栈的栈定运算符比较优先权后作相应操作,直到整个表达式求值完毕(即pOStack栈的栈定元素和当前读入的字符均为“=” )。
三、算法的流程图本程序的流程如下附图1所示:附图1 程序流程图四、算法设计分析首先创建了两个栈:typedef struct OPStack //定义运算符栈{char opStack;int top;}OPStack, *pOPStack;typedef struct DATAStack //定义运算数栈{double stack;int top;}DATAStack, *pDATAStack;来分别存放运算符和运算数。
简易计算器的设计
学号:课程设计题目简易计算器的设计学院自动化专业电气工程及其自动化班级姓名指导教师2014 年1月9日课程设计任务书学生姓名:专业班级:指导教师:工作单位:自动化学院题目: 简易计算器的设计初始条件:用8086CPU、8255A并行通信接口、七段LED数码管接口、小键盘控制电路接口、外围电路芯片及元器件实现一个简易计算器,完成相应的程序编写。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)可进行2位十进制的加减乘除法运算。
(2)键盘输入数据,同时LED数码管显示,模拟计算器的工作。
(3)键盘上要求有0~9数字键,+、-、×、÷、=功能键,清除键C。
(4)撰写课程设计说明书。
内容包括:摘要、目录、正文、参考文献、附录(程序清单)。
正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软件思想,流程,源程序设计及说明等)、程序调试说明和结果分析、课程设计收获及心得体会。
时间安排:12月26日----- 12月 28 日查阅资料及方案设计12月29日----- 1 月 2 日编程1 月 3日----- 1 月 7日调试程序1 月 8日----- 1 月 9日撰写课程设计报告指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 (1)1设计的任务及要求 (2)2方案的设计 (3)2.1方案设计论证 (3)2.2方案概述与原理硬件电路图 (3)3系统模块与功能 (5)3.18086CPU芯片 (5)3.2 8255A 并行通信接口芯片 (5)3.3 译码电路 (6)3.4 小键盘电路 (6)3.5 四位七段 LED 数码管显示电路 (7)4软件设计框图与程序 (8)4.1计算器系统程序总体流程图 (8)4.2 模块程序流程图与程序 (8)4.2.1流程图 (8)4.2.2键盘扫描流程图 (9)4.3输入运算 (10)4.3.1输入运算的流程图 (10)4.3.2输入运算程序 (10)4.4显示部分 (11)4.4.1显示部分流程图 (11)4.4.2显示部分程序 (12)5系统仿真 (14)6小结与体会 (15)参考文献 (16)附录:设计源程序 (17)本科生课程设计成绩评定表摘要这次微机原理的课程设计的题目是简易计算器的设计,设计一个可以实现2位十进制加减乘除运算功能的电路,并用LED显示出来。
PTA简单计算器(C语言)
8{
9
scanf("%d",&b);
10
if(c=='/'#34;ERROR\n");
12
return 0;
13
}
14
switch(c)
15
{
16
case '+':a=a+b;break;
17
case '-':a=a-b;break;
18
case '*':a=a*b;break;
输出格式: 在一行中输出算式的运算结果,或者如果除法分母为0或有非法运算符,则输出错误信息“ERROR”。
输入样例: 1+2*10-10/2= 输出样例: 10
1 #include<stdio.h>
2 int main()
3{
4 int a,b;
5 char c;
6 scanf("%d",&a);
7 while((c=getchar())!='=')
假设计算器只能进行加减乘除运算运算数和结果都是整数四种运算符的优先级相同按从左到右的顺序计算
PTA简单计算器( C语言)
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数。遇等号”=”说明输入结束。
19
case '/':a=a/b;break;
20
default:printf("ERROR\n");return 0;
模拟电子计算器OK
项目7 “模拟电子计算器”的组装、调试与制作7.1 实践目的通过对“模拟电子计算器”机的组装、调试与制作,掌握“模拟电子计算器”的工作原理,提高元器件识别、测试及整机装配、调试的技能,增强综合实践能力。
7.2 实践要求1.掌握和理解“模拟电子计算器”原理图各部分电路的具体功能,提高看图、识图能力;2.对照原理图和PCB板,了解“模拟电子计算器”元器件布局、装配(方向、工艺等)和接线等;3.掌握调试的基本方法和技巧;学会排除焊接、装配过程中出现的各种故障,解决碰到的各种问题。
4.熟练使用各种常用仪器、仪表和电子工具,掌握元器件和整机的主要参数、技术或性能指标等的测试方法;5.解答“思考与练习题”,进一步增强理论联系实际能力。
7.3 “模拟电子计算器”原理简介“模拟电子计算器”输入按键为4×4矩阵键盘,显示采用8位数码管。
只可输入正数,可连续计算,计算结果只能是整数。
输入大于4位报警,发光二极管作为按键输入提示。
计算结果最大32767,最小-32768,若超过计算范围计算结果溢出。
“模拟电子计算器”的键盘布局如图7.1所示,图7.1(a)是各键盘在PCB板上的位置,图7.1(b)是与图7.1(a)相对应的各键盘的定义。
(a) 键盘在PCB板上的位置(b)各键盘的定义图7.1 键盘布局“模拟电子计算器”的电路原理如图7.2所示,主要由电源电路、显示电路、串口通信电路、键盘输入电路、单片机处理电路、状态指示电路及蜂鸣器驱动电路组成,各部分电路工作原理如下:图7.2 “模拟电子计算器”的电路原理图“模拟电子计算器”的电源电路、串口通信电路、单片机处理电路与前面章节相似,在此不在赘述。
1.显示电路显示电路如图7.3所示,主要由数码管及段码限流电阻R5~R12和位选驱动电路组成,数码管为四位一体共阳数码管,为动态扫描显示。
位选驱动选用PNP型三极管,单片机给基极低电平三极管导通,对应的数码管选通,显示内容取决于段码的内容。
C语言编程-简单的计算器
int i=0;
a[0]='$';
printf("请输入表达式,退出请输入q:\n\n");
scanf("%c",&x);
if(x=='q') break;
while(x!='\n')
{
a[++i]=x;
scanf("%c",&x);
}
a[i+1]='\0';
jieguo=jisuan(a);
}
j=j+1;
x=z;
if(a[j]=='.')
{
l=1;
i=j+1;
j=i+1;
while(a[j]>='0'&&a[j]<='9')
{j++;}
j--;
for(k=i;k<=j;k++)
{
n=pow(0.1,l);
l=l+1;
x=x+n*(a[k]-'0');
}
i=j+1;
}
else i=j;
shu.data[++shu.top].d1=x;
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
else if(a[i]=='*'||a[i]=='/')
C语言简单计算器的编写课程设计
2013-2014学年第二学期《高级语言程序设计》课程设计报告题目:简单计算器专业:数字媒体技术班级:13级1班姓名:邢洪波指导教师:王辉成绩:计算机与信息工程系二0一四年二月二十日1设计内容及要求1.1 利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。
在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。
在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。
1.2 运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。
程序基本功能要求实现完整,并有简单的验证。
程序还须有符合标准的程序设计报告。
2概要设计2.1系统流程图2.1 系统流程图2.2主要功能表2.2 主要功能表3设计过程或程序代码#include<stdio.h>#include<math.h>#include<malloc.h> /*malloc的头文件代表在内存中开辟存储空间*/double jisuan(char a[]){int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;/*定义整型变量i,j,k,m,n,cnt,t1,t2,t3*/char nibo[50],zhan2[50];/*定义字符型数组*/double x,n,l,z=0,zhan3[50];/*定义双精度变量x,n,l,z,zhan3[50]*/typedef struct /*表示可以用con定义结构体变量*/{double d1;int d2;}dd;typedef struct{dd data[50];int top;}zhan1;zhan1 *shu;/*定义指针变量*/shu=(zhan1 *)malloc(sizeof(zhan1));shu->top=0;while(a[i]!='\0') /*外循环是用while语句*/{if(a[i]>='0'&&a[i]<='9') /*内循环使用if-else语句*/{z=0;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){z=z*10+a[k]-'0';}j=j+1;x=z;if(a[j]=='.'){l=1;i=j+1;j=i+1;while(a[j]>='0'&&a[j]<='9') /*内循环使用各种循环语句的嵌套*/{j++;}j--;for(k=i;k<=j;k++){n=pow(0.1,l);l=l+1;x=x+n*(a[k]-'0');}i=j+1;}else i=j;shu->data[++shu->top].d1=x;shu->data[shu->top].d2=++cnt;nibo[++t1]='0'+shu->data[shu->top].d2;nibo[t1+1]='\0';}else if(a[i]=='('){zhan2[++t2]=a[i];i++;}else if(a[i]==')'){j=t2;while(zhan2[j]!='('){nibo[++t1]=zhan2[j];nibo[t1+1]='\0';j--;}t2=j-1;i++;}else if(a[i]=='+') /*对加法的定义*/{while(t2>0&&zhan2[t2]!='(') /*定义当加号和括号同时出现时*/{nibo[++t1]=zhan2[t2];/*将zhan2[t2]赋给nibo[++t2]*/nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='-') /*对减法的定义*/{if(a[i-1]=='$'){a[0]='0';i=0;}else if(a[i-1]=='('){a[i-1]='0';a[i-2]='(';i=i-2;t2--;}else{while(t2>0&&zhan2[t2]!='(') /*对括号的定义*/{nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}else if(a[i]=='*'||a[i]=='/') /*对乘法和除法的定义*/{while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[ t2]=='#') /*逻辑运算*/{nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}else if(a[i]=='^'||a[i]=='#') /*逻辑运算中的或运算*/{while(zhan2[t2]=='^'||zhan2[t2]=='#'){nibo[++t1]=zhan2[t2];nibo[t1+1]='\0';t2--;}zhan2[++t2]=a[i];i++;}}while(t2>0){nibo[++t1]=zhan2[t2]; /*将的zhan2[t2]值赋给nibo[++t1]*/nibo[t1+1]='\0'; /*碰到'\0'结束部分程序的运算*/t2--;}j=1;t3=0;while(j<=t1){if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#'){for(i=1;i<=shu->top;i++){if((int)(nibo[j]-'0')==shu->data[i].d2){m=i;break;}}zhan3[++t3]=shu->data[m].d1;}else if(nibo[j]=='+') /*对加法的定义*/{zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];t3--;}else if(nibo[j]=='-') /*对减法的定义*/{zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];t3--;}else if(nibo[j]=='*')/*对乘法的定义*/{zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];t3--;}else if(nibo[j]=='/') /*对除法的定义*/{zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];t3--;}else if(nibo[j]=='^') /*对乘方的定义*/{zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);t3--;}else if(nibo[j]=='#') /*对开方的定义*/{zhan3[t3]=sqrt(zhan3[t3]);}j++;}return zhan3[t3];/*返回值*/}void main(){for(;;){char x,a[50];double jieguo;int i=0;a[0]='$';printf("#表示开方,^表示乘方(支持负数)\n");/*对乘方和开方的定义*/printf("请输入表达式无需输入 = 号直接回车可输出答案退出请输入q \n\n");scanf("%c",&x);if(x=='q') break;while(x!='\n') /*碰到'\0'结束部分程序的运算*/{a[++i]=x;scanf("%c",&x);}a[i+1]='\0';jieguo=jisuan(a);printf("\n");printf("结果为:%lf",jieguo);printf("\n\n\n");printf("退出请输入q 继续请直接输入\n\n");}}4设计结果与分析系统测试结果如下:根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。
C语言项目三 基本语句——模拟计算器
任务3.1 启动计算器
任务实施
(4)程序编码:
system("color 0A"); printf("\t\t\t\t欢迎使用计算器\n"); printf("请输入第一个操作数:"); scanf("%d",&a); printf("请输入第二个操作数:"); scanf("%d",&b); printf("%d+%d=%d\n",a,b,a+b); printf("%d-%d=%d\n",a,b,a-b); printf("%d*%d=%d\n",a,b,a*b);
修改任务一,使得计算机可以根据用户输入的运算符进行计算。
任务3.2 进行一次计算
任务准备
选择语句有两种:一种是 if语句,另一种是switch 语句。选择语句有判 断能力,主要通过判断来对程序的流程进行选择。 关系运算符和关系表达式
关系运算符与中学学习的比较运算符基本一致,主要用于比较两个操作 数之间的大小关系。 表3.1 关系运算符
任务3.1 启动计算器
任务准备
编译预处理 3、 宏定义命令 宏定义命令是用来将一个标识符定义为一个字符串,标识符被称为宏名 ,被定义的字符串被称为替换文本。宏定义有两个格式:简单宏定义和 带参数的宏定义。 (1)简单宏定义 #define <宏名> <字符串> 例如:#define PI 3.1415926 一个标识符(PI)被定义为宏后,标识符PI便是宏名。在程序中凡是出 现PI的地方,先将PI替换为3.1415926,这称为红替换,替换后才进行编 译。宏替换只是简单的替换,不好自动加上括号或其他符号。
JAVA课程设计题目
JAVA课程设计题目Java课程设计题目一、课程设计总体要求:本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计前学生一定要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
通过编写一个基于JA V A的应用系统综合实例,来掌握Java语言编程技巧。
二、参考题目及要求:1、编写一个记事本程序要求:用图形用户界面实现。
能实现编辑、保存、另存为、查找替换等功能。
提示:使用文件输入输出流。
2、模拟龟兔赛跑要求:用图形用户界面实现。
能设置比赛时间,马匹的数量等等。
在任意时间段内马匹的速度是随机的。
开始比赛之后以动画显示赛马过程。
提示:使用多线程3、学生信息管理系统要求:使用图形用户界面用数据库建立1或2个学生信息表。
(不限使用哪种数据库)能连接数据库并实现查询、增、删、改等功能。
4、图书信息管理系统要求:使用图形用户界面用数据库建立1或2个图书信息表。
(不限使用哪种数据库)能连接数据库并实现查询、增、删、改等功能。
5、聊天小程序要求:使用图形用户界面。
能实现一个聊天室中多人聊天。
可以两人私聊。
提示:使用socket通信6、ATM柜员机模拟程序要求:使用图形用户界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:1、查询余额:初始余额为10000元2、A TM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3、A TM存款:不能出现负存款。
4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
7、超市收银系统要求:使用图形用户界面。
由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。
从数据库中取出有关价格信息,再把这些信息返回给收银台。
C++模拟计算器功能的程序
#include<iostream>#include<string.h>#include<stdlib.h>using namespace std;/*栈*/template <class T>class CStack{public:int m_count;T * m_arr;int m_curposition;CStack(int count){m_arr = new T [count];m_count = count;m_curposition = -1;}bool push(T val){if(m_curposition == m_count-1) return false;m_arr[++m_curposition] = val; }T pop(){if(IsEmpty())return 0;return m_arr[m_curposition--]; }T GetElement(){if(IsEmpty())return 0;return m_arr[m_curposition];}bool IsEmpty(){if(m_curposition < 0)return true;return false;}~CStack(){delete [] m_arr;}};/* 操作函数定义*/bool ExpressionIsRight(char * pExpression); // 表达式是否正确bool ProcessExpression(char * pExpression); // 处理表达式int GetIndex(char ch); // 获取操作符在数组中的下标void Calculate(); // 计算double GetResult(); // 得到结果bool IsEnd(char ch); // 表达式是否结束double GetNum(char *pStr, int & i); // 获取操作数CStack<char> stack_sign(100); // 运算符栈CStack<double> stack_num(100); // 操作数栈//运算符号优先级表int PriTbl[7][7]={{1,1,-1,-1,-1,1,1},{1,1,-1,-1,-1,1,1},{1,1,1,1,-1,1,1},{1,1,1,1,-1,1,1},{-1,-1,-1,-1,-1,0,2},{1,1,1,1,2,1,1},{-1,-1,-1,-1,-1,2,0}};void main(){char strExpression[100];cout << "请输入算术表达式(请注意,括号应在英文输入法下输入,否则会出现错误):"; cin >> strExpression; // 输入表达式if(!ProcessExpression(strExpression)) // 处理表达式{cout << "表达式错误!" << endl;}elsecout << "计算结果:" << GetResult() << endl; // 输出结果}bool ExpressionIsRight(char * pExpression){int len = strlen(pExpression);char arr[7] = {'+','-','*','/','(',')','.'};for(int i=0; i<len; i++){if(!(pExpression[i]>='0' && pExpression[i]<='9')){if(pExpression[0] == '.' || pExpression[len-1] == '.')return false;int flag = 0;for(int j=0; j<sizeof(arr); j++){if(pExpression[i] == arr[j]){flag = 1;break;}}if(flag == 0)return false;}}return true;}bool ProcessExpression(char * pExpression){if(!ExpressionIsRight(pExpression))return false;int len = strlen(pExpression);pExpression[len++] = '#';stack_sign.push('#');if(len == 1)return false;for(int i=0; i<len; i++){if(pExpression[i] >= '0' && pExpression[i] <= '9') // 操作数{double val = GetNum(pExpression, i);stack_num.push(val);}else // 操作符{int pre = GetIndex(stack_sign.GetElement());int next = GetIndex(pExpression[i]);switch(PriTbl[pre][next]){case -1: // next > prestack_sign.push(pExpression[i]);break;case 0: // next = preif(IsEnd(pExpression[i]))return true;stack_sign.pop();break;case 1: // next < preCalculate();i--; // backbreak;}}}return true;}double GetNum(char *pStr, int & i){char Nums[100];int j = 0;while((pStr[i] >= '0' && pStr[i] <= '9') || pStr[i]=='.') Nums[j++] = pStr[i++];i--;Nums[j] = '\0';return atof(Nums);}int GetIndex(char ch){switch(ch){case '+': return 0;case '-': return 1;case '*': return 2;case '/': return 3;case '(': return 4;case ')': return 5;case '#': return 6;}}void Calculate(){double num1, num2;num2 = stack_num.pop();if(stack_num.IsEmpty()){cout << "表达式错误!" << endl;exit(0);}num1 = stack_num.pop();switch(stack_sign.pop()){case '+': stack_num.push(num1+num2);return;case '-': stack_num.push(num1-num2);return;case '*': stack_num.push(num1*num2);return;case '/':{if(num2 == 0){cout << "除数不能为0!程序终止!" << endl;exit(0);}stack_num.push(num1/num2);return;}}}bool IsEnd(char ch){if(ch == '#')if(stack_sign.GetElement() == ch)return true;return false;}double GetResult(){if(stack_sign.GetElement() != '#'){cout << "表达式错误!" << endl;exit(0);}return stack_num.GetElement();}。
java程序设计报告
程序设计课程设计报告设计题目:计算器模拟程序专业班级:信管学号:姓名:指导教师:郭春燕时间:2011.06.13-2011.06.24摘要计算器模拟程序课程项目是在JAVA学习过程一项要的内容,它涵盖了对JAVA内容学习的考察,同时通过实验项目,也加强了学生的动手能力。
进一步加深对Java语言的理解和掌握,把自己所学的理论知识运用到实际应用中去。
计算器模拟程序是一个小的计算算程序,包括日常我们用到的一些计算方法。
主要研究的是加法、减法、乘法、出发、三角函数、阶乘、以及次方等。
采用的是JAVA语言进行编写,引用JAVA自带数据库中swt包与math包中的一些构造类与函数类,然后自己构造板块和模型,从而完成自己的程序设计项目。
目录一、课题概述.............................................................................................................................. - 3 -1、课题任务........................................................................................................................ - 3 -2、课题目的........................................................................................................................ - 3 -3、课题要求........................................................................................................................ - 3 -二、设计思路及采取的方案...................................................................................................... - 4 -1、总体设计思想................................................................................................................ - 4 -2、实验方案........................................................................................................................ - 4 -三、实验结果............................................................................................................................ - 16 -四、总结体会............................................................................................................................ - 16 -1、遇到的难题.................................................................................................................. - 16 -2、一些应用中的技巧...................................................................................................... - 16 -3、心得体会与收获.......................................................................................................... - 17 -一、课题概述1、课题任务自主设计与编写一个计算机模拟程序,实现一个简单的计算器程序,能够进行简单的数据运算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(n=0;n < k;n++)
{
send_data(str[n]);//显示汉字时注意码值,连续两个码表示一个汉字
}
}
lcd_temp=*(++str);
}
}
/********************写字符串******************/
//写字符串子程序
//xpos1取0~7共八列,ypos1取0~3共四行。
{
unsigned char lcd_temp;
set_xy(x,y);
lcd_temp=*str;
while(lcd_temp != 0x00)
{
send_dataห้องสมุดไป่ตู้lcd_temp);
//复位、通讯方式选择
/************************************************/
void lcd_init(void)
{
SETB(CONTROL,RST);//复位RST=1
SETB(CONTROL,PSB); //通讯方式为并口PSB = 1
//测忙碌子程序
//RS=0,RW=1,E=H,D0-D7=状态字
/************************************************/
void chek_busy(void)
{ unsigned char temp1;//状态信息(判断是否忙)
/************************************************/
void send_data(unsigned char dat)
{
chek_busy();
SETB(CONTROL,RS); //RS = 1;
#define uchar unsigned char
#define uint unsigned int
uchar fu,ql,m,m2,t;
sbit key1= P3^2; //按键K1
sbit key2= P3^3; //按键K2
/********************清屏************************/
//清屏
/************************************************/
CLRB(CONTROL,RW); //RW = 0;
DATA = dat;
SETB(CONTROL,E); //E = 1;
CLRB(CONTROL,E); //E = 0;
}
/********************初始化**********************/
#define RW 1 //并行的读写信号 sbit RW = P0^6
#define RS 0 //并行的指令数据选择信号 sbit RS = P0^5
#define PSB 3 //并/串行接口选择 sbit PSB = P0^4
void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);
//unsigned char code shu[10] ={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
SETB(CONTROL,E); // E = 1;
DATA=0xFF;
}
/********************写命令**********************/
//写命令子程序
//
/************************************************/
send_com(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
}
/*******************************************************************/
// 设置显示位置 xpos(1~16),tpos(1~4)
//unsigned char code fuh[5] ={0x2b/*+*/,0x2d/*-*/,0x2a/***/,0x2f/*chu*/,0x2e/*.*/};
#define DATA P0
#define CONTROL P2
#define E 2 //并行的使能信号 sbit E = P0^7
SETB(CONTROL,E); //E = 1;
CLRB(CONTROL,E); //E = 0;
}
/********************写数据**********************/
//写数据子程序
//
#include<reg52.h>
#include <math.h>
void lcd_init(void); //初始化lcm
void clr_lcd(void); //清屏
void send_com(unsigned char cmd);
// 在指定位置显示字符串
/*******************************************************************/
void print(unsigned char x,unsigned char y,char* str)
case 4:
send_com(0X98|xpos);break;
default:break;
}
}
/*******************************************************************/
{
case 1:
send_com(0X80|xpos);break;
case 2:
send_com(0X90|xpos);break;
case 3:
send_com(0X88|xpos);break;
sbit key3= P3^4; //按键K3
sbit key4= P3^5; //按键K4
sbit key5= P3^6; //按键K5
sbit key6= P3^7; //按键K6
/********************测忙碌**********************/
/*******************************************************************/
void set_xy(unsigned char xpos,unsigned char ypos)
{
switch(ypos)
CLRB(CONTROL,RS); // RS = 0;
SETB(CONTROL,RW); // RW = 1;
SETB(CONTROL,E); // E = 1;
do{temp1 = DATA;DATA=0xFF;} while(temp1&0x80);
send_com(0x30);//功能设置,一次送8位数据,基本指令集
send_com(0x0C);//0000,1100 整体显示,游标off,游标位置off
send_com(0x01);//0000,0001 清DDRAM
send_com(0x02);//0000,0010 DDRAM地址归位
/**********************************************/
void printstr(unsigned char xpos,unsigned char ypos,unsigned char
str[],unsigned char k)
void send_com(unsigned char cmd)/*写命令*/
{
chek_busy();
CLRB(CONTROL,RS); //RS = 0;
CLRB(CONTROL,RW); //RW = 0;
DATA = cmd;
case 3: xpos |= 0x88;break; //第三行
case 4: xpos |= 0x98;break; //第四行
default: break;
}
send_com(xpos);
void send_data(unsigned char dat);
void chek_busy(void); //检测忙
void set_xy(unsigned char xpos,unsigned char ypos); //光标位置
void print(unsigned char x,unsigned char y,char* str); //
#define RST 5 //复位 低电平有效 sbit RST = P0^3
#define SETB(x,y) (x|=(1<<y))
#define CLRB(x,y) (x&=(~(1<<y)))
#define CHKB(x,y) (x&(1<<y))
{ unsigned char n;
switch (ypos)
{ case 1: xpos |= 0x80;break; //第一行