皮皮网

【免费素材源码】【picker源码】【GRTOOLBOX 源码】关系计算器源码_关系计算器源码怎么用

2024-11-06 13:34:02 来源:网站源码支持ftp

1.求一个JAVA计算器源代码。关系不要按钮的计算那种。速度。器源。码关急用
2.java 写的系计计算器源代码只实现加减乘除四则运算即可
3.用JAVA编写的科学计算器源代码
4.用C语言写的计算器源代码

关系计算器源码_关系计算器源码怎么用

求一个JAVA计算器源代码。不要按钮的算器免费素材源码那种。速度。源码用。关系急用

       import java.awt.*;

       import java.awt.event.*;

       import java.lang.*;

       import javax.swing.*;

       public class Counter extends Frame

       {

       //声明三个面板的计算布局

       GridLayout gl1,gl2,gl3;

       Panel p0,p1,p2,p3;

       JTextField tf1;

       TextField tf2;

       Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b;

       StringBuffer str;//显示屏所显示的字符串

       double x,y;//x和y都是运算数

       int z;//Z表示单击了那一个运算符.0表示"+",1表示"-",2表示"*",3表示"/"

       static double m;//记忆的数字

       public Counter()

       {

       gl1=new GridLayout(1,4,,0);//实例化三个面板的布局

       gl2=new GridLayout(4,1,0,);

       gl3=new GridLayout(4,5,,);

       tf1=new JTextField();//显示屏

       tf1.setHorizontalAlignment(JTextField.RIGHT);

       tf1.setEnabled(false);

       tf1.setText("0");

       tf2=new TextField();//显示记忆的索引值

       tf2.setEditable(false);

       //实例化所有按钮、设置其前景色并注册监听器

       b0=new Button("Backspace");

       b0.setForeground(Color.red);

       b0.addActionListener(new Bt());

       b1=new Button("CE");

       b1.setForeground(Color.red);

       b1.addActionListener(new Bt());

       b2=new Button("C");

       b2.setForeground(Color.red);

       b2.addActionListener(new Bt());

       b3=new Button("MC");

       b3.setForeground(Color.red);

       b3.addActionListener(new Bt());

       b4=new Button("MR");

       b4.setForeground(Color.red);

       b4.addActionListener(new Bt());

       b5=new Button("MS");

       b5.setForeground(Color.red);

       b5.addActionListener(new Bt());

       b6=new Button("M+");

       b6.setForeground(Color.red);

       b6.addActionListener(new Bt());

       b7=new Button("7");

       b7.setForeground(Color.blue);

       b7.addActionListener(new Bt());

       b8=new Button("8");

       b8.setForeground(Color.blue);

       b8.addActionListener(new Bt());

       b9=new Button("9");

       b9.setForeground(Color.blue);

       b9.addActionListener(new Bt());

       b=new Button("/");

       b.setForeground(Color.red);

       b.addActionListener(new Bt());

       b=new Button("sqrt");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("4");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("5");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("6");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("*");

       b.setForeground(Color.red);

       b.addActionListener(new Bt());

       b=new Button("%");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("1");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("2");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("3");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("-");

       b.setForeground(Color.red);

       b.addActionListener(new Bt());

       b=new Button("1/X");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("0");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("+/-");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button(".");

       b.setForeground(Color.blue);

       b.addActionListener(new Bt());

       b=new Button("+");

       b.setForeground(Color.red);

       b.addActionListener(new Bt());

       b=new Button("=");

       b.setForeground(Color.red);

       b.addActionListener(new Bt());

       //实例化四个面板

       p0=new Panel();

       p1=new Panel();

       p2=new Panel();

       p3=new Panel();

       //创建一个空字符串缓冲区

       str=new StringBuffer();

       //添加面板p0中的器源组件和设置其在框架中的位置和大小

       p0.add(tf1);

       p0.setBounds(,,,);

       //添加面板p1中的组件和设置其在框架中的位置和大小

       p1.setLayout(gl1);

       p1.add(tf2);

       p1.add(b0);

       p1.add(b1);

       p1.add(b2);

       p1.setBounds(,,,);

       //添加面板p2中的组件并设置其的框架中的位置和大小

       p2.setLayout(gl2);

       p2.add(b3);

       p2.add(b4);

       p2.add(b5);

       p2.add(b6);

       p2.setBounds(,,,);

       //添加面板p3中的组件并设置其在框架中的位置和大小

       p3.setLayout(gl3);//设置p3的布局

       p3.add(b7);

       p3.add(b8);

       p3.add(b9);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.add(b);

       p3.setBounds(,,,);

       //设置框架中的布局为空布局并添加4个面板

       setLayout(null);

       add(p0);

       add(p1);

       add(p2);

       add(p3);

       setResizable(false);//禁止调整框架的大小

       //匿名类关闭窗口

       addWindowListener(new WindowAdapter(){

       public void windowClosing(WindowEvent e1)

       {

       System.exit(0);

       }

       });

       setBackground(Color.lightGray);

       setBounds(,,,);

       setVisible(true);

       }

       //构造监听器

       class Bt implements ActionListener

       {

       public void actionPerformed(ActionEvent e2)

       {

       try{

       if(e2.getSource()==b1)//选择"CE"清零

       {

       tf1.setText("0");//把显示屏清零

       str.setLength(0);//清空字符串缓冲区以准备接收新的输入运算数

       }

       else if(e2.getSource()==b2)//选择"C"清零

       {

       tf1.setText("0");//把显示屏清零

       str.setLength(0);

       }

       else if(e2.getSource()==b)//单击"+/-"选择输入的运算数是正数还是负数

       {

       x=Double.parseDouble(tf1.getText().trim());

       tf1.setText(""+(-x));

       }

       else if(e2.getSource()==b)//单击加号按钮获得x的值和z的值并清空y的值

       {

       x=Double.parseDouble(tf1.getText().trim());

       str.setLength(0);//清空缓冲区以便接收新的另一个运算数

       y=0d;

       z=0;

       }

       else if(e2.getSource()==b)//单击减号按钮获得x的值和z的值并清空y的值

       {

       x=Double.parseDouble(tf1.getText().trim());

       str.setLength(0);

       y=0d;

       z=1;

       }

       else if(e2.getSource()==b)//单击乘号按钮获得x的值和z的值并清空y的值

       {

       x=Double.parseDouble(tf1.getText().trim());

       str.setLength(0);

       y=0d;

       z=2;

       }

       else if(e2.getSource()==b)//单击除号按钮获得x的值和z的值并空y的值

       {

       x=Double.parseDouble(tf1.getText().trim());

       str.setLength(0);

       y=0d;

       z=3;

       }

       else if(e2.getSource()==b)//单击等号按钮输出计算结果

       {

       str.setLength(0);

       switch(z)

       {

       case 0 : tf1.setText(""+(x+y));break;

       case 1 : tf1.setText(""+(x-y));break;

       case 2 : tf1.setText(""+(x*y));break;

       case 3 : tf1.setText(""+(x/y));break;

       }

       }

       else if(e2.getSource()==b)//单击"."按钮输入小数

       {

       if(tf1.getText().trim().indexOf(′.′)!=-1)//判断字符串中是否已经包含了小数点

       {

       }

       else//如果没数点有小

       {

       if(tf1.getText().trim().equals("0"))//如果初时显示为0

       {

       str.setLength(0);

       tf1.setText((str.append("0"+e2.getActionCommand())).toString());

       }

       else if(tf1.getText().trim().equals(""))//如果初时显示为空则不做任何操作

       {

       }

       else

       {

       tf1.setText(str.append(e2.getActionCommand()).toString());

       }

       }

       y=0d;

       }

       else if(e2.getSource()==b)//求平方根

       {

       x=Double.parseDouble(tf1.getText().trim());

       tf1.setText("数字格式异常");

       if(x<0)

       tf1.setText("负数没有平方根");

       else

       tf1.setText(""+Math.sqrt(x));

       str.setLength(0);

       y=0d;

       }

       else if(e2.getSource()==b)//单击了"%"按钮

       {

       x=Double.parseDouble(tf1.getText().trim());

       tf1.setText(""+(0.*x));

       str.setLength(0);

       y=0d;

       }

       else if(e2.getSource()==b)//单击了"1/X"按钮

       {

       x=Double.parseDouble(tf1.getText().trim());

       if(x==0)

       {

       tf1.setText("除数不能为零");

       }

       else

       {

       tf1.setText(""+(1/x));

       }

       str.setLength(0);

       y=0d;

       }

       else if(e2.getSource()==b3)//MC为清除内存

       {

       m=0d;

       tf2.setText("");

       str.setLength(0);

       }

       else if(e2.getSource()==b4)//MR为重新调用存储的数据

       {

       if(tf2.getText().trim()!="")//有记忆数字

       {

       tf1.setText(""+m);

       }

       }

       else if(e2.getSource()==b5)//MS为存储显示的数据

       {

       m=Double.parseDouble(tf1.getText().trim());

       tf2.setText("M");

       tf1.setText("0");

       str.setLength(0);

       }

       else if(e2.getSource()==b6)//M+为将显示的数字与已经存储的数据相加要查看新的数字单击MR

       {

       m=m+Double.parseDouble(tf1.getText().trim());

       }

       else//选择的是其他的按钮

       {

       if(e2.getSource()==b)//如果选择的是"0"这个数字键

       {

       if(tf1.getText().trim().equals("0"))//如果显示屏显示的为零不做操作

       {

       }

       else

       {

       tf1.setText(str.append(e2.getActionCommand()).toString());

       y=Double.parseDouble(tf1.getText().trim());

       }

       }

       else if(e2.getSource()==b0)//选择的是“BackSpace”按钮

       {

       if(!tf1.getText().trim().equals("0"))//如果显示屏显示的不是零

       {

       if(str.length()!=1)

       {

       tf1.setText(str.delete(str.length()-1,str.length()).toString());//可能抛出字符串越界异常

       }

       else

       {

       tf1.setText("0");

       str.setLength(0);

       }

       }

       y=Double.parseDouble(tf1.getText().trim());

       }

       else//其他的数字键

       {

       tf1.setText(str.append(e2.getActionCommand()).toString());

       y=Double.parseDouble(tf1.getText().trim());

       }

       }

       }

       catch(NumberFormatException e){

       tf1.setText("数字格式异常");

       }

       catch(StringIndexOutOfBoundsException e){

       tf1.setText("字符串索引越界");

       }

       }

       }

       public static void main(String args[])

       {

       new Counter();

       }

       }

