下面是一个Applet程序,其功能是输入3个双精度浮点数:a,b,c,构成一个一元二次方程,a*x*x+b*x+c=0,其判别式 d=b*b-4*a*c,若d为负数则输出“没有实根”,否则打印出2个实根。要求,有3个输入框,输入a,b,c,一个按钮,点击实

admin2009-01-15  30

问题 下面是一个Applet程序,其功能是输入3个双精度浮点数:a,b,c,构成一个一元二次方程,a*x*x+b*x+c=0,其判别式 d=b*b-4*a*c,若d为负数则输出“没有实根”,否则打印出2个实根。要求,有3个输入框,输入a,b,c,一个按钮,点击实现求根过程,一个不可编辑的文本区,用作输出结果。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
   注意:不改动程序的结构,不得增行或删行。
   程序运行结果如下:
   
   import java.io.*;
   import java.awt.*;
   import java.awt.event.*;
   import.java.applet.Applet;
   /*
   <applet code="ex21_3.class" width=800 height=400>
   </applet>
   */
   public class ex21_3 extends Applet implements ActionListener{
     Panel pane=new Panel();
     Label 11 = new Label("a:");
     TextField tf1 = new TextField(5);
     Label 12 = new Label("b:");
     TextField tf2 = new TextField(5);
     Label 13 = new Label("c:");
     TextField tf3 = new TextField(5);
     Button btn = new Button("OK");
     Label 14=new Label("答案:");
     TextField tf4=new TextField(20);
     ex21_3 obj21_3;
     public void init(){
        pane.setLayout(new FlowLayout(FlowLayout.LEFT, 10,5));
        pane.add(11);
        pane.add(tf1);
        pane.add(12);
        pane.add(tf2);
        add("North",pane);
        Panel p2=new Panel();
        p2.setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
        p2.add(13);
        p2.add(tf3);
        p2.add(btn);
        btn.addActionListener(this);
        add("Center",p2);
        Panel p3=new Panel();
        p3.setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
        p3.add(14);
        tf4.setEditable(false);
        p3.add(tf4);
        add("South",p3);
        obj21_3=new ex21_3();
     }   
     public void doReal(double a1,double a2,double a3,TextField tf)  {
        double d,x1,x2;
        d=a1*a1-4.0*a2*a3;
        if(d>=0.0){
            x1=(-a2+Math.sqrt(d))/(2.0*a1);
            x2=(-a2+Math.sqrt(d))/(2.0*a1);
            tf.setText("2个实根: x1="+x1+"\nx2="+x2);
        }   
        else{
            tf.setText("没有实根! ");
        }
    }
    public void actionPerformed(ActionEvent ae)  {
        double a,b,c;
        try{
            a=new Double(tf1.getText()).doubleValue();
            b=new Double(tf2.getText()).doubleValue();
            c=new Double(tf3.getText()).doubleValue();
            obj21_3.doReal(a,b,c,14);
        }catch(NumberFormatException nfe){
            tf4.setText("wrong number!");
        }
    }
   }
   ex21_3 . htm1
   <HTML>
   <HEAD>
     <TITLE>ex21_3</TITLE>
   </HEAD>
   <BODY>
   <applet code="ex21_3.class" width=800 height=400 >
   </applet>
   </BODY>
  </HTML>

选项

答案d=a2*a2-4.0*a1*a3 x2=(-a2-Math.sqrt(d))/(2.0*a1) obj21_3.doReal(a,b,c,tf4)

解析 本题主要考查Applet窗口编程和AWT基本构件的使用和事件处理机制以及一元二次方程组的求根公式。解题关键是熟悉基本组件Button,Panel,Label等的用法和事件处理机制,熟悉一元二次方程组的求解,会使用Math类中给出的常用方法进行简单的数学计算。本题中,第1处,求判别式,注意判别式的公式是d=b*b-4*a*c,弄清楚doReal()方法中的参数对应的关系;第2处,求根公式的表示,应该-a2-Math.sqrt(d),否则,两个根一样;第3处,对象obj21_3调用doReal()方法时,
   注意,最后1个参数是TextField类的对象,而不是Label类的对象。
转载请注明原文地址:https://kaotiyun.com/show/PUnp777K
0

最新回复(0)