PROGRAM MAIN
DOUBLE PRECISIONA,AA,XX,XX1,XX2,TYY0,TYX0,YY0,YX0
DIMENSION A(101),AA(101) OPEN(10,FILE='OUTPUT.TXT',STATUS='UNKNOWN')
WRITE(*,*)'此程序用于求解一元N次方程最接近给定的X0的一个解。'
WRITE(*,*)'请输入N(≤100,0=EXIT):'
2 READ(*,*)N
IF(N.EQ.0) THEN
GOTO 10000
END IF
IF((N.Lt.0).OR.(N.GT.100)) THEN
WRITE(*,*)'请重新输入N(≤100,0=EXIT):'
GOTO 2
ENDIF
WRITE(*,*)'请依次输入各项系数AN~A0(高次幂~低次幂)。'
WRITE(*,*)'每个数据后回车:'
DO 5 I=1,N+1
READ(*,*) A(I)
5 CONTINUE
IF(MOD(N,2).EQ.0) THEN
WRITE(*,*)' '
WRITE(*,*)'对N为偶数的情况,请仔细校核。'
WRITE(*,*)' '
END IF
WRITE(*,*)'请输入X0:'
READ(*,*) X0
DO 10 I=1,N
AA(I)=(N-I+1)*A(I)
10 CONTINUE
ICOUNT=0
XX=X0
DO 30 I=1,1000000
ICOUNT=ICOUNT+1
YY0=0.
YX0=0.
DO 40 J=1,N
TYY0=A(J)*(XX**(N-J+1))
YY0=YY0+TYY0
40 CONTINUE
YY0=YY0+A(N+1)
DO 50 K=1,N-1
TYX0=AA(K)*(XX**(N-K))
YX0=YX0+TYX0
50 CONTINUE
YX0=YX0+AA(N)
IF(YX0.EQ.0) THEN
XX=XX+1
ICOUNT=ICOUNT-1
GOTO 30
END IF
IF(MOD(I,2).EQ.1)THEN
XX1=XX-YY0/YX0
XX=XX1
ELSE
XX2=XX-YY0/YX0
XX=XX2
END IF
XX=.5*((XX1+XX2)-(-1)**I*(XX1-XX2))
IF(ICOUNT.GE.1000) THEN
WRITE(*,*)' '
WRITE(*,*)'此方程无实数解。'
GOTO 10000
END IF
IF((ABS(XX2-XX1).LE.1.D-15).AND.(ICOUNT.GT.1)) THEN
IF((ABS(XX).GT.1.D-6).AND.(ABS(XX).LT.9.D6)) THEN
GOTO 1000
ELSE
GOTO 1001
END IF
END IF
30 CONTINUE
1000 WRITE(*,100)XX
GOTO 1010
1001 WRITE(*,101)XX
100 FORMAT(8X,'X=',F25.6)
101 FORMAT(8X,'X=',D25.6)
1010 WRITE(*,*)' '
WRITE(*,*)'本程序计算结果仅供参考。'
WRITE(*,*)' '
PAUSE
10000 STOP
END