下面是一个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  59

问题 下面是一个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="ex3_1. class" width=800 height=400>
   </applet>
   */
   public class ex3_1 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);
     ex3_1 obj3_1
     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)
         obj3_1 = new ex3_1 ( )
     }
     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);
             tr. setText("2个实根:x1="+x1+"\nx2="+x2);
         }
         else {
             tr. 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( );
           obj3_1, doReal(a,b,c, 14);
       } catch(NumberFormatException nfe) {
           tf4. setText( "wrong number!")
       }
     }
   }
   ex3_l. html
    <HTML>
     <HEAD>
       <TITLE> ex3_l </TITLE>
     </HEAD>
     <BODY>
     <applet code="ex3_l, class" width=800 height=400>
     </applet>
     </BODY>
   </HTML>

选项

答案d=a2*a2-4.0*a1*a3 x2=(-a2-Math.sqrt(d))/(2.0*a1) obj3_1.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处,对象。obj3_1调用doReal()方法时,注意,最后1个参数是TextField类的对象,而不是Label类的对象。
转载请注明原文地址:https://kaotiyun.com/show/91np777K
0

最新回复(0)