java 写的计算器源代码只实现加减乘除四则运算即可

       import java.awt.*;

       import java.awt.event.*;

       import javax.swing.*;

       import java.util.Vector;

       public class calculator

        {

        String str1="0"; //运算数1 初值一定为0 为了程序的安全

        String str2="0"; //运算数2

        String fh="+"; //运算符

        String jg="";//结果

        //状态开关 重要

        int k1=1;//开关1 用于选择输入方向 将要写入str2或 str2

        int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算

        int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0

        int k4=1;//开关4 str2 同上

        int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉

        JButton jicunqi; //寄存器 记录 是否连续按下符号键

        Vector vt=new Vector(,);

        JFrame frame=new JFrame("sunshine---计算器");

        JTextField jg_TextField=new JTextField(jg,);//列

        JButton clear_Button=new JButton("清除");

        JButton button0=new JButton("0");

        JButton button1=new JButton("1");

        JButton button2=new JButton("2");

        JButton button3=new JButton("3");

        JButton button4=new JButton("4");

        JButton button5=new JButton("5");

        JButton button6=new JButton("6");

        JButton button7=new JButton("7");

        JButton button8=new JButton("8");

        JButton button9=new JButton("9");

        JButton button_Dian=new JButton(".");

        JButton button_jia=new JButton("+");

        JButton button_jian=new JButton("-");

        JButton button_cheng=new JButton("*");

        JButton button_chu=new JButton("/");

        JButton button_dy=new JButton("=");

       public static void main(String[] args)

        {

        calculator calculator=new calculator();

        }

       calculator()

        {

        jg_TextField.setHorizontalAlignment(JTextField.RIGHT );//文本框 右对齐

        JPanel pan=new JPanel();

        pan.setLayout(new GridLayout(4,4,5,5));//四行四列 边距为5像素

        pan.add(button7);

        pan.add(button8);

        pan.add(button9);

        pan.add(button_chu);

        pan.add(button4);

        pan.add(button5);

        pan.add(button6);

        pan.add(button_cheng);

        pan.add(button1);

        pan.add(button2);

        pan.add(button3);

        pan.add(button_jian);

        pan.add(button0);

        pan.add(button_Dian);

        pan.add(button_dy);

        pan.add(button_jia);

        pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));//pan对象的边距

        JPanel pan2=new JPanel();

        pan2.add(jg_TextField);

        JPanel pan3=new JPanel(); //为什么要 多此一句呢? 因为我不会设置 按钮的大小

        pan3.setLayout(new FlowLayout());

        pan3.add(clear_Button);

        //clear_Button.setSize(,);//设置清零按钮的大小 吗的 不好使 !!码关

        frame.setLocation(,系计 ); //主窗口 出现在位置

        frame.setResizable(false); //不能调大小

        frame.getContentPane().setLayout(new BorderLayout());

        frame.getContentPane().add(pan2,BorderLayout.NORTH);

        frame.getContentPane().add(pan,BorderLayout.CENTER);

        frame.getContentPane().add(pan3,BorderLayout.SOUTH);

        frame.pack();

        frame.setVisible(true);

        //以上是 控件 和 布局

        //下面是事件处理 程 序

        //--------------- 数 字 键 ----------------

        class JianTing implements ActionListener

        {

        public void actionPerformed(ActionEvent e)

        {

        String ss=((JButton)e.getSource()).getText();

        jicunqi=(JButton)e.getSource();

        vt.add(jicunqi);

        if (k1==1)

        {

        if(k3==1)

        {

        str1="";

        k5=1;//还原开关k5状态

        }

        str1=str1+ss;

        //k2=1;

        k3=k3+1;

        //System.out.println(str1);

        jg_TextField.setText(str1);//显示

        }

        else if(k1==2)

        {

        if (k4==1)

        {

        str2="";

        k5=1; //还原开关k5状态

        }

        str2=str2+ss;

        //k2=2;

        k4=k4+1;

        ///////////////测试////////////////

        jg_TextField.setText(str2);

        }

        }

        }

        //--------符 号-----------

        class JianTing_fh implements ActionListener

        {

        public void actionPerformed(ActionEvent e)

        {

        String ss2=((JButton)e.getSource()).getText();

        jicunqi=(JButton)e.getSource();

        vt.add(jicunqi);

        if(k2==1)

        {

        k1=2;//开关 k1 为1时,向数1写 为2时,向数2写

        k5=1;

        fh=ss2;

        k2=k2+1;//按符号键的算器picker源码次数

        }

        else

        {

        int a=vt.size();

        JButton c=(JButton)vt.get(a-2); if(!(c.getText().equals("+"))&&!(c.getText().equals("-"))&&!(c.getText().equals("*"))&&!(c.getText().equals("/")))

        {

        yuns();

        str1=jg;

        k1=2;//开关 k1 为1时,向数1写 为2时,向数2写

        k5=1;

        k4=1;

        fh=ss2;

        } k2=k2+1;

        }

        }

        }

        //--------清除-------

        class JianTing_clear implements ActionListener

        {

        public void actionPerformed(ActionEvent e)

        {

        jicunqi=(JButton)e.getSource();

        vt.add(jicunqi);

        k5=1;

        k2=1;

        k1=1;

        k3=1;

        k4=1;

        str1="0";

        str2="0";

        fh="";

        jg="";

        jg_TextField.setText(jg);

        vt.clear();

        }

        }

        //----------------等 于 ---------------------

        class JianTing_dy implements ActionListener

        {

        public void actionPerformed(ActionEvent e)

        {

        jicunqi=(JButton)e.getSource();

        vt.add(jicunqi);

        yuns();

        k1=1; //还原开关k1状态

        //str1=jg;

        k2=1;

        k3=1;//还原开关k3状态

        k4=1; //还原开关k4状态

        str1=jg; //为7+5= +5= 这种计算做准备

        }

        }

        //----------------小数点 ---------------------

        class JianTing_xiaos implements ActionListener

        {

        public void actionPerformed(ActionEvent e)

        {

        jicunqi=(JButton)e.getSource();

        vt.add(jicunqi);

        if(k5==1)

        {

        String ss2=((JButton)e.getSource()).getText();

        if (k1==1)

        {

        if(k3==1)

        {

        str1="";

        k5=1; //还原开关k5状态

        }

        str1=str1+ss2;

        //k2=1;

        k3=k3+1;

        //System.out.println(str1);

        jg_TextField.setText(str1);//显示

        }

        else if(k1==2)

        {

        if (k4==1)

        {

        str2="";

        k5=1; //还原开关k5状态

        }

        str2=str2+ss2;

        //k2=2;

        k4=k4+1;

        ///////////////测试////////////////

        jg_TextField.setText(str2);

        }

        }

        k5=k5+1;

        }

        }

        //注册 监听器

        JianTing_dy jt_dy=new JianTing_dy();

        JianTing jt= new JianTing();//临听数字键

        JianTing_fh jt_fh= new JianTing_fh();//临 听符 号键

        JianTing_clear jt_c=new JianTing_clear(); //清除键

        JianTing_xiaos jt_xs=new JianTing_xiaos();// 小数点 键

        button7.addActionListener(jt);

        button8.addActionListener(jt);

        button9.addActionListener(jt);

        button_chu.addActionListener(jt_fh);

        button4.addActionListener(jt);

        button5.addActionListener(jt);

        button6.addActionListener(jt);

        button_cheng.addActionListener(jt_fh);

        button1.addActionListener(jt);

        button2.addActionListener(jt);

        button3.addActionListener(jt);

        button_jian.addActionListener(jt_fh);

        button0.addActionListener(jt);

        button_Dian.addActionListener(jt_xs);

        button_dy.addActionListener(jt_dy);

        button_jia.addActionListener(jt_fh);

        clear_Button.addActionListener(jt_c);

        //关闭事件处理程序

        frame.addWindowListener(new WindowAdapter()

        {

        public void windowClosing(WindowEvent e)

        {

        System.exit(0);

        }

        });

        }

        //---------------计 算------------------

        public void yuns()

        {

        double a2,源码用b2;//运算数1,2

        String c=fh;// 运算符

        double jg2=0 ;//结果

        if (c.equals(""))

        {

        //System.out.println("请输入运算符");

        jg_TextField.setText("请输入运算符");

        }

        else

        {

        System.out.println("str1:"+str1);//调试时 使 用

        System.out.println("str2:"+str2);//调试时 使 用

        System.out.println("运算符:"+fh);//调试时 使 用

        if (str1.equals(".")) //字符串 "." 转换成double型数据时 会出错 所以手工转

        str1="0.0";

        if (str2.equals("."))

        str2="0.0";

        a2=Double.valueOf(str1).doubleValue();

        b2=Double.valueOf(str2).doubleValue();

        System.out.println("double型的a2:"+a2); //调试时 使 用

        System.out.println("double型的b2:"+b2); //调试时 使 用

        if (c.equals("+"))

        {

        jg2=a2+b2;

        }

        if (c.equals("-"))

        {

        jg2=a2-b2;

        }

        if (c.equals("*"))

        {

        jg2=a2*b2;

        }

        if (c.equals("/"))

        {

        if(b2==0)

        {

        jg2=0;// by 0 cu!

        }

        else

        {

        jg2=a2/b2;

        }

        }

        System.out.println("double型a2"+fh+"b2结果:"+jg2);

        System.out.println();

        jg=((new Double(jg2)).toString());

        jg_TextField.setText(jg);

        }

       }

       }

