已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页,第五章 循环结构的实现,5.1 GOTO语句实现循环,GOTO语句的一般形式为:GOTO (语句标号) 在一个基本结构内部可以使用GOTO语句。 如果在逻辑IF语句中使用GOTO语句就可以实现有条件的循环,循环操作能够在一定条件下结束。,在程序中存在两类循环: 无条件的循环:无条件循环是无休止地执行一个程序段, 有条件的循环:有条件的循环是在满足一定条件时才执行循环。,GOTO语句实现无条件的循环:,第2页,FORTRAN程序中有条件的循环的3种循环类型: 1. DO型循环 (用循环语句实现) 2.当型循环 (用DO WHILE语句) 3.直到型循环(用IF语句),第3页,5.2 用DO语句实现循环(循环次数已知的循环),当需要执行的循环次数为已知时,用DO语句实现循环比较方便。它的一般形式为:,例如: DO 10 N=1,100,1 T=N/2.0 10 PRINT *,T,DO 标号, 循环变量初值式E1 ,终值式E2,增量式E3,第4页,循环变量的初值、终值和步长可以为正或负。初值、终值可以为零。但步长不应为0,否则循环变量的值永远不会超过终值,从而陷入死循环。,说明:,循环变量是整型的 例: D0 I1.5,3.6,1.2 循环次数不应该是 INT(3.6-1.51.2)/1.2)2, 而应当先将实型量转化为整型量,即变成相当的循环语句 DO I1,3,1 其循环次数为3次而不是2次。,例:对于D0 k-1,-3,-1 其 循环次数INT(31-1)(1)3次 k按序分别取值为:-1,-2,-3。,如果循环变量的类型和初值、终值和步长的类型不一致,则按赋值的规则处理,即需先将初值、终值和步长的类型转化成循环变量的类型,然后进行处理。,第5页,循环变量是实型的,例:D0 X0.0,50.0,0.1 理论循环次数INT(50.1/0.1)501 但实际上在许多计算机上它只执行500次循环。原因是实数在内存中的误差使得增量值不是准确的0.1,由于循环的误差积累,到执行完500次循环后X的值可能已超过50.0,因而停止执行循环。 改用整型循环变量时,则循环改写为: D0 I0,500; X=I/10。,例:D0 X1.5,3.6,1.2 它的循环次数应为 INT(3.6-1.51.2)/1.2)2次 X取值分别是1.5,2.7。,由于实型数在运算和存储时有一些误差,因而循环次数的理论值与实际值之间会有一些差别。所以应该避免使用实型的循环变量,用整型循环变量计算出的循环次数是绝对准确的。,第6页,DO循环的执行过程为:,(1)计算表达式E1,E2,E3的值,并将它们转换成循环变量的类型。,(2)循环变量的初值取E1的值。,(3)循环次数 r=INT(E2-E1+E3)/E3). 如: DO 10 I=2,20,2 r=(20-2+2)/2=10 r为0的情况: E1E2,E30 如:DO 10 K=10,5,2 E1E2,E30 如:DO 10 K=5,10,-2,(4)检查循环次数. (5)循环变量增值 (6)r-1=r (7)返回(4),第7页,例:,DO 20 I=1,5,2 N=I*I 20 PRINT *,I,N,经计算:r=(5-2+2)/2=3, 各有关变量的值在各次循环中变化的情况如下表:,终止循环的条件:循环变量的值超过终值。,第8页,继续语句(CONTINUE语句),它是一个可执行语句,但它不产生任何机器操作。一般把它用做循环的终端语句。,注意: 循环的终端语句不能是GOTO,块IF,ELSE IF,END IF ,STOP等语句。,它的形式为: CONTINUE,第9页,循环终端语句 循环终端语句为一般的执行语句。 F90规定:循环终端语句可以是除了GOTO、块IF、CASE、CYCLE、DO、ELSE、ELSE IF、END IF、END、END SELECT、EXIT、SELECT CASE、STOP和RETURN语句以外的任一可执行语句,如打印语句、赋值语句、输入语句、逻辑IF语句等都可以作为终端语句。 特殊的循环终端语句是: END DO(常用于无语句标号时) CONTINUE(常用于有语句标号时) 新编写的程序应该尽量使用以END DO结束的块DO构造。,第10页,例1. 一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第20次着地时,共经过了多少米?,90 H=100 S=0 DO I=1,20 S=S+H H=H/2.0 END DO WRITE(*,*)S=,S END,77 H=100 S=0 DO 10 I=1,20 S=S+H H=H/2.0 10 CONTINUE WRITE(*,*)S=,S END,第11页,有关DO循环的一些规定,1.循环变量在循环体内不能再被赋值. 例如,下面用法是错误的 :,DO K=10,100,2 K=K/2 WRITE(*,*)K END DO,第12页,2.循环变量的初值E1,终值E2和增量E3在执行循环体期间不能改变. 下面用法是错误的.,M2=100 DO I=1,M2 M2=50 END DO,3.循环的次数是根据循环变量的初值、终值和步长值计算出来的,在执行循环体期间是确定不变的,第13页,4.可以用转移语句从循环体内转到循环体外,也可以在循环体内转移,但不允许从循环体外转到循环体内.,例2 判某一数M是否为素数的程序可以写成:,READ(*,*)M DO K=2,M-1 IF(MOD(M,K).EQ.0) GOTO 40 END DO WRITE(*,*)M,IS A PRIME NUMBER STOP 40 WRITE(*,*)M,IS NOT A PRIME NUMBER END,(非正常出口) K=M-1,(正常出口) KM-1,5. 从“非正常出口”转出时, 循环变量保持“当前值”. 从“正常出口”脱离循环时, 循环变量保持它的最后的值,第14页,数值积分,求一个函数f(x)在a,b上的定积分,其几何意义是求曲边梯形面积。,近似求小曲边梯形面积常用方法: (1)矩形法 (2)梯形法 (3)辛普生法(用一条小抛物线代替f(x),求小曲边梯形面积),第15页,底的起点),第16页,源程序:,READ(*,*)N,A,B X=A H=(B-A)/N F0=X*X+X+1.0 S=0.0 DO I=1,N SI=F0*H S=S+SI X=X+H F0=X*X+X+1 END DO WRITE(*,*)N,A,B,S END,第17页,例 正直角柱体如图所示.已知5组a, b和h,要求分别求出对应的d.,DIMENSION A(5),B(5),H(5),D(5) DIAG(X,Y)=SQRT(X*X+Y*Y) DO 1 I=1,5 1 READ(*,*)A(I),B(I),C(I) DO 2 I=1,5 C=DIAG(A(I),B(I) 2 D(I)=DIAG(C,H(I) WRITE(*,100) 100 FORMAT(9X,A,8X,B,8X,H,8X,D) WRITE(*,110)(A(I),B(I),H(I),D(I),I=1,5) 110 FORMAT(5X,4F9.3) END,第18页,例: 利用公式 ex=1+x/1!+x2/2!+x3/3!+xn/n!+ 计算ex展开式的前20项的近似值。 分析:ex的展开式中第i项是第i-1项乘以x/i的积。 例如: t1 = t0 x/1 (t0=1) t2 = t1 x/2 t3 = t2 x/3 ti = ti-1 x/i 这种表示方式可用循环实现。设t代表每项值的变量,i是循环控制变量,则下面的语句中,for语句的每一次循环都产生ex展开式中前n项的t值(除开始一项以外): t=1.0 DO I=1,N t=t*x/i END DO,第19页,ex是展开式的各项之和,这种有规律的求和正好可以用循环来实现。 假设ex代表两项之和的变量,将前面for循环中求出的每一项t累加起来,可表示为: ex=1.0 t=1.0 DO I=1,N t=t*x/i ex=ex+t END DO,第20页,例:,计算多项式y=0.6+3.5x+5.0x2+0.3x3+5.1x4 +2.1x5+x6在x=1.3时的值,REAL A(6),F DATA A/ 0.6,3.5, 5.0,0.3,5.1,2.1,1.0/ DATA N,X/6,1.3/ TOLY=A(1) F=1.0 DO 10 K=2, N F=F*X 10 TOLY=TOLY+A(K)*F END,第21页,循环嵌套的概念和执行过程 一个循环体内又包含另一个完整的循环,称为循环的嵌套,例1 一个学校有40个班,每班30人. 要求将全校每个学生的分数累加,并求全校总平均成绩和每班的平均成绩.,第22页,DO J=1,30 READ(*,*)G TOTAL2=TOTAL2+G END DO AVER2=TOTAL2/30 WRITE(*,*)I,AVER2 TOTAL1=TOTAL1+TOTAL2,TOTAL2=0,TOTAL1=0,AVER1=TOTAL1/(40*30) WRITE(*,*)ALL:,AVER1 END,DO I=1, 40,END DO,第23页,例: 打印九九表的程序,说明: 1. 外循环执行9次,内循环执行了9*9=81次 2. 外循环变量(I)比内循环变量(K)变化慢,1*1=1 1*2=2 。1*9=9 2*1=2 2*2=4 。2*9=18 。 。 。 9*1=9 9*2=18 。9*9=81,DO I=1,9 END DO,DO K=1,9 L=I*K END DO,END,100 FORMAT(9(1X,I2,*,I2,=,I2),PRINT 100,I,K,L,第24页,二重循环的执行过程:,3.遇内循环的DO语句,计算出内循环应执行次数r2, 使内循环变量取初值.,2.如果r10,执行外循环体(顺序执行外循环体中的执行语句).如果r1=0,则结束循环的执行.,1.先计算出外循环的循环体应执行的次数r1,外循环变量取初值.,4.如果r20,执行内循环体各语句,直到内循环的终端语句.如此共执行内循环体r2次, 然后从正常出口脱离内循环.此时, r2=0.,5.接着执行外循环体中其它执行语句,直到外循环的终端语句.,6. 外循环变量增值, r1-1=r1. 返回2.,应注意:(1) 循环次数.(2)内外循环变量值的变化.,第25页,有关循环嵌套的规定,1. 各种循环都可以互相嵌套.例如两个DO循环可以嵌套成为双重循环, 一个当型循环和一个DO循环也可以嵌套. 无论哪种循环的嵌套,内循环都必须完整地出现在外循环体内.,I=1 5 IF (I.LE.N) THEN DO J=1,I PRINT *,J END DO PRINT * I=I+1 GOTO 5 ENDIF,DO 10 I=1,N DO 20 J=1,M PRINT *,I,J 10 CONTINUE 20 CONTINUE,如:,第26页,2. 并列的循环可以用一个变量名作循环变量,而嵌套的循环不能用同一变量名作循环变量。,DO k=1,5 DO k=1,10 END DO END DO,DO I=1,5 END DO DO I=1,10 END DO,3. 嵌套的DO循环可以共用一个终端语句.,如:,4. 可以从内循环体转到外循环体或外循环之外,反之不行,5.除了循环的嵌套以外, DO循环和块IF连用时应注意:如果在IF块等中包含DO循环,则该循环必须完整地包含在上述一个块中.如果DO循环中包含一个块IF语句,也应完全包含.,第27页,*循环嵌套中循环控制变量的选择,例: 求下式之和 ISUM=0 DO I=1,20 DO J=1,3 ISUM=ISUM+(I+1)*2*(J+2) END DO PRINT *,ISUM END DO END,问题:I与J那个做外循环好,DO J=1,3 K=J+2 DO I=1,20 ISUM=ISUM+K*(I+1)*(I+1) END DO END DO,1. I赋初值1次,判断循环是否终了20次,为J赋初值20*1次,判断是否终了为20*3次,总共101次.,若I,J位置互换:,2.J赋初值1次,判断终了3次,给内层I赋初值3*1次,判断终了3*20次,总共67次,3.j+2共计算20*3=60次,若将其搬到内循环外,就减少了57次,第28页,多重循环遵守的原则: 1. 变化范围大的循环变量要放在内层循环 2. 尽量减少内循环中的运算,凡与循环无关的运算均移到 循环体外,第29页,例:求方程I3+J3+K3=3的全部解 其中I为-5,11,J为-10,9,K为-6,18,程序举例,N=0 DO I=-5,11 ICUB=I*3 END DO END,DO K=-6,18 IF (ICUB+JCUB+KCUB.EQ.3) THEN N=N+1 PRINT *,N,I,J,K ENDIF END DO,KCUB=K*3,DO J=-10,9 JCUB=J*3 END DO,第30页,补充:百鸡问题。公鸡每只5元, 母鸡3元, 小鸡一元3只.100元买100只鸡.,INTEGER X,Y,Z DO X=1,20 DO Y=1,33 DO Z=1,99,3 IF (X+Y+Z.EQ.100) THEN IF (5*X+3*Y+Z/3.EQ.100) THEN PRINT *, X, Y, Z ENDIF ENDIF END DO END DO END DO END,第31页,INTEGER X,Y,Z DO X=1,20 DO Y=1,33 z=100-x-y IF (5*X+3*Y+Z/3.EQ.100) THEN PRINT *, X, Y, Z ENDIF END DO END DO END,优化后:,第32页,例2 求100到200之间的全部素数。,LOGICAL L DO M=101,200,2 10 IF (K.LE.SQRT(M).AND.L) THEN IF (MOD(M,K).EQ.0) L=.FALSE. K=K+1 GOTO 10 ENDIF IF(L) WRITE(*,*)M,IS A PRIME NUMBER END DO END,L=.TRUE. K=2,第33页,5.3当型循环的实现(循环次数未知) 一般形式:,DO 标号, WHILE 逻辑表达式,当逻辑表达式 的值为“真”时,反复执行循环体。 当逻辑表达式 的值为“假”时,结束循环。,第34页,【例】利用辗转相除法,求两个正整数的最大公约数,求M和N的最大公约数算法: 若N=0,则M为最大公约数 若N!=0 将M 除以N,余数为R M=N;N=R 转,即欧几里德算法:gcd(i,j)=gcd(j,i %j)。,例:求42和24的最大公约数 gcd(42,24)=gcd(24,42%24)=gcd(24,18)=gcd(18,6)=gcd(6,0) 42和24的最大公约数是6。,第35页,INTEGER M,N,R READ *, M,N DO 10 WHILE(N.NE.0) R=MOD(M,N) M=N N=R 10 CONTINUE PRINT * , THE GREATEST COMMON DIVISOR IS,M END,例: M N R 12 18 12 18 12 6 12 6 0 6 0 (退出循环),第36页,F90的DO WHILE语句 在F90增强的功能中,增加了DO WHILE语句以支持当型循环。因此,DO构造不仅仅能完成循环次数已知的循环,而且能够完成此数未知的循环。,例: do while (input.ne.n).and.(input.ne.y) write(*,(a) Enter y or n:;read(*,(a) input end do,它的一般形式为: 构造名 DO WHILE (逻辑表达式) DO WHILE语句的规则和块IF语句所需满足的的块规则类似。,第37页,例:对一个大于或等于3的正整数,判断它是不是一个素数。,read *, n j=int(sqrt(n*1.); i=2 do while ( ) i=i+1 end do if(ij) then print *, 不是素数,可被,i,整除 else print *, 是素数 end if end,一、,(mod(n,i)/=0) .and. (i=j),第38页,read *, n j=int(sqrt(n*1.); i=2; k=0 do_while: do while (i=j) i=i+1 end do do_while if(k/=0) then print *, 不是素数,可被,k,整除 else print *, 是素数 end if end,二、,if(mod(n,i)=0) then k=i exit do_while end if,第39页,例:求正弦函数的近似值。,!正弦函数用泰勒级数展开:sinx=x-x3/3!+x5/5!-x7/7!+.。 计算有限精度范围内的值。 real , parameter: pi=3.141592, err=1.e-6 integer, parameter: max_terms=10 read *, x; x=x*pi/180 k=1; term=x; sin_=term do while(abs(term)err) .and. (k=max_terms) term=-term*x*x/(2*k*(2*k+1) k=k+1 sin_=sin_+term; print *,k,sin_ end do print *,sin(x) end,第40页,F77“当型”循环,S1 IF(逻辑表达式) THEN 块1 GOTO S1 END IF,其中S1是语句标号。如果没有GOTO S1,就是一个选择结构。,可以用块IF和GOTO语句来实现当型循环。它的一般形式如下:,第41页,READ(*,*)N T=0.0 I=1 10 IF (I.LE.N) THEN A=1.0/I T=T+A I=I+1 GOTO 10 END IF WRITE(*,*)T=,T END,运行记录如下: 20 T= 3.597740,第42页,第43页,READ(*,*)N Y=1.0 I=1 10 IF (I.LE.N) THEN AI=4.0*I*I/(4.0*I*I-1.0) Y=Y*AI I=I+1 GOTO 10 ENDIF WRITE(*,*)N=,N, Y=,Y END,第44页,例3读入一批整数,分别累加奇数和偶数之和。,INTEGER ODD,EVEN,N 10 READ(*,*)N IF(N.NE.0)THEN IF (MOD(N,2).EQ.0) THEN EVEN=EVEN+N ELSE ODD=ODD+N END IF GOTO 10 END IF 100 WRITE(*,*)ODD=,ODD, EVEN=,EVEN END,0,第45页,5.4 直到型循环的实现(循环次数未知) 一般形式:,标号S 循环体 IF( 逻辑表达式) GOTO S,当逻辑表达式 的值为“真”时,反复执行循环体。 当逻辑表达式 的值为“假”时,结束循环。 在compaq visual fortran 中不能使用UNTIL语句,第46页,例如:直到N大于20就不再执行循环 不应该写出: IF(N.GT.20) GOTO 10 而应该写成: IF(N.LE.20) GOTO 10 或: IF(.NOT.(N.GT.20) GOTO 10,第47页,(1)迭代法 (2)弦截法求方程 (3)二分法,解一元方程,近似求一元方程f(x)的根方法,第48页,一、迭代法:,(2)大致估计出一个根x的范围, 给x一个初值x0, 把它代入上式等号的右边,求出x的第一次近似值 x1,(1)将f(x) 改写成求 x的式子:x=g(x)形式.,(3)再将 x1代入g(x)得x2. 这样一次一次地将求出的新值又作为下一次的初值代入g(x). 即迭代: x0=g(x0)=x1=g(x1)=x2=g(x2)=.g(x4)=x5. 直到前后两次求出的x值很接近, 即,这时 就是所求的近似值,用迭代法求一元方程f(x)的根,其基本方法如下:,第49页,read(*,*) x,m do 20 i=1,m,1 x1=(-x*3-2.0*x*x-1.0)/2.0 write(*,100)i,x1 if (abs(x-x1).ge.1e-6) then x=x1 else stop end if continue print *,comput hast converged 100 format(1x,sqrt(,i2,)=,f12.5) end,例 用迭代法求方程f(x)=x3 +2x2 +2x+1=0的一个解,直到满足:,改写为:x=g(x)形式 X=(- x3 -2x2 -1) / 2,第50页,牛顿迭代公式为:,在几何意义上:,所以,二、牛顿迭代法,第51页,已知:,求出:,READ(*,*)X N=1 10 X1=X F=X1*3-6*X1-1 F1=3*X1*X1-6 X=X1-F/F1 WRITE(*,100)N,X1,X N=N+1 IF (ABS(X-X1).GT.1E-6) GOTO 10 100 FORMAT(1X,N=,I3,5X,X1=,F13.8,5X,X=,F13.8) END,例 用牛顿迭代法求方程f(x)=x3 -6x-1=0在2.5附 近的一个实根,直到满足:,第52页,三、弦截法 弦截法的算法思想如下: ,(1) 先取两个不同的点x1和x2,需使f(x1)和f(x2)的符号相反,否则,重新取x1和x2。但x1与x2相差不宜太大,以免在(x1,x2)区间出现多根。 (2)连接f(x1)与f(x2)得一弦线交x轴于x,可求得x点的坐标为:x=x1*(f(x2)-x2*f(x1)/(f(x2)-f(x1)将x代入方程可求出f(x)。 (3)判别f(x)与f(x1),若符号相同,则根在(x,x2)区间内,可将x作为新的x1;若符号相异,则根在(x1,x)区间内,可将x作为新的x2。 (4)重复上述(2)、(3)步骤,直到|f(x)|为止。这里为一个很小的数,若设=0.000001,则可以认为|f(x)|0,x为该方程的近似根。,第53页,第54页,10 read *,x1,x2 y1=(x1-2.0)*x1+8.0)*x1-16.0 y2=(x2-2.0)*x2+8.0)*x2-16.0 if (y1*y2=0) goto 10 20 x=x1*(f2-x2*f1)/(f2-f1) y=(x-2.0)*x+8.0)*x-16.0 if(y*y10)then y1=y x1=x else x2=x y2=y end if if (abs(y).gt.1E-6) goto 20 Print*,The root of equation is:,x end,例:用弦截法求方程 x3 -2x2 +8x-16=0 的近似根。,第55页,5.5无循环变量的DO构造 一般形式: 构造名: DO 块 END DO 注意:对于不带控制变量的DO构造,DO块中必须有EXIT语句,使它停止循环,否则循环将无休无止地一直进行下去,形成死循环。,第56页,DO构造也可在自身中再嵌DO构造,例如: FIRST: DO 块1的第一部分 SECOND: DO 块2 END DO SECOND 块1的第二部分 END DO FIRST,第57页,EXIT语句 EXIT语句的作用是停止循环,使控制退出循环结构,因此又称出口语句。 它的一般形式是:EXIT DO构造名 执行EXIT语句,其功能是导致循环终止。 注意:1 如果语句引用了DO构造名,则它属于该构造,否则属于它所出现的最内层DO构造。 2对于多层嵌套的DO构造,尤为需要指明是从哪一个构造名的DO构造中退出。如当EXIT指明从第三层结构退出,则第三层与第三层内各层嵌套的DO构造都将被停止执行。 3通常将EXIT语句与IF语句结合使用,即在DO构造内使用:IF(逻辑表达式) EXIT。当逻辑表达式为真时,EXIT语句被执行,循环终止,否则循环将继续进行。,第58页,例如: implicit none integer i,j real y, term y=0 xx: do j=1,1000 ww: do i=1,1000 term=1./(i*(i+1) y=y+term if(abs(term)=1.e-5)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GB-T 38351-2019胶鞋、运动鞋制造过程中固体废弃物回收处理规范》专题研究报告
- 2025年大学四年级古籍数字化专业《古籍数字修复》期末考试测验卷及答案
- 2024年执业药师(西药)《药理学》章节测试(第四章)及答案
- 装潢美术设计师安全培训效果强化考核试卷含答案
- 混铁炉工操作能力模拟考核试卷含答案
- 《GBT 13952-2016 移动式平台及海上设施用电工电子产品环境条件参数分级》专题研究报告
- 船舶过闸及升船机调度员班组考核测试考核试卷含答案
- 柠檬酸制造工安全应急模拟考核试卷含答案
- 实木及实木复合地板备料工安全管理评优考核试卷含答案
- 公司化学铣切工设备技术规程
- 2026年国家电网招聘之通信类考试题库300道【a卷】
- 2025全国医疗应急能力培训系列课程参考答案
- 第10课 公共场所言行文明 第2课时(课件)2025-2026学年道德与法治三年级上册统编版
- 建筑垃圾处理技术标准(CJJT 134-2019)
- GB/T 15340-2025天然、合成生胶取样及其制样方法
- 新教科版小学1-6年级科学需做实验目录
- GB/T 8492-2024一般用途耐热钢及合金铸件
- 如何破解幼儿园流“师”之困——六省市教师离职倾向的调查与审思
- 课程与教学论第八讲-第十一章-教学模式
- 汽车前后防撞梁设计地的要求的要求规范
- 烟草行业多元化经营管理评价指标及评分细则
评论
0/150
提交评论