加减乘除计算器
JavaFx-编写一个简单的计算器,实现加减乘除

JavaFx-编写⼀个简单的计算器,实现加减乘除0.题⽬描述编写⼀个简单的计算器,完成加、减、乘、除的功能1.源代码import javafx.application.Application;import javafx.stage.Stage;import yout.HBox;import yout.BorderPane;import bel;import javafx.scene.control.TextField;import javafx.scene.control.Button;import javafx.scene.Scene;import javafx.geometry.Insets;import javafx.geometry.Pos;public class Test2 extends Application {private TextField num1 = new TextField();private TextField num2 = new TextField();private TextField res = new TextField();private Button btAdd = new Button("Add");private Button btSub = new Button("Subtract");private Button btMul = new Button("Multiply");private Button btDiv = new Button("Divide");@Overridepublic void start(Stage primaryStage) {HBox top = new HBox();top.setAlignment(Pos.CENTER);top.setPadding(new Insets(5,10,5,10));top.setSpacing(10);top.getChildren().addAll(new Label("Number1"),num1,new Label("Number2"),num2,new Label("Result"),res);HBox bottom = new HBox();bottom.setAlignment(Pos.CENTER);bottom.setPadding(new Insets(5,10,5,10));bottom.setSpacing(10);bottom.getChildren().addAll(btAdd,btSub,btMul,btDiv);BorderPane pane = new BorderPane();pane.setTop(top);pane.setBottom(bottom);btAdd.setOnAction(e -> Add());btSub.setOnAction(e -> Sub());btMul.setOnAction(e -> Mul());btDiv.setOnAction(e -> Div());Scene scene = new Scene(pane, 900, 80);primaryStage.setResizable(false);primaryStage.setScene(scene);primaryStage.setTitle("Calculator");primaryStage.show();}private void Add() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1+n2));}private void Sub() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1-n2));}private void Mul() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1*n2));}private void Div() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1/n2));}public static void main(String[] args) {unch(args);}}2.运⾏结果3.技术总结 上半部分放⼊⼀个HBox中,下半部分放⼊⼀个HBox中。
计算器使用方法

计算器使用方法计算器是一种常用的工具,尤其在统计学领域。
无论是进行简单的计算,还是处理复杂的统计数据,计算器都可以发挥重要的作用。
下面是统计学中常用的计算器使用方法。
第一步:了解计算器基础功能在开始使用计算器之前,首先需要了解计算器的基本功能。
计算器通常拥有加减乘除四则运算,以及开平方、倒数、百分比等功能。
通过熟悉计算器的基础功能,可以更好地应用它们进行统计学计算。
第二步:使用基本计算功能计算器可以进行基本的四则运算,如加法、减法、乘法和除法。
这些基本计算功能在统计学中经常使用,例如计算平均值、求和、标准差等。
使用计算器进行基本计算时,需要按照正确的数学运算规则进行操作,以确保结果的准确性。
第三步:使用科学计数法和指数运算统计学中经常处理的数据量很大或很小,因此使用科学计数法和指数运算可以更方便地进行计算。
计算器通常提供科学计数法和指数运算的功能,通过合理使用这些功能,可以避免计算过程中出现数字溢出或精度丢失的问题。
第四步:使用函数和变量计算器通常还提供一些常见函数和变量,用于解决统计学中的特定问题。
例如,计算器可以提供计算阶乘、组合数、排列数等的函数。
此外,计算器还可以存储常用的变量,使得重复计算时更加方便。
熟悉这些函数和变量的使用方法,可以提高统计学计算的效率。
第五步:使用统计学专用计算器除了普通计算器,还有一些专门针对统计学需求设计的计算器。
这些计算器通常具有更多的统计学功能,如假设检验、方差分析、回归分析等。
熟悉并掌握这些专业计算器的使用方法,可以帮助完成更加复杂的统计学计算任务。
第六步:了解错误和误差处理在统计学计算中,错误和误差是难以避免的。
因此,学会处理计算中的错误和误差是非常重要的。
计算器通常会在计算过程中给出提示或错误信息,熟悉这些提示和错误信息的含义,可以及时发现和修正错误,提高计算的准确性。
第七步:熟练操作和反复练习使用计算器需要一定的熟练度,只有通过反复练习才能真正掌握。
用java代码写的简易计算器(可以实现基本的加减乘除功能)