用JAVA编写的科学计算器源代码

       以下是一个简单的用Java编写的科学计算器的源代码示例:

       java

       import java.util.Scanner;

       public class ScientificCalculator {

       public static void main(String[] args) {

       Scanner scanner = new Scanner(System.in);

       System.out.println("Welcome to the Scientific Calculator!");

       System.out.println("Enter 'add', 'subtract', 'multiply', 'divide', 'sin', 'cos', 'tan', 'log', 'exp', 'sqrt', or 'quit' to exit.");

       while (true) {

       System.out.print("Enter operation (e.g., add 2 3): ");

       String operation = scanner.nextLine();

       if (operation.equalsIgnoreCase("quit")) {

       break;

       }

       String[] parts = operation.split(" ");

       double num1 = Double.parseDouble(parts[1]);

       double num2 = Double.parseDouble(parts[2]);

       switch (parts[0].toLowerCase()) {

       case "add":

       System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));

       break;

       case "subtract":

       System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));

       break;

       case "multiply":

       System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));

       break;

       case "divide":

       if (num2 != 0) {

       System.out.println(num1 + " / " + num2 + " = " + (num1 / num2));

       } else {

       System.out.println("Error: Division by zero is not allowed.");

       }

       break;

       case "sin":

       System.out.println("sin(" + num1 + ") = " + Math.sin(Math.toRadians(num1)));

       break;

       case "cos":

       System.out.println("cos(" + num1 + ") = " + Math.cos(Math.toRadians(num1)));

       break;

       case "tan":

       System.out.println("tan(" + num1 + ") = " + Math.tan(Math.toRadians(num1)));

       break;

       case "log":

       System.out.println("log(" + num1 + ") = " + Math.log(num1));

       break;

       case "exp":

       System.out.println("exp(" + num1 + ") = " + Math.exp(num1));

       break;

       case "sqrt":

       if (num1 >= 0) {

       System.out.println("sqrt(" + num1 + ") = " + Math.sqrt(num1));

       } else {

       System.out.println("Error: Cannot calculate the square root of a negative number.");

       }

       break;

       default:

       System.out.println("Error: Invalid operation.");

       break;

       }

       }

       scanner.close();

       System.out.println("Goodbye!");

       }

       }

       这个科学计算器支持基本的四则运算(加、减、关系乘、除)以及一些科学运算(正弦、余弦、正切、GRTOOLBOX 源码对数、指数和平方根)。用户可以通过输入相应的操作和两个数字来执行计算。例如,输入“add 2 3”将计算2加3的结果。

       代码首先导入了`Scanner`类,dcm源码用于从用户处获取输入。然后,在`main`方法中,创建了一个`Scanner`对象,用于读取用户的输入。程序通过一个无限循环来持续接收用户的柒玖源码输入,直到用户输入“quit”为止。

       在循环中,程序首先提示用户输入一个操作,然后读取用户的输入并将其分割为多个部分。接着,程序将第二个和第三个部分转换为`double`类型的数字,并根据第一个部分(即操作)执行相应的计算。

       程序使用`switch`语句来根据用户输入的操作执行相应的计算。对于基本的四则运算,程序直接执行相应的计算并输出结果。对于科学运算,程序使用了Java的`Math`类中的相应方法。例如,对于正弦运算,程序使用了`Math.sin`方法,并将角度转换为弧度作为参数传递给它。

       如果用户输入了无效的操作或无效

