java科学计算器(进制转换)

合集下载

进制转换计算器c语言

进制转换计算器c语言

进制转换计算器c语言以下是一个简单的进制转换计算器的C语言实现。

此程序将用户输入的十进制数转换为二进制、八进制和十六进制数。

```c#include <stdio.h>void print_binary(unsigned int num) {for (int i = (sizeof(unsigned int) * 8) - 1; i >= 0; i--) {printf("%d", (num >> i) & 1);}printf("\n");}void print_octal(unsigned int num) {printf("%o\n", num);}void print_hexadecimal(unsigned int num) {printf("%X\n", num);}int main() {unsigned int num;printf("请输入一个十进制数: ");scanf("%u", &num);printf("二进制: ");print_binary(num);printf("八进制: ");print_octal(num);printf("十六进制: ");print_hexadecimal(num);return 0;}```注意,这个程序使用无符号整数(`unsigned int`)来处理输入,所以它不能处理负数。

同时,二进制转换函数是自己实现的,但八进制和十六进制的转换则直接使用了 `printf` 函数的 `%o` 和 `%X` 格式说明符。

此外,这个程序没有进行错误处理,例如检查用户是否输入了一个有效的十进制数。

在实际应用中,你可能需要添加这些额外的检查。

进制转换器及过程 -回复

进制转换器及过程 -回复

进制转换器及过程-回复进制转换是数学中的一个重要概念,可以将一个数从一种进制表示转换为另一种进制表示。

在我们日常生活中,常用的是十进制,即以10为基数的进制表示法。

然而,在计算机科学、电子工程等领域,我们也会经常遇到其他进制,如二进制(以2为基数)、八进制(以8为基数)和十六进制(以16为基数)等。

本文将介绍如何进行进制转换,并提供一个简单易懂的进制转换器以辅助进行实际操作。

我们将详细讨论二进制、八进制和十六进制之间相互转换的方法。

在开始之前,我们需要了解每种进制表示的权值规则。

十进制下,每一位的权值都是10的幂次方,从右到左依次为1、10、100、1000等。

二进制下,每一位的权值都是2的幂次方,从右到左依次为1、2、4、8等。

八进制和十六进制的权值规则与二进制类似,分别是8的幂次方和16的幂次方。

有了这个基本概念,我们就可以开始介绍进制转换的具体步骤了。

首先,我们将讨论如何将一个二进制数转换为十进制数。

例如,假设我们有一个二进制数10101,我们将从右到左逐位计算这个二进制数的十进制表示。

第一位是1,权值为2^0 = 1,所以这一位贡献了1到结果中。

第二位是0,权值为2^1 = 2,所以这一位不贡献到结果中。

第三位是1,权值为2^2 = 4,所以这一位贡献了4到结果中。

第四位是0,权值为2^3 = 8,所以这一位不贡献到结果中。

第五位是1,权值为2^4 = 16,所以这一位贡献了16到结果中。

将这些贡献相加,我们得到结果为1 + 0 + 4 + 0 + 16 = 21。

所以,二进制数10101转换为十进制数为21。

接下来,我们将讨论如何将一个十进制数转换为二进制数。

例如,我们有一个十进制数47,我们将使用除以2的余数法将其转换为二进制数。

首先,我们用47除以2,商为23,余数为1。

我们将余数1记录下来,然后再用23除以2,商为11,余数为1。

再将余数1记录下来,继续用11除以2,商为5,余数为1。

科学计算器代码

科学计算器代码