⽤java代码写的简易计算器(可以实现基本的加减乘除功能)package A;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.*;public class Calcular3 extends JFrame implements ActionListener,MouseListener{private int m1=0,n=0;//private double m2=0;//运算的数private int flag=0;JFrame f;JPanel p1,p2,p3;JTextField t;JButton b1[]=new JButton[18];String b[]= {"1","2","3","4","5","6","7","8","9","0","清空","退格",".","=","+","-","*","/"};public Calcular3(){f=new JFrame("计算器");t=new JTextField(35);p1=new JPanel();p2=new JPanel();p3=new JPanel();f.setBounds(100, 100, 400, 200);f.add(p1,BorderLayout.NORTH);f.add(p2,BorderLayout.CENTER);f.add(p3,BorderLayout.EAST);p2.setLayout(new GridLayout(5,3));p3.setLayout(new GridLayout(4,1));p1.add(t);for(int i=0;i<14;i++) {b1[i]=new JButton(b[i]);p2.add(b1[i]);b1[i].addActionListener(this);}for(int i=14;i<18;i++) {b1[i]=new JButton(b[i]);p3.add(b1[i]);b1[i].addActionListener(this);}/*for(int i=0;i<18;i++) {b1[i].addActionListener(this);}*/f.setVisible(true);}//实现接⼝的⽅法public void mouseClicked(MouseEvent e) {}public void mousePressed(MouseEvent e) {}public void mouseReleased(MouseEvent e) {}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void actionPerformed(ActionEvent e) {String str="";int i;for(i=0;i<=9;i++) {if(e.getSource()==b1[i]) {if(i==9) {n=n*10;}else {n=n*10+i+1;}str=String.valueOf(n);//整形n转换成字符串strt.setText(str);//显⽰到⽂本框上}}for(i=14;i<18;i++) {//+、-、*、/if(e.getSource()==b1[i]) {//匹配运算符m1=Integer.parseInt(t.getText());if(flag==15) {m2=m1+m2;}else if(flag==16) {m2=m1-m2;}else if(flag==17) {m2=m1*m2;}else if(flag==18) {m2=m1/m2;}else m2=m1;//若⽆连续的运算符运算,保存当前数据到m2 if(i==14) flag=15;else if(i==15) flag=16;else if(i==16) flag=17;else flag=18;str=String.valueOf(b[i]);t.setText(str);//显⽰到⽂本框上n=0;//还原,记录下次数据break;//找到匹配数据退出循环}}if(e.getSource()==b1[13]) {//=m1=Integer.parseInt(t.getText());if(flag==15) {m2=m2+m1;}else if(flag==16) {m2=m2-m1;}else if(flag==17) {m2=m2*m1;}else if(flag==18) {m2=m2/m1;}else m2=m1;str=String.valueOf(m2);t.setText(str);//显⽰到⽂本框上n=0;//还原,记录下次数据flag=0;//flag还原0,表明没有未处理的运算符}if(e.getSource()==b1[10]) {//各变量变为0 清空m1=0;m2=0;flag=0;n=0;t.setText("0");//显⽰到⽂本框上}if(e.getSource()==b1[11]) {//退格m1=(int)(Double.parseDouble(t.getText())/10);n=m1;str=String.valueOf(m1);t.setText(str);}if(e.getSource()==b1[12]) {//⼩数点m1=Integer.parseInt(t.getText());str=String.valueOf(m1+b[12]);t.setText(str);//显⽰到⽂本框上int j=0;for(i=0;i<=9;i++) {if(e.getSource()==b1[i]) {j++;m2=Math.pow(0.1, j)*Integer.parseInt(b[i]);str=String.valueOf(m1+m2);t.setText(str);//显⽰到⽂本框上}}}}//主函数public static void main(String[] args) {new Calcular3();}}。
计算器加减乘除二进制计算代码

计算器加减乘除二进制计算代码 #定义函数,实现二进制加法def binary_addition(a, b):carry = 0result = ''# 将两个二进制数的位数对齐a = a.zfill(len(b))b = b.zfill(len(a))for i in range(len(a) - 1, -1, -1):sum = int(a[i]) + int(b[i]) + carryif sum >= 2:carry = 1sum -= 2else:carry = 0result = str(sum) + resultif carry == 1:result = '1' + resultreturn result# 定义函数,实现二进制减法def binary_subtraction(a, b):borrow = 0result = ''# 将两个二进制数的位数对齐a = a.zfill(len(b))b = b.zfill(len(a))for i in range(len(a) - 1, -1, -1): diff = int(a[i]) - int(b[i]) - borrow if diff < 0:borrow = 1diff += 2else:borrow = 0result = str(diff) + resultreturn result# 定义函数,实现二进制乘法def binary_multiplication(a, b):result = '0'# 逐位计算乘积for i in range(len(b) - 1, -1, -1): if b[i] == '1':temp = afor j in range(i, len(b) - 1):temp += '0'result = binary_addition(result, temp)return result# 定义函数,实现二进制除法def binary_division(dividend, divisor):quotient = ''remainder = dividend# 逐位进行除法运算while len(remainder) >= len(divisor):temp = divisortemp_quotient = '1'# 将除数左移,直到大于被除数while len(temp) < len(remainder):temp += '0'temp_quotient += '0'# 减去除数,得到商和余数remainder = binary_subtraction(remainder, temp)quotient = binary_addition(quotient, temp_quotient)return quotient, remainder```上述代码定义了四个函数,分别对应二进制加减乘除四种基本运算。
htmljs实现简单的计算器代码(加减乘除)

下面小编就为大家带来一篇 html+js 实现简单的计算器代码 (加减乘除 ) 。
小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
html+js 实现简单的计算器代码(加减乘除 )<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title></head><body><table> <tr> <td><input type="button"value="add" onclick="setOp('+', 'add');"/></td> <td><input type="button"value="miner"onclick="setOp('-', 'miner');"/></td> <td><input type="button"value="times"onclick="setOp('*', 'times');"/></td> <td><input type="button"value="divide"onclick="setOp('/', 'divide');"/></td> </tr></table><table id="tb_calc" style="display:none;"> <tr> <td> <input id="x" type="text" style="width:100px" value="" name="x" /></td> <td> <lable id="op" name="op"></lable> </td> <td> <input id="y" type="text" style="width:100px"value="" name="y" /> </td> <td> <input id="opTips" type="button" value="" onclick="calc();"/> </td> <td> <lable id="z" name="z"></lable> </td> </tr></table><script type="application/javascript"> function setOp(op, opTips) { var tb=document.getElementById("tb_calc"); tb.style.display = "none"; document.getElementById("x").value = ""; document.getElementById("y").value = ""; document.getElementById("z").innerText = ""; document.getElementById("op").innerText = op; document.getElementById("opTips").value = opTips; tb.style.display = "block"; } function calc() { var x = parseInt(document.getElementById("x").value); var y = parseInt(document.getElementById("y").value); var op = document.getElementById("op").innerText; var z = ""; switch(op) { case '+': z = x + y; break; case '-': z = x - y; break; case '*': ; z = x * y; break; case '/': ; z = x / y; break; default: z = ''; } console.log(x, op, y, '=', z); document.getElementById("z").innerText = z; }</script></body></html>以上这篇 html+js 实现简单的计算器代码 (加减乘除 ) 就是小编分享给大家的全部内容了,希望能给大家一个参考。
简易计算器(加减乘除幂e)

此计算机包含+,-,/,*,!,sin,tan,cos,^,e。
#include<iostream.h>#include<math.h>#include <iomanip.h>#include<stdlib.h>#define max 100#define MaxOp 100struct //设定运算符优先级{char ch; //运算符int pri; //优先级}lpri[]={{'=',0},{'(',1},{'*',5},{'/',5},{'+',3},{'-',3},{')',6},{'^', 7},{'e',7},{'!',7},{'s',7},{'t',7},{'c',7}},rpri[]={{'=',0},{'(',6},{'*',4},{'/',4},{'+',2},{'-',2},{')',1},{'^', 6},{'e',6},{'!',6},{'s',6},{'t',6},{'c',6}};int leftpri(char op) //求左运算符op的优先级{int i;for(i=0;i<MaxOp;i++)if(lpri[i].ch==op)return lpri[i].pri;}int rightpri(char op) //求右运算符op的优先级{int i;for(i=0;i<MaxOp;i++)if(rpri[i].ch==op)return rpri[i].pri;}int InOp(char ch) //判断ch是否运算符{if(ch=='('||ch==')'||ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='^'| |ch=='e'||ch=='!'||ch=='t'||ch=='s'||ch=='c')return 1;elsereturn 0;}int precede(char op1,char op2) //op1和op2运算符的比较结果{if(leftpri(op1)==rightpri(op2))return 0;else if(leftpri(op1)<rightpri(op2))return -1;elsereturn 1;}void trans(char*exp,char postexp[]) //将算术表达式exp转换为后缀表达式postexp{struct{char data[max]; //存放运算符int top; //栈指针}op; //定义运算符栈int i=0; //i作为postexp的下标op.top=-1;op.top++;op.data[op.top]='='; //将“=”进栈char *t;cout<<"-----------------------------------------------------------------"<<endl;cout<<"当前符号输入区 op栈输出区"<<endl;cout<<"-----------------------------------------------------------------"<<endl;while(*exp!='\0') //*exp未扫描完时循环{if(!InOp(*exp)) //为数字字符情况下{t=exp;while(*exp>='0'&&*exp<='9'||*exp=='.') //判定为数字{cout<<*exp; //输出中缀表达式的头指针postexp[i++]=*exp;exp++;}cout<<"\t";cout.setf(ios::left);cout<<setw(20);cout<<t;for(int n=1;n<=op.top;n++)cout<<op.data[n];cout<<"\t\t ";for(n=0;n<i;n++){cout<<postexp[n];if(!(postexp[n]>='0'&&postexp[n]<='9')&&postexp[n]!=' ')cout<<' ';}cout<<endl;postexp[i++]=' '; //用' '标识一个数值串结束}else{int n;switch(precede(op.data[op.top],*exp)){case -1: //为运算符情况下t=exp;op.top++;op.data[op.top]=*exp;cout<<*exp;if(*exp=='s')cout<<"in";if(*exp=='c')cout<<"os";if(*exp=='t')cout<<"an";cout<<"\t";exp++;cout.setf(ios::left);cout<<setw(20);cout<<t;for(n=1;n<=op.top;n++)cout<<op.data[n];cout<<"\t\t ";for(n=0;n<i;n++){cout<<postexp[n];if(!(postexp[n]>='0'&&postexp[n]<='9')&&postexp[n]!=' ')cout<<' ';}cout<<' ';cout<<endl;break;case 0: //只有括号满足这一情况op.top--; //此时将退栈cout<<*exp;if(*exp=='s')cout<<"in";if(*exp=='c')cout<<"os";if(*exp=='t')cout<<"an";cout<<"\t";exp++;cout.setf(ios::left);cout<<setw(20);cout<<t;for(n=1;n<=op.top;n++)cout<<op.data[n];cout<<"\t\t ";for(n=0;n<i;n++){cout<<postexp[n];if(!(postexp[n]>='0'&&postexp[n]<='9')&&postexp[n]!=' ')cout<<' ';}cout<<endl;break;case 1: //栈顶运算符优先级高于当前运算符postexp[i++]=op.data[op.top];op.top--;break;}}}while(op.data[op.top]!='=') //此时exp扫描完毕,退栈到'='为止{postexp[i++]=op.data[op.top];op.top--;}postexp[i]='\0'; //给postexp表达式添加结束标识cout<<"\t\t\t\t\t\t";for(int p=0;postexp[p]!='\0';p++){cout<<postexp[p];if(!(postexp[p]>='0'&&postexp[p]<='9')&&postexp[p]!=' ') cout<<' ';}cout<<endl;}/////////////////////////////////////////////////////////////////////int check(char *exp){int i=0,flag=1;while(exp[i]!='\0') //判断运算符号是否表达正确{if(exp[i]>='0' && exp[i]<='9' || exp[i]=='.' || exp[i]=='-' || exp[i]=='+' || exp[i]=='*' || exp[i]=='(' || exp[i]==')'|| exp[i]=='/' || exp[i]=='^' ||exp[i]=='!'|| exp[i]=='d' || exp[i]=='s' || exp[i]=='c' || exp[i]=='t' || exp[i]=='e');else flag=0;if(exp[0]=='+'||exp[0]=='-'||exp[0]=='*'||exp[0]=='/'||exp[0]=='^ '||exp[0]=='.'||exp[0]=='!') //表达式第一项不出现加减乘除flag=0;if(i!=0&&(exp[i]=='s' || exp[i]=='c' || exp[i]=='t' || exp[i]=='e')&&(exp[i-1]>='0' && exp[i-1]<='9' || exp[i-1]=='.'))flag=0;if((exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/'||exp[i]==' ^'||exp[i]=='!')&& //'+'、'-'、'*'、'/'、'^'等运算符号后面必须接一个数值或其他!(exp[i+1]>='0' && exp[i+1]<='9'|| exp[i+1]=='e' || exp[i+1]=='s'|| exp[i+1]=='c' || exp[i+1]=='t' || exp[i+1]=='('))flag=0;i++;}return flag;}///////////////////////////////////////////////////////////////////// ///////double compvalue(char *postexp) //计算后缀表达式的值{struct{double data[max]; //存放数值int top; //栈指针}st; //定义数值栈int k;double d1=0,d,a,b,c;st.top=-1;while(*postexp!='\0') //postexp字符串未扫描完时循环{switch(*postexp){case'+': //判定为'+'号a=st.data[st.top];st.top--; //退栈取数值ab=st.data[st.top];st.top--; //退栈取数值bc=a+b; //计算cst.top++;st.data[st.top]=c; //将计算结果进栈break;case'-': //判定为'-'号a=st.data[st.top];st.top--; //退栈取数值ab=st.data[st.top];st.top--; //退栈取数值bc=b-a; //计算cst.top++;st.data[st.top]=c; //将计算结果进栈break;case'*': //判定为'*'号a=st.data[st.top];st.top--; //退栈取数值ab=st.data[st.top];st.top--; //退栈取数值bc=a*b; //计算cst.top++;st.data[st.top]=c; //将计算结果进栈break;case'/': //判定为'/'号a=st.data[st.top];st.top--; //退栈取数值ab=st.data[st.top];st.top--; //退栈取数值bif(a!=0){c=b/a; //计算cst.top++;st.data[st.top]=c; //将计算结果进栈}else{cout<<"\n\t除零错误\n";exit(0);//异常退出}break;case'^': //判定为'^'号int i;a=st.data[st.top];st.top--; //退栈取数值ab=st.data[st.top];st.top--; //退栈取数值bc=1; //计算cfor(i=0;i<a;i++)c*=b;st.top++;st.data[st.top]=c; //将计算结果进栈break;case'e': //判定为'exp'号a=st.data[st.top];st.top--; //退栈取数值ac=exp(a); //计算cst.top++;st.data[st.top]=c; //将计算结果进栈break;case'!': //判定为'^'号a=st.data[st.top];st.top--; //退栈取数值a c=1; //计算cfor(i=1;i<a+1;i++)c=c*i;st.top++;st.data[st.top]=c; //将计算结果进栈break;case 't':a=st.data[st.top];st.top--;c=tan(a);st.top++;st.data[st.top]=c;break;case 's':a=st.data[st.top];st.top--;c=sin(a);st.top++;st.data[st.top]=c;break;case 'c':a=st.data[st.top];st.top--;c=cos(a);st.top++;st.data[st.top]=c;break;default://处理数字字符d=0;while(*postexp>='0'&&*postexp<='9'||*postexp=='.') //判定为数字字符{if(*postexp>='0'&&*postexp<='9'){d=10*d+*postexp-'0';//将连续的数字字符转换成对应的数值存放到d中postexp++;}else{*postexp++;i=0;while(*postexp>='0'&&*postexp<='9'){d1=10*d1+*postexp-'0';*postexp++;i++;}for(k=0;k<i;k++)d1=d1/10;}}d=d+d1;d1=0;st.top++;st.data[st.top]=d;break;}postexp++; //继续处理其他字符}return(st.data[st.top]);}int check2(char *postexp) ///判断是否括号对称{while(*postexp!='\0'){if(*postexp=='('||*postexp==')')return 1;*postexp++;}return 0;}void main(){cout<<"----------------------------------------------"<<endl;cout<<"本计算器包含的运算符有:"<<endl;cout<<"+ - * /"<<endl;cout<<"^ !"<<endl;cout<<"sin() cos() tan() exp()"<<endl;cout<<"(s表示sin,c表示cos,t表示tan,e表示exp)\n"<<endl;cout<<" By WeizhongYoung"<<endl;cout<<"------------------------------------------------"<<endl;char h='y';while(h=='y'||h=='Y') //当st=='y'/'Y'时循环{char exp[max],postexp[max];cout<<"请输入表达式:";cin>>exp;cout<<endl;if(!check(exp)&&!check2(postexp)) //判断是否输入错误{cout<<"输入有误,请重新输入!"<<endl;continue;}else{cout<<"输出中缀表达式:"<<exp<<endl;trans(exp,postexp);cout<<"输出n逆波兰表达式:";for(int p=0;postexp[p]!='\0';p++){cout<<postexp[p];if(!(postexp[p]>='0'&&postexp[p]<='9')&&postexp[p]!=' ')cout<<' ';}cout<<endl;cout<<"输出表达式的值为:"<<compvalue(postexp)<<endl;}cout<<"是否继续运行(Y,N),输入Y/y继续,输入n/N退出: "; //用户输入是否要继续使用计算器cin>>h;cout<<endl;}exit(0);}。
加减乘除带括号的计算器代码
28
string = format(string)
29 if expression.count('/')==1:
30
x,y=expression.split('/')
31
div_result =str(float(x)/float(y))
32
string = string.replace(expression,div_result)
17 print('表达式错误,含非法字符')
18 chech_result = False
19 return chech_result
20 def calc_mul_div(string):
21 regular = '\d+\.?\d*[*/]\d+\.?\d*'
22 while re.findall(regular,string):
33
string = format(string)
34 return string
35 def cal_add_sub(string):
36 add_regular = '[\-]?\d+\.?\d*\+[\-]?\d+\.?\d*'
37 sub_regular = '[\-]?\d+\.?\d*\-[\-]?\d+\.?\d*'
请求出错错误代码400请尝试刷新页面重试
代码如下
加减乘除带括号的计算器代码
1 import re
2 def form_at(string):
3 string = string.replace('++','+')
四则运算计算器
前言本次课程设计的题目是用汇编语言实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。
计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。
通过使用汇编语言设计实现简单计算器,以此进一步了解和掌握对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识的有效运用。
本次课程设计以实现一个基本功能完善,界面友好,操作简便易行的计算器为最终目的。
通过对具有加减乘除基本功能的计算器的设计实现,学会使用汇编语言实现输入输出模块的设计,模块合理调用的设计,加减乘除运算的判断以及退出程序的判断的设计。
通过对各种指令的合理使用,熟悉并加深对各种指令的用法。
学会使用汇编语言设计各个功能模块。
当实现各个程序模块后,学会通过程序的调用最终实现一个具有基本计算功能的简单计算器。
1中文摘要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。
运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。
设计当用户根据提示信息输入一个算式后,按下enter键或是‘=’符号键时,程序依据输入的算式进行计算,并将结果显示在屏幕上。
如果用户输入错误,则返回,提示信息让用户重新输入算式,当用户按下Q或q键时退出程序。
在各个子功能模块设计好的情况下,通过主题模块的合理调用,最终实现一个具有简单运算功能的计算关键字:计算器、四则运算、进位、错位、清屏目录1系统分析 -------------------------------------------------2系统总体设计----------------------------------------------3详细设计-------------------------------------------------- 4统测试 ---------------------------------------------------5软件使用说明书 ------------------------------------------- 设计总结----------------------------------------------------参考文献----------------------------------------------------致谢———————————————————————————————————31.系统分析本次汇编语言课程设计的最终目的是要实现一个简单计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。
C语言实现简易计算器(可作加减乘除)
C语⾔实现简易计算器(可作加减乘除)C语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define IsDouble 0#define IsChar 1//_______________________________________________________________________________________________________________________________________________________ //1.⽀持浮点数和字符的栈typedef struct {char * buffer;int typesize;int top;int max;} stack;stack * CreateStack(int max, int typesize);//创建⼀个栈void DestroyStack(stack *);//释放栈的空间void ClearStack(stack *);//清空栈int Push(stack *, void *);//⼊栈int Pop(stack *, void *);//出栈int GetSize(stack *s);//得到栈的⼤⼩int GetTop(stack *, void *);//找到栈顶int IsEmpty(stack *);//判断是否为空栈,空则下溢int IsFull(stack *);//判断栈是否已满,满则溢出stack * CreateStack(int max, int typesize){stack * s = (stack*)malloc(sizeof(stack));//为栈s malloc内存if (!s) return 0;//为结构中buffer元素malloc内存s->buffer = (char *)malloc(sizeof(char) * max * typesize);if (!s->buffer) return 0;//初始化结构中的栈顶,最⼤值,类型⼤⼩s->top = -1;s->max = max;s->typesize = typesize;return s;}void DestroyStack(stack* s){free(s->buffer);//先释放buffer的空间free(s);//在释放s的空间}void ClearStack(stack * s){s->top = -1;//清空栈(栈头位置归零)}int Push(stack * s, void * data){if (IsFull(s)) return 0;//如果栈已满则return 0,防⽌溢出//栈未满则将栈头移动打动下⼀位置,并将data中的元素拷⼊栈中buffer的第top位置s->top++;memcpy(s->buffer + s->top*s->typesize, data, s->typesize);//⼊栈成功return 1return 1;}int Pop(stack * s, void * data){if (IsEmpty(s)) return 0;//出栈判断栈是否为空,若为空则return 0//栈未空则将buffer中top位置的字符拷⼊data记录,并让栈头向前移动⼀个位置memcpy(data, s->buffer + s->top*s->typesize, s->typesize);s->top--;//成功则return 1return 1;}int GetSize(stack *s){return s -> top+1;//栈头位置+1得到⼤⼩}int GetTop(stack *s, void * data){if (IsEmpty(s)) return 0;//如果栈空return 0//栈不为空则将top位置的字符拷回data记录,得到栈头memcpy(data, s->buffer + s->top*s->typesize, s->typesize);//成功则return 1;return 1;}int IsEmpty(stack * s){return s->top == -1;//如果top为-1则栈空}int IsFull(stack * s){return s->top == s->max-1;//如果top为max-1则栈满}//___________________________________________________________________________________________________________________________________________________ //2.定义⼀个cal类型,其中data存数时sign为IsDouble,存字符时,sign为Ischartypedef struct {double data;char sign;} cal;//3.查找对应符号(找到则返回该符号下标)(找不到则说明该部分为数字返回-1)int SearchCode(char ch){char * code = "+-*/()@";//@为终⽌符,算式输⼊结束int index = 0;//while (code[index]){if (code[index] == ch) return index;index++;}return -1;}//4.得到两个符号间的优先级//与SearchCode相对应,char GetPriority(char ch, char next){//创建⼀个perferen表,第i⾏(列)对应SearchCode函数中code中的第i个字符char perferen[7][7] = {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=E",">>>>E>>","<<<<<E="};//找到两个形参对应的字符int c = SearchCode(ch);int n = SearchCode(next);//如果找不到对应运算符(字符不是运算符⽽是为数字)return Eif (c==-1 || n==-1) return 'E';//如果找到两个对应运算符则按照优先级表返回两个运算符的优先级return perferen[c][n];}//5.四则运算double add(double a, double b) { return a+b; }double sub(double a, double b) { return a-b; }double mul(double a, double b) { return a*b; }double ddiv(double a, double b) { return a/b; }//整合四种运算double calcu(double a, char ch, double b){double (*calculation[4])(double,double) = {add,sub,mul,ddiv};return calculation[SearchCode(ch)](a,b);}//6.检测字符串int CheckStr(char * buffer){int n;//遍历字符串确保算式中⽆⾮法字符若检测到⾮法字符return 0,若都合法则return 1for (n = 0;buffer[n];n++){if ((SearchCode(buffer[n]) != -1 || buffer[n] == '.' || (buffer[n] >= '0' && buffer[n] <= '9')) && buffer[n] != '@') continue;else return 0;}buffer[n] = '@';//加上终⽌符,表⽰算式结束buffer[n+1] = '\0';return 1;}//7.得到数据转化为double类型存⼊rsint GetDigit(char * buffer, int * n, double * rs){char str[30];int i,j = 0;for (i = 0;SearchCode(buffer[*n]) == -1;i++){str[i] = buffer[*n];//从*n位置开始,将这⼀串数字字符存⼊str(*n)++;}str[i] = '\0';for (i = 0;str[i];i++){if (str[i] == '.') j++;}//如果⼀段⼩数有多个⼩数点或⼩数点在数字⾸尾,return 0if (j>1 || str[i-1] == '.' || str[0] == '.') return 0;//rs接收转化为double的数据*rs = atof(str);//操作成功return 1return 1;}//8.将⽤户输⼊的buffer字符串转化为可供程序运算的calstr数组int resolu(char * buffer, cal * calstr){int i = 0, j = 0;cal c;while (buffer[i]){if (SearchCode(buffer[i]) == -1){//如果得到数据不成功则return 0if (GetDigit(buffer,&i, &c.data) == 0) return 0;//如果成功得到数据则在c.sign标记为浮点数c.sign = IsDouble;//将c存⼊数组calstr中calstr[j++] = c;}else{//若符号为运算符//判断正负号if (buffer[i] == '-' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '-')){ i++;if (GetDigit(buffer,&i, &c.data) == 0) return 0;//在符号的下⼀位开始查找,若找不到数字return 0//否则,给数字取相反数,c.sign标记为浮点数,存⼊calstr中c.data = 0 - c.data;c.sign = IsDouble;calstr[j++] = c;} else//如果是正号,与符号处理⽅式同理if (buffer[i] == '+' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '+')){ i++;if (GetDigit(buffer, &i, &c.data) == 0) return 0;c.sign = IsDouble;calstr[j++] = c;}else{//如果不是正负号,则为运算符,先强制转换为double类型存在c.data⾥,然后c.sign标记为char类型,存⼊calstrc.data = (double)buffer[i++];c.sign = IsChar;calstr[j++] = c;}}}//操作蔡成功则return 1return 1;}//9.计算出结果int result(cal * calstr, double * rs){stack * pst = CreateStack(100,sizeof(char));//运算符栈stack * pnd = CreateStack(100,sizeof(double));//数据栈double num1,num2;int n = 0;char ch = '@';Push(pst, &ch);//在转换得到的calstr中遍历直到终⽌符'@"while(ch != '@' || !(calstr[n].sign == IsChar && (char)calstr[n].data == '@')){//如果calstr的n位上是浮点数,则将这个data压栈进⼊数据栈pnd中if (calstr[n].sign == IsDouble){Push(pnd, &(calstr[n].data));n++;}//反之,如果是运算符,则要检测优先级else{switch( GetPriority(ch, (char)calstr[n].data)){//如果运算符优先级较⼩,则让ch等于优先级⼤的符号并压⼊符号栈pst中case '<':ch = (char)calstr[n].data;Push(pst, &ch);n++;break;//如果结果为等号,让符号出栈暂存到ch中case '=':if (!Pop(pst, &ch)) return 0;n++;break;//如果ch优先级较⾼,则将前两个数字及运算符出栈,分别储存⾄num2,ch,num1中,进⾏运算,得到的结果再次压栈进⼊pnd中 case '>':if (!(Pop(pnd,&num2) && Pop(pst,&ch) && Pop(pnd,&num1))) return 0;num1 = calcu(num1,ch,num2);Push(pnd, &num1);break;//如果符号顺序出错,return 0case 'E':return 0;}}//检测是否可以得到栈顶符号,栈空则return 0if (!GetTop(pst, &ch)) return 0;}//如果栈中得到了最终结果,并且取出pnd中的最终结果到rs,return 1if (GetSize(pnd) == 1 && GetTop(pnd,rs)){DestroyStack(pst);DestroyStack(pnd);return 1;}//否则 return 0else{return 0;}}//10.⽤户交互函数void treatment(){char buffer[100];//⽤户输⼊的字符串(算式)cal calstr[50];//计算⽤的数组double rs = 0;//计算结果printf("Enter your equation:");gets(buffer);//让⽤户输⼊算式buffer//⽤户不输⼊"exit"就不退出while (!(buffer[0]=='e' && buffer[1]=='x' && buffer[2]=='i' && buffer[3]=='t')){//检查buffer中字符君合法,成功将buffer转化为⽤于计算的calstr数组,成功计算出结果存⼊rsif (CheckStr(buffer) && resolu(buffer,calstr) && result(calstr,&rs)){printf("\n%lf\n",rs);}else{printf("\nError!\n");}printf("Enter \"exit\"to quit");printf("\nEnter your equation:");gets(buffer);//再次让⽤户输⼊算式}printf("\nbye\n");}//11.主函数int main(){treatment();}参考⽂献链接如下[参考⽂献]()。
电脑加减乘除操作方法
电脑加减乘除操作方法一、加法操作方法在电脑上进行加法操作是非常简单的。
首先,打开计算器应用程序或者在搜索栏中输入“计算器”来找到计算器应用。
然后,点击计算器应用图标打开应用程序。
在计算器应用程序中,你会看到一个带有数字和操作符的界面。
要进行加法操作,首先点击数字键盘上的相应数字,然后点击加号操作符。
接下来,再点击另一个数字键,这样你就输入了两个要相加的数字。
点击等于号,计算器应用程序会自动计算出两个数字的和,并在屏幕上显示结果。
二、减法操作方法进行减法操作与加法操作类似。
同样地,首先打开计算器应用程序。
然后,输入第一个要减去的数字,接着点击减号操作符,再输入第二个数字。
点击等于号,计算器应用程序会计算出两个数字的差,并在屏幕上显示结果。
三、乘法操作方法进行乘法操作也是很简单的。
同样地,打开计算器应用程序。
然后,输入第一个要相乘的数字,再点击乘号操作符,最后输入第二个数字。
点击等于号,计算器应用程序会自动计算出两个数字的乘积,并在屏幕上显示结果。
四、除法操作方法进行除法操作稍微复杂一些。
同样地,打开计算器应用程序。
然后,输入第一个要被除的数字,接着点击除号操作符,再输入第二个数字。
点击等于号,计算器应用程序会计算出两个数字的商,并在屏幕上显示结果。
需要注意的是,如果除数为0,则会出现错误提示,因为除数不能为0。
总结:通过以上操作方法,我们可以在电脑上进行加减乘除的运算。
只需打开计算器应用程序,输入相应的数字和操作符,然后点击等于号,就能得到运算结果。
在进行操作时,需要注意输入的数字和操作符的顺序,以及避免除数为0的情况。
同时,也可以使用计算器应用程序提供的其他功能,如开方、取余等。
通过熟练掌握电脑上的加减乘除操作方法,我们可以更方便地进行各种数学计算,提高工作和学习效率。