用C语言写的计算器源代码

       #include<stdio.h>

       #include<iostream.h>

       #include<stdlib.h>

       #include<string.h>

       #include<ctype.h>

       typedef float DataType;

       typedef struct

       {

        DataType *data;

        int max;

        int top;

       }Stack;

       void SetStack(Stack *S,int n)

       {

        S->data=(DataType*)malloc(n*sizeof(DataType));

        if(S->data==NULL)

        {

        printf("overflow");

        exit(1);

        }

        S->max=n;

        S->top=-1;

       }

       void FreeStack(Stack *S)

       {

        free(S->data);

       }

       int StackEmpty(Stack *S)

       {

        if(S->top==-1)

        return(1);

        return(0);

       }

       DataType Peek(Stack *S)

       {

        if(S->top==S->max-1)

        {

        printf("Stack is empty!\n");

        exit(1);

        }

        return(S->data[S->top]);

       }

       void Push(Stack *S,DataType item)

       {

        if(S->top==S->max-1)

        {

        printf("Stack is full!\n");

        exit(1);

        }

        S->top++;

        S->data[S->top]=item;

       }

       DataType Pop(Stack *S)

       {

        if(S->top==-1)

        {

        printf("Pop an empty stack!\n");

        exit(1);

        }

        S->top--;

        return(S->data[S->top+1]);

       }

       typedef struct

       {

        char op;

        int inputprecedence;

        int stackprecedence;

       }DataType1;

       typedef struct

       {

        DataType1 *data;

        int max;

        int top;

       }Stack1;

       void SetStack1(Stack1 *S,int n)

       {

        S->data=(DataType1*)malloc(n*sizeof(DataType1));

        if(S->data==NULL)

        {

        printf("overflow");

        exit(1);

        }

        S->max=n;

        S->top=-1;

       }

       void FreeStack1(Stack1 *S)

       {

        free(S->data);

       }

       int StackEmpty1(Stack1 *S)

       {

        if(S->top==-1)

        return(1);

        return(0);

       }

       DataType1 Peek1(Stack1 *S)

       {

        if(S->top==S->max-1)

        {

        printf("Stack1 is empty!\n");

        exit(1);

        }

        return(S->data[S->top]);

       }

       void Push1(Stack1 *S,DataType1 item)

       {

        if(S->top==S->max-1)

        {

        printf("Stack is full!\n");

        exit(1);

        }

        S->top++;

        S->data[S->top]=item;

       }

       DataType1 Pop1(Stack1 *S)

       {

        if(S->top==-1)

        {

        printf("Pop an empty stack!\n");

        exit(1);

        }

        S->top--;

        return(S->data[S->top+1]);

       }

       DataType1 MathOptr(char ch)

       {

        DataType1 optr;

        optr.op=ch;

        switch(optr.op)

        {

        case'+':

        case'-':

        optr.inputprecedence=1;

        optr.stackprecedence=1;

        break;

        case'*':

        case'/':

        optr.inputprecedence=2;

        optr.stackprecedence=2;

        break;

        case'(':

        optr.inputprecedence=3;

        optr.stackprecedence=-1;

        break;

        case')':

        optr.inputprecedence=0;

        optr.stackprecedence=0;

        break;

        }

        return(optr);

       }

       void Evaluate(Stack *OpndStack,DataType1 optr)

       {

        DataType opnd1,opnd2;

        opnd1=Pop(OpndStack);

        opnd2=Pop(OpndStack);

        switch(optr.op)

        {

        case'+':

        Push(OpndStack,opnd2+opnd1);

        break;

        case'-':

        Push(OpndStack,opnd2-opnd1);

        break;

        case'*':

        Push(OpndStack,opnd2*opnd1);

        break;

        case'/':

        Push(OpndStack,opnd2/opnd1);

        break;

        }

       }

       int isoptr(char ch)

       {

        if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(')

        return(1);

        return(0);

       }

       void Infix(char *str)

       {

        int i,k,n=strlen(str);

        char ch,numstr[];

        DataType opnd;

        DataType1 optr;

        Stack OpndStack;

        Stack1 OptrStack;

        SetStack(&OpndStack,n);

        SetStack1(&OptrStack,n);

        k=0;

        ch=str[k];

        while(ch!='=')

        if(isdigit(ch)||ch=='.')

        {

        for(i=0;isdigit(ch)||ch=='.';i++)

        {

        numstr[i]=ch;

        k++;

        ch=str[k];

        }

        numstr[i]='\0';

        opnd= atof(numstr);

        Push(&OpndStack,opnd);

        }

        else

        if(isoptr(ch))

        {

        optr=MathOptr(ch);

        while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)

        Evaluate(&OpndStack,Pop1(&OptrStack));

        Push1(&OptrStack,optr);

        k++;

        ch=str[k];

        }

        else if(ch==')')

        {

        optr=MathOptr(ch);

        while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence)

        Evaluate(&OpndStack,Pop1(&OptrStack));

        Pop1(&OptrStack);

        k++;

        ch=str[k];

        }

        while(!StackEmpty1(&OptrStack))

        Evaluate(&OpndStack,Pop1(&OptrStack));

        opnd=Pop(&OpndStack);

        cout<<"你输入表达式的计算结果为"<<endl;

        printf("%-6.2f\n",opnd);

        FreeStack(&OpndStack);

        FreeStack1(&OptrStack);

       }

       void main()

       {

        cout<<"请输入你要计算的表达式,并以“=”号结束。"<<endl;

        char str[];

        gets(str);

        Infix(str);

       =================================================================

       哈哈!给分吧!