Calculate.java/*这是一个计算类,用于普通运算中的各种运算,如2,8,10,16进制的符合运算,复合运算其原理用后缀表达式来实现*/import java.util.*;import ng.Math;class Calculate {//两个内部类来实现数据的存储,如同数据结构中的栈class operator{ char data[];int top;operator(){data = new char [50];top = -1;}};class operator1{ double data[];int top;operator1(){data = new double [20];top = -1;}};public static double jiecheng(double number)//阶乘运算{int number1 = (int)number;double j=1;for(int i=1;i<=number1;i++)j=j*i;return j;}String trans (char exp[],char postexp[])//后缀表达式的翻译函数{int i=0,j=0;boolean m=true;//m用来监视表达式是不有非法的运算符连着输入operator op = new operator();while(exp[j]!='\0'){ switch (exp[j]){case '(':op.top++;op.data[op.top]=exp[j];j++;m= false;break;case ')':while (op.data[op.top]!='('){ postexp[i++]=op.data[op.top];op.top--;}op.top--;j++;break;case '+':case '-':if(!m)return "+或者-附近出现多个运算符在一起的现象!";while (op.top!=-1 && op.data[op.top]!='('){postexp[i++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=exp[j];j++;m=false;break;case '*':case '/':if(!m)return "*或/附近出现多个运算符在一起的现象!";while(op.top!=-1 && op.data[op.top]!='('&& op.data[op.top]!='+'&& op.data[op.top]!='-'){postexp[i++]=op.data[op.top];op.top--;}op.top++;op.data[op.top]=exp[j];j++;m = false;break;case '^':if(!m)return "^(冥运算符号)附近出现多个运算符在一起的现象!";case 's':case 'c':case 't':case 'l':case '$':case '`':op.top++;op.data[op.top]=exp[j];j++;m = false;break;case '!':op.top++;op.data[op.top]=exp[j];j++;break;case ' ':break;default:while (exp[j]>='0' && exp[j]<='9'||exp[j]=='.'){postexp[i++]=exp[j];j++;}postexp[i++]='#';m = true;}}while (op.top!=-1){postexp[i++]=op.data[op.top];op.top--;}postexp[i]='\0';if(exp[j-1]=='+'||exp[j-1]=='-'||exp[j-1]=='*'||exp[j-1]=='/'||exp[j-1]=='^') return "运算式后缀出现非正常运算符!";return "ok";}String compvalue (char postexp[],int flag)//后缀表达式运算,flag为进制{String ex = new String(postexp);StringTokenizer analy = new StringTokenizer(ex,"#+-`*/sclt!^$");operator1 st = new operator1();double d,d1,d2,a,b,c;int j=0;st.top=-1;while (postexp[j]!='\0'){switch (postexp[j]){case '+':a=st.data[st.top];st.top--;b=st.data[st.top];c=a+b;st.data[st.top]=c;break;case '-':a=st.data[st.top];st.top--;b=st.data[st.top];c=b-a;st.data[st.top]=c;break;case '*':a=st.data[st.top];st.top--;b=st.data[st.top];c=a*b;st.data[st.top]=c;break;case '/':a=st.data[st.top];st.top--;b=st.data[st.top];st.top--;if (a!=0){ c=b/a;st.top++;st.data[st.top]=c;}else{ return "输入错误,除数不能是零!请重新输入!";}break;case 's':a=st.data[st.top];c=Math.sin(Math.toRadians(a));st.data[st.top]=c;break;case 'c':a=st.data[st.top];c=Math.cos(Math.toRadians(a));st.data[st.top]=c;break;case 't':a=st.data[st.top];if(a%180 == 90||(-a)%180==90)return "tan函数值有误!";c=Math.tan(Math.toRadians(a));st.data[st.top]=c;break;case '!':a=st.data[st.top];c=jiecheng(a);st.data[st.top]=c;break;case 'l':a=st.data[st.top];if(a<=0)return "log的真数不能小于等于0";c=Math.log(a);st.data[st.top]=c;break;case '^':a=st.data[st.top];st.top--;b=st.data[st.top];c=Math.pow(b,a);st.data[st.top]=c;break;case '$':a=st.data[st.top];if(a<0)return "开方数不能小于0!";c=Math.sqrt(a);st.data[st.top]=c;break;case '`':a=st.data[st.top];c=0-a;st.data[st.top]=c;break;default:String str =analy.nextToken();//获取后缀表达式的数据if(flag == 2)d = btod(str);else if(flag == 8)d = otod(str);else if(flag == 10)d=Double.parseDouble(str);elsed = htod(str);while (postexp[j]>='0' && postexp[j]<='9'||postexp[j]=='.'){j++;}st.top++;st.data[st.top]=d;break;}j++;}return (String.valueOf(st.data[st.top]));}String check(char c[])//检查函数,用来检查运算式中的低级错误{int k=0,i=0;if(c[0]=='+'||c[0]=='-'||c[0]=='^'||c[0]=='*'||c[0]=='/')return "表达式开始位置不对";while(c[k]!='\0'){if((c[k]>=39 && c[k]<='9'&&c[k]!=',') ||c[k]=='$'||c[k]=='!'||c[k]==' '||c[k]=='c'||c[k]=='s'||c[k]=='t'||c[k]=='^'||c[k]=='l'||c[k]=='`') {}else{return "输入含有非法的字符,请重新输入正确的数学表达式!";}if(c[k]=='(')i++;else if(c[k]==')')i--;k++ ;}if(i!=0){return "输入错误,没有相匹配的括弧!请重新输入!";}return "ok";}double btod(String str)//二进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(2, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(2, m));m--;}return p;}double otod(String str)//八进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(8, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(8, m));m--;}return p;}double htod(String str)//十六进制到十进制的转换{int k = str.indexOf("."),m=0;double p=0.0;if(k ==-1)k =str.length();for(int i =k-1;i>=0;i--){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(16, m));m++;}m=-1;for(int i =k+1;i<str.length();i++){char c = str.charAt(i);int a =Integer.parseInt(""+c);p=p+(a*Math.pow(16, m));m--;}return p;}}Main.java//主类public class Main {public static void main(String[] args) {new WinFrame("计算器");}}MyDialog.javaimport java.awt.event.*;import java.awt.*;//帮助文档的对话框类class MyDialog extends Dialog implements ActionListener //建立对话框类{ static final int YES=1,NO=0;int message=-1; Button yes,no;TextArea area;String help;MyDialog(Frame f,String s,boolean b) //构造方法{ super(f,s,b);yes=new Button("确定"); yes.addActionListener(this);no=new Button("取消"); no.addActionListener(this);setLayout(new FlowLayout());help = "使用帮助:\n";help +="本计算器运算方式采用输入整个运算式后进行运算的方式.\n";help +="但由于作者能力有限,对有些运算符进行了重定义,现列出以下运算符:\n";help +="s代表sin,c代表cos,t代表tan,!代表阶乘,l代表log\n";help +="`代表负号,如果要用键盘输入的时候,请正确输入\n";help +="本计算器有4大主要功能:\n";help +="1.进行符合运算,可以用键盘进行输入,执行结果可以按回车获得\n";help +="2.进行2,8,10,16进制的各种运算以及相互转换,16进制没有实现a,b,c,d,e,f的输入\n";help +="3.进行大整数运算\n4.进行批量运算";area = new TextArea(help,10,50,3);//area.setEnabled(false);area.setForeground(Color.BLUE);area.setFont(new Font("宋体",Font.BOLD,16));add(area);add(yes); add(no);yes.setPreferredSize(new Dimension(100,25));no.setPreferredSize(new Dimension(100,25));setBounds(300,300,500,300);addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ message=-1;setVisible(false);}});}public void actionPerformed(ActionEvent e){ if(e.getSource()==yes){ message=YES;setVisible(false);}else if(e.getSource()==no){ message=NO;setVisible(false);}}public int getMessage(){ return message;}}Mypanel.javaimport java.util.*;import java.awt.*;import javax.swing.*;class mypanel extends Panel//派生一个面板,用来实现不同面板的布局{GridLayout grid;JButton btu[];mypanel(String []btuName,int row,int col,Color c){btu = new JButton [btuName.length];grid = new GridLayout(row,col,1,1);setLayout(grid);for(int i=0;i<row;i++)for(int j=0;j<col;j++){if(i*col+j<btuName.length){btu[i*col+j] = new JButton(btuName[i*col+j]);btu[i*col+j].setForeground(c);add(btu[i*col+j]);btu[i*col+j].setPreferredSize(new Dimension(60,25));}elsebreak;}}}WinFrame.javaimport java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import ng.Math;import java.math.*;class WinFrame extends Frame implements ActionListener,KeyListener,ItemListener {mypanel pane1,pane2,pane3,pane4,pane5;Label label1,label2;short j_flag=10;//进制运算的标示,初始化为十进制String strAsk="",strAnswer="";boolean b_flag = true;boolean p_flag = true;//批处理开关TextArea text1;//大整数输出专用域MenuBar menubar;Menu menu1,menu2,menu3;MenuItem item1,item2;MyDialog dialog;//帮助文档对话框CheckboxMenuItem menuitem1,menuitem2,menuitem3;String a[] = {"1","2","3",//用数组进行按钮的命名和消息内容的获取"4","5","6","7","8","9","0",".","+/-"};String a1[] = {"1","2","3","4","5","6","7","8","9","0",".","`"};String b[] ={"/","C","*","→","+","=","-","CE"};String c[] ={"sin","cos","tan","!","pow","sprt","log","pi"};String c1[] ={"s","c","t","!","^","$","l","p"};String d[] ={"( ",")"};String d1[] ={"(",")"};String e[] = {" A"," B"," C"," D"," E","F"};JTextField ask ,answer;char exp[];char postexp[];Checkbox box1,box2,box3,box4,box5;CheckboxGroup jin;String data = "0";//大整数储存数据TextArea text2,text3;int opear;CardLayout mycard;String answer1 = "";// 进制转换时的十进制答案储存Long answer2 = (long)0;//其他进制答案储存Panel pCenter;//添加一个容器装专用数据域void area()//初始化布局,只是不想在构造方法中的东西太多,看起来不方便{mycard = new CardLayout();pCenter = new Panel();pCenter.setLayout(mycard);setLayout(new FlowLayout());setBounds(60,60,450,290);menu1 = new Menu("查看");menu2 = new Menu("系统");menu3 = new Menu("帮助");menuitem1 = new CheckboxMenuItem("普通",true);menuitem2 = new CheckboxMenuItem("批处理",false);menuitem3 = new CheckboxMenuItem("大整数",false);item1 = new MenuItem("退出");item2 = new MenuItem("帮助");menuitem1.addItemListener(this);menuitem2.addItemListener(this);menuitem3.addItemListener(this);item1.addActionListener(this);item2.addActionListener(this);menubar = new MenuBar();menu1.add(menuitem1);menu1.add(menuitem2);menu1.addSeparator();//分隔符menu1.add(menuitem3);menu2.add(item1);menu3.add(item2);menuitem1.setShortcut(new MenuShortcut(KeyEvent.VK_P));menuitem2.setShortcut(new MenuShortcut(KeyEvent.VK_D)); menuitem3.setShortcut(new MenuShortcut(KeyEvent.VK_B)); item1.setShortcut(new MenuShortcut(KeyEvent.VK_Q)); item2.setShortcut(new MenuShortcut(KeyEvent.VK_F1));menubar.add(menu2);menubar.add(menu1);menubar.add(menu3);setMenuBar(menubar);dialog = new MyDialog(this,"帮助文档",true);pane1 = new mypanel(a,4,3,Color.red);pane3 = new mypanel(c,4,2,Color.black);pane2 = new mypanel(d,1,2,Color.black);pane4 = new mypanel(b,4,2,Color.BLUE);pane5 = new mypanel(e,1,6,Color.red);jin = new CheckboxGroup();box1 = new Checkbox("二进制",false,jin);box2 = new Checkbox("八进制",false,jin);box3 = new Checkbox("十进制",true,jin);box4 = new Checkbox("十六进制",false,jin);box5 = new Checkbox("大整数运算");pane3 = new mypanel(c,4,2,Color.black);for(int i=0;i<8;i++)pane3.btu[i].addActionListener(this);box1.addItemListener(this);box2.addItemListener(this);box3.addItemListener(this);box4.addItemListener(this);box5.addItemListener(this);for(int i=0;i<12;i++)pane1.btu[i].addActionListener(this);for(int i=0;i<2;i++)pane2.btu[i].addActionListener(this);for(int i=0;i<8;i++)pane4.btu[i].addActionListener(this);ask = new JTextField(38);ask.setHorizontalAlignment(JTextField.RIGHT);answer = new JTextField(38);ask.addKeyListener(this);answer.setHorizontalAlignment(JTextField.RIGHT); answer.setEditable(false);add(ask);add(answer);add(box5);add(box1);add(box2);add(box3);add(box4);text1= new TextArea("",6,10,3);text1.setForeground(Color.BLUE);pCenter.add("1",pane3);pCenter.add("2",text1);add(pCenter);add(pane1);add(pane4);add(pane2);add(pane5);label1 = new Label("请按格式输入批处理的数据,按空格输入下一个,回车输出答案。

二进制转换十进制在线计算器

二进制转换十进制在线计算器

二进制转换十进制在线计算器
随着互联网的发展,在线计算器变得越来越受欢迎。

二进制和十进制在线计算器是广泛应用的一种。

二进制和十进制之间的转换是计算机科学和程序设计中非常重要的基础知识。

在线计算器可以让人们更容易地将二进制转换为十进制和十进制转换为二进制。

二进制和十进制之间的转换非常简单,但如果没有一个好的计算器,将会很耗时。

在线计算器可以帮助人们更快更准确地将二进制转换为十进制,以及将十进制转换为二进制。

首先,二进制转换十进制在线计算器可以让人们输入二进制数字,如1101,点击“计算”按钮会立即显示十进制结果,如13被显示在屏幕上。

它可以让人们计算任意长度的二进制数字,而不用担心复杂的算法。

其次,二进制转换十进制在线计算器还可以让人们将任何十进制数字,如16,转换为二进制数字,如10000。

用户只需输入要转换的十进制数字,点击“计算”按钮就可以快速获得二进制结果,无需计算机知识。

此外,一些在线计算器还提供汇编语言和C语言转换功能,可以让用户以可读的二进制数字表示十进制数字,或者以可读的十进制数字表示二进制数字。

总而言之,二进制转换十进制在线计算器是一种非常有用的工具,可以帮助用户更快更准确地完成二进制和十进制之间的转换。

这种在线计算器可以节省时间,提高工作效率,从而更有效地利用现有资源。

二进制转十进制计算器

二进制转十进制计算器

二进制转十进制计算器
《二进制转十进制计算器》是一种用于实现二进制转成十进制数值转换的计算器,它可以用来帮助新手快速上手二进制基础数学,从而掌握数字编码的基本原理。

二进制是计算机科学中常用的一种数字编码,它是由二进制位组成的,也就是由0和1两个数字组成的一类数字。

它最初是由神经科学家和数学家通过研究脑电波而发明的,目的是能够更有效地模拟人类大脑行为和思考。

在计算机科学中,二进制位主要是用来表示数学数据,换句话就是,它可以把任何数字(属性)用二进制位表示出来。

二进制转十进制计算器的基础原理是首先将二进制数字转换为
十进制数值,然后再进行计算。

其具体运算步骤是:将给定的二进制数字拆分为单位;每一位数字乘以2的指数,即2^0、2^1、2^2、2^3……;最后将得到的所有乘积相加便可得出答案。

例如,将二进制数字10101转换成十进制,其具体操作流程为:
(1*2^4)+(0*2^3)+(1*2^2)+(0*2^1)+(1*2^0)=16+0+4+0+1=21,所以10101的十进制值是21。

使用二进制转十进制计算器的好处是很明显的,它可以节省大量的时间,计算结果也更加精准。

特别是在一些应用程序的开发过程中,它能够帮助开发者把复杂的计算任务简化,从而更快地完成所有开发工作。

总之,二进制转十进制计算器在计算机科学中具有重要意义。

它不仅能够节省大量的时间,还能够帮助开发者简化复杂任务,从而节
省宝贵的开发成本。

让我们抓住机会,使用这种计算器,来快速掌握二进制数学。

科学计算器有哪些功能

科学计算器有哪些功能

科学计算器有哪些功能科学计算器有哪些功能科学计算器支持显示24位数字,支持运算优先选择模式、进制转换功能、标准数学函数、百分比计算、方根计算、对数、次方、记忆等等功能。

下面,店铺就为大家讲讲科学计算器的功能,快来看看吧!1 RCL STOrcl是查看变量,sto是赋值2 DEG RAD GRADD(DEG) R(RAD) G(GRAD)分别表示角度制,弧度制,百分度制.计算机有四种状态:Norm、Fix、Eng、Sci,功能分别是:指定指数记号范围、小数点位设置、工程计算、有效数位设置。

如果计算器处于其它三种状态则可能会出现运算错误。

Deg是将计算器的角设定为度的状态,共有六种:Deg—指定度作为预设单位。

Rad—指定弧度作为预设单位。

Gra—指定梯度作为预设单位。

也称为“百分度”和“新度”。

°—指定度作某输入值的单位。

r—指定弧度作某输入值的`单位。

g—指定梯度作某输入值的单位。

有时如果误将角度(Deg)设置为弧度(Rad)或梯度(Gra)状态就会造成计算结果错误°、r、g是用于标识角度单位的。

所以要消除 GRA 你找到计算模式切换就可以消除!3 hyp sin cos tan ln log等sin cos tan 为三角函数,sin-1 cos-1 tan-1对应为反三角函数,等同于arcsin,arccos,arctanhyp是sin、cos、tan的双曲线函数.ln 即自然对数 ln a=loge a.log 对数函数其余函数在这里不多解释4 MS MR MC M- M+计算器里面有一个存储器,默认状态下是空的(即0)。

它能保存任意一个数值,也只能存一个值。

你可以把它当成一个只能保存一件东西的盒子。

MS:存当前显示的数值MR:读取存储器中的数值,并显示出来MC:清除已存的数据M-:用已存的数值减去当前显示的数值后,再将结果保存M+:用已存的数值加上当前显示的数值后,再将结果保存5 conv ansans 英文单词为answer。

手机科学计算器中的60进制按键

手机科学计算器中的60进制按键
普通计算器:Array键可输入角度并转换。

(1)角度的输入:输入角度要以六十进制输入,度和分秒以小数点隔开,然后按Array键,可将六十进制的角度值转换成+进制,用于角度计算或三角函数计算。

具体操作如下:输入129.5926-+按Array;这时屏幕上显示结果
129.995556,可以进行角度的加减或三角函MODE键按一下的介绍
科学计算器首先映入眼帘的是方向键两边的四个按钮,左边的两个相信很多人都经常使用分别是SHIFT键和ALPHA(这个按键待会儿会介绍),右边的MODE键很多人并不是经常使用,因而对其的了解可能并不是很多。

在线进位制计算机2进制换算(十六进制计算器在线)

在线进位制计算机2进制换算(十六进制计算器在线)在线进位制计算机的核心部分是进制转换模块。

它将用户输入的数字
进行解析,并根据用户选择的进制进行相应的转换。

在2进制转换为16
进制的计算中,先将2进制数按4位一组进行划分,然后将每组转换为对
应的16进制数。

例如,二进制数1010可以划分为10和10两组,然后分
别转换为A和A,结果为AA。

此外,进制计算器还具备基本运算功能。

它可以进行进制间的加法、
减法、乘法和除法运算。

在进行运算时,计算器会将输入的数字转换为相
应的十进制数,然后进行运算,最后再将结果转换为用户选择的进制。

在线进制计算器的优点之一是方便快捷。

用户只需要输入数字和选择
进制,计算器会自动完成转换和运算。

这样可以省去手动计算的繁琐过程,提高计算效率。

此外,在线进制计算器还具备可视化界面。

用户可以通过图形界面来
输入数字和选择进制,同时可以直观地看到结果。

这种交互方式使得计算
更加直观和易于使用。

在线进制计算器广泛应用于计算机科学和信息技术领域。

在编程中,
经常需要进行不同进制的转换和运算。

进制计算器为程序员提供了一个方
便高效的工具,可以加快开发速度。

总结起来,在线进制计算器是一种方便快捷的工具,可以进行进制转
换和运算。

它能够将数字在不同进制间进行转换,并进行基本运算。

在线
进制计算器具有可视化界面和高效的计算功能,广泛应用于计算机和信息
技术领域。

北邮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的结果上处理。

科学计算转换

科学计算转换科学计算转换为了满足大家希望更好地使用手中的科学计算器的需求,理解与熟悉计算器上的各种功能,提高在各类科学计算器应用场合下(特别是考试)的计算器使用效率,我们特别策划了一些计算器基本使用方法的系列文章,讲解科学计算器上一些比较常用的功能的使用,方便大家学习与交流。

本次要向大家介绍的内容是如何使用科学计算器进行进制转换与逻辑位运算。

涉及到的内容包括在计算器上进行有符号整数的2、8、10、16进制换算、不同进制的混合运算以及与运算(and)、或运算(or)、非运算(Not)等逻辑位运算等的计算。

这一功能在计算机与计算机科学、各种语言的程序设计(C、C++、Python、BASIC等等)、单片机、微机原理、数字电子技术等领域中经常用到,因此使用计算器来完成这些计算,不仅能够避免手算的麻烦,还可以避免位数过多容易出错的问题。

进制转换与逻辑位运算在不同的计算器上能够表示或计算的范围不同。

这篇文章中主要以卡西欧(CASIO)的fx-991CN X中文版这一型号的计算器进行讲解,原因如下:(1)fx-991CN X能够进行进制转换计算的范围是(二进制)32位有符号整数,以补码的形式表示,最高位是符号位,0代表整数,1代表负数。

运算的范围不受所选进制的限制,不同的进制之间可以在这一范围下无缝转换。

即不论在哪个进制下,运算的范围都是十进制:-2147483648()~+2147483647(),十六进制:0,正数00000001~7FFFFFFF,负数80000000~FFFFFFFF;(2)在表示二进制的时候,数字以四个一组进行区分,方便查看。

其他的型号,例如在fx-991ES PLUS上,虽然十进制、十六进制、八进制下的运算范围都是32位有符号整数,但由于屏幕显示的限制,在二进制下被缩减到了16位有符号整数,如果在其他进制下的计算范围超出了二进制下的表示范围,切换到二进制时就会立即报错,干扰计算。

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

JAVA综合程序设计与分析一、题目:用java语言编写科学计算器,要求完成加、减、乘、除以及基本函数处理还有数的进制转换。

二、摘要:本计算器可以进行简单的四则运算(加、减、乘、除)但仅限于十进制下,还可以进行(二进制,八进制,十进制)之间的相互转换,还有基本三角函数和平方根,对数等基本数学函数运算三、功能说明:A.运用两个面板的叠加做出界面。

B.通过在按钮的单击事件处理方法中调用类的成员方法calculate ()来进行简易计算器的各种运算,并正确实现运算功能。

C.调用Math包中的方法实现各函数功能。

D.添加菜单条,列出‘选项’、‘进制转换’、‘帮助’等菜单选项,并分别实现‘选项’中‘退出’的功能,通过调用Integer包中的方法实现二进制、八进制的转换,‘帮助'菜单栏中‘用法’的提示对话框。

E.整个程序对话框可实现最小化、最大化、关闭。

四、详细设计package计算器;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Calculator extends Frame implements ActionListener, WindowListener{private Container container;private GridBagLayout layout;private GridBagConstraints constraints;private JTextField displayField; //计算结果显示区private String lastCommand; //保存+,-,*,/,=命令0private double result; //保存计算结果private boolean start; //判断是否为数字的开始private JMenuBar menubar;private JMenuItem m_exit,m2_ejz,m2_bjz;private Dialog dialog;private Label label_dialog;private JButtonbutton_sqrt,button_plusminus,button_CE,button_cancel,button_1,button_ 2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,button _0,button_plus,button_minus,button_multiply,button_divide,button_point, button_equal,button_log,button_tan,button_cos,button_sin,button_exp;public Calculator() //构造方法设置布局、为按钮注册事件监听器{super("Calculator");this.setLocation(240,200);this.setSize(350,300);this.setResizable(true);this.setLayout(new GridLayout(7,1));this.addmyMenu(); //调用成员方法添加菜单displayField=new JTextField(30);this.add(displayField);displayField.setEditable(true);start=true;result=0;lastCommand = "=";JPanel panel0=new JPanel();panel0.setLayout(new GridLayout(1,4,4,4));JPanel panel1=new JPanel();panel1.setLayout(new GridLayout(1,5,4,4));this.add(panel1);button_sqrt=new JButton("sqrt");button_plusminus=new JButton("+/-");button_exp=new JButton("exp");button_CE=new JButton("退格");button_cancel=new JButton("C");JPanel panel2=new JPanel();panel2.setLayout(new GridLayout(1,5,4,4));this.add(panel2);button_7=new JButton("7");button_8=new JButton("8");button_9=new JButton("9");button_log=new JButton("log");button_divide=new JButton("/");JPanel panel3=new JPanel();panel3.setLayout(new GridLayout(1,5,4,4));this.add(panel3);button_4=new JButton("4");button_5=new JButton("5");button_6=new JButton("6");button_tan=new JButton("tan");button_multiply=new JButton("*");JPanel panel4=new JPanel();panel4.setLayout(new GridLayout(1,5,4,4));this.add(panel4);button_1=new JButton("1");button_2=new JButton("2");button_3=new JButton("3");button_cos=new JButton("cos");button_minus=new JButton("-");JPanel panel5=new JPanel();panel5.setLayout(new GridLayout(1,5,4,4));this.add(panel5);button_0=new JButton("0");button_point=new JButton(".");button_equal=new JButton("=");button_sin=new JButton("sin");button_plus=new JButton("+");panel1.add(button_sqrt);panel1.add(button_plusminus);panel1.add(button_exp);panel1.add(button_CE);panel1.add(button_cancel);panel2.add(button_7);panel2.add(button_8);panel2.add(button_9);panel2.add(button_log);panel2.add(button_divide);panel3.add(button_4);panel3.add(button_5);panel3.add(button_6);panel3.add(button_tan);panel3.add(button_multiply);panel4.add(button_1);panel4.add(button_2);panel4.add(button_3);panel4.add(button_cos);panel4.add(button_minus);panel5.add(button_0);panel5.add(button_point);panel5.add(button_equal);panel5.add(button_sin);panel5.add(button_plus);button_sqrt.addActionListener(this);button_plusminus.addActionListener(this);button_exp.addActionListener(this);button_CE.addActionListener(this);button_cancel.addActionListener(this);button_7.addActionListener(this);button_8.addActionListener(this);button_9.addActionListener(this);button_log.addActionListener(this);button_divide.addActionListener(this);button_4.addActionListener(this);button_5.addActionListener(this);button_6.addActionListener(this);button_tan.addActionListener(this);button_multiply.addActionListener(this);button_1.addActionListener(this);button_2.addActionListener(this);button_3.addActionListener(this);button_cos.addActionListener(this);button_minus.addActionListener(this);button_0.addActionListener(this);button_point.addActionListener(this);button_equal.addActionListener(this);button_sin.addActionListener(this);button_plus.addActionListener(this);this.addWindowListener(new WinClose()); //注册窗口监听器this.setVisible(true);}private void addmyMenu() //菜单的添加{JMenuBar menubar=new JMenuBar();this.add(menubar);JMenu m1=new JMenu("选项");JMenu m2=new JMenu("进制转换");JMenuItem m1_exit=new JMenuItem("退出");m1_exit.addActionListener(this);JMenuItem m2_ejz=new JMenuItem("二进制");m2_ejz.addActionListener(this);JMenuItem m2_bjz=new JMenuItem("八进制");m2_bjz.addActionListener(this);JMenu m3 = new JMenu(" 帮助");JMenuItem m3_Help = new JMenuItem("用法");m3_Help.addActionListener(this);dialog = new Dialog(this,"提示",true); //模式窗口dialog.setSize(240,80);label_dialog = new Label("",Label.CENTER); //标签的字符串为空,居中对齐dialog.add(label_dialog);dialog.addWindowListener(this); //为对话框注册窗口事件监听器m1.add(m1_exit);menubar.add(m1);m2.add(m2_ejz);m2.add(m2_bjz);menubar.add(m2);m3.add(m3_Help);menubar.add(m3); }public void actionPerformed(ActionEvent e) //按钮的单击事件处理方法{if(e.getSource().equals(button_1)||e.getSource().equals(button_2) ||e.getSource().equals(button_3)||e.getSource().equals(button_4)||e.getSource().equals(button_5)|| e.getSource().equals(button_6)||e.getSource().equals(button_7)|| e.getSource().equals(button_8)||e.getSource().equals(button_9) ||e.getSource().equals(button_0)||e.getSource().equals(button_point)||e.getSource().equals(button_plusm inus)||e.getSource().equals(button_cancel)||e.getSource().equals(button_CE)) { //非运算符的处理方法String input=e.getActionCommand();if (start){displayField.setText("");start=false;if(input.equals("+/-"))displayField.setText(displayField.getText()+"-");}if(!input.equals("+/-")){String str=displayField.getText();if(input.equals("退格")) //退格键的实现方法{if(str.length()>0)displayField.setText(str.substring(0,str.length()-1));}else if(input.equals("C")) //清零键的实现方法{displayField.setText("0");start=true;}elsedisplayField.setText(displayField.getText()+input);}}else if (e.getActionCommand()=="二进制") //二进制的转换{int n=Integer.parseInt(displayField.getText());displayField.setText(Integer.toBinaryString(n));}else if (e.getActionCommand()=="八进制") //八进制的转换{int n=Integer.parseInt(displayField.getText());displayField.setText(Integer.toOctalString(n));}else if (e.getActionCommand()=="退出") //选项中退出的处理方法{System.exit(0);}else if(e.getActionCommand()=="用法") //按下'帮助'菜单栏中用法的处理方法{label_dialog.setText("sqrt,exp等键是先输运算符再输数字\n");dialog.setLocation(400,250);dialog.setVisible(true);}else//各运算符的识别{String command=e.getActionCommand();if(start){lastCommand=command;}else{calculate(Double.parseDouble(displayField.getText()));lastCommand=command;start=true;}}}public void calculate(double x) //各运算符的具体运算方法{double d=0;if (lastCommand.equals("+"))result+= x;else if (lastCommand.equals("-"))result-=x;else if (lastCommand.equals("*"))result*=x;else if (lastCommand.equals("/"))result/=x;else if (lastCommand.equals("="))result=x;else if (lastCommand.equals("sqrt")){d=Math.sqrt(x);result=d;}else if (lastCommand.equals("exp")){d=Math.exp(x);result=d;}else if (lastCommand.equals("log")){d=Math.log(x);result=d;}else if (lastCommand.equals("tan")){d=Math.tan(x);result=d;}else if (lastCommand.equals("cos")){d=Math.cos(x);result=d;}else if (lastCommand.equals("sin")){d=Math.sin(x);result=d;}displayField.setText(""+ result);}public void windowClosing(WindowEvent e){if(e.getSource()==dialog)dialog.setVisible(false); //隐藏对话框elseSystem.exit(0);}public void windowOpened(WindowEvent e) { }public void windowActivated(WindowEvent e) { }public void windowDeactivated(WindowEvent e) { }public void windowClosed(WindowEvent e) { }public void windowIconified(WindowEvent e) { }public void windowDeiconified(WindowEvent e) { }public static void main(String args[]){Calculator calculator=new Calculator();}}class WinClose implements WindowListener{public void windowClosing(WindowEvent e) //单击窗口关闭按钮时触发并执行实现窗口监听器接口中的方法{System.exit(0); //结束程序运行}public void windowOpened(WindowEvent e){}public void windowActivated(WindowEvent e){}public void windowDeactivated(WindowEvent e){}public void windowClosed(WindowEvent e){}public void windowIconified(WindowEvent e){}public void windowDeiconified(WindowEvent e){}}五、程序运行结果1.界面2.基本运算,如54 -12 =42:3.数学函数运算,如9的开平方为3:六、总结与体会总结:(1)通过编写这个相对复杂的程序,让我认识解决实际问题前应现建立模型,再通过建立的模型使问题简单化,从而解决问题。

相关文档
最新文档