当前位置:文档之家› Fortran 上机题汇总

Fortran 上机题汇总

Fortran 复习题汇总program exer101_1implicit nonerealpi,r,t,sC 说明符号常量parameter(pi=3.1415926)C 打开用于保存结果的文件open(9,file='mydata.dat')write(*,*)"请输入r和t的值:"read*,r,ts=t/360.0*pi*r**2C 在屏幕上显示结果print*,'r=',r,'t=',t,'s=',sC 采用格式说明语句显示结果write(*,100)'r=',r,'t=',t,'s=',s100 format(1X,3(A2,F10.5,1X))C 将结果保存至文件中write(9,*)'r=',r,'t=',t,'s=',sendprogram exer101_2implicit nonerealpi.r,t,sparameter(pi=3.1415926) !说明符号常量open(9,file='mydata.dat') !打开用于保存结果的文件write(*,*)"请输入r和t的值:"read*,r,ts=t/360.0*pi*r**2print*,'r=',r,'t=',t,'s=',s !在屏幕上显示结果write(*,100)'r=',r,'t=',t,'s=',s !采用格式说明语句显示结果100 format(1X,3(A2,F10.5,1X))write(9,*)'r=',r,'t=',t,'s=',s !将结果保存至文件中end12program ex202 implicit none real F,Cprint*,"请输入一个华氏温度:"read*,FC=(F-32)*5/9print*,"摄氏温度为:",Cendprogram ex203implicit nonereala,b,x,yprint*,"请依次输入a,b,x的值" read*,a,b,xy=(exp(a*x)+log(x)**2)/(5.0*b) print*,yend program ex204implicit nonereal v0,t,g,sparameter(g=9.81)print*,"请输入v0,t的值" read*,v0,ts=0.5*g*t**2+t*(v0)print*,sendprogram ex301implicit nonereal I1,I2,I3,sprint*,"请输入三个整数" read*,I1,I2,I3s=I1+I2+I3print*,"三个整数之和为:",s print*,"第一种排列次序:",I1,I2,I33print*,"第二种排列次序:",I1,I3,I2 print*,"第三种排列次序:",I2,I1,I3 print*,"第四种排列次序:",I2,I3,I1 print*,"第五种排列次序:",I3,I1,I2 print*,"第六种排列次序:",I3,I2,I1 end!计算三数之和,求三数排列次序program ex301_2!说明部分开始implicit noneinteger(1)::I,J,Kinteger Sprint*,'请输入三个整数:'read*,I,J,KS=I+J+Kprint*,'I1+I2+I3=',Sprint*,'三个整数所有可能排列次序有:' print*,I,J,Kprint*,I,K,Jprint*,J,I,Kprint*,J,K,Iprint*,K,I,Jprint*,K,J,Iend programprogram ex302implicit nonecomplex::c1=(3.5,4.8),c2=(7.5,-3.2) complexa,b,c,da=c1+c2b=c1-c2c=c1*c2d=c1/c2print*,"两数之和为:",aprint*,"两数之差为:",bprint*,"两数之积为:",cprint*,"两数之商为:",dend4program ex401_1implicit nonereal A1,A2,B1,B2,C1,C2,X,Y,T A1=2.0A2=-6.0B1=1.0B2=-1.0C1=4.0C2=4.00T=A1*B2-A2*B1X=(B2*C1-B1*C2)Y=(A1*C2-A2*C1)WRITE(*,*)'X=',X,'Y=',YEND program ex0402implicit nonereal A1,A2,B1,B2,C1,C2,X,Y,Twrite(*,*)'请输入A1,A2,,B1,B2,C1,C2的值:' read*,A1,A2,B1,B2,C1,C2T=A1*B2-A2*B1X=(B2*C1-B1*C2)Y=(A1*C2-A2*C1)WRITE(*,*)'X=',X,'Y=',YENDPROGRAM ex402IMPLICIT NONEREAL AINTEGER IREAL RWRITE(*,*)'ENTER REAL A(A>0):'5READ(*,*)AI=int(A)R=A-IWRITE(*,*)'I=',I,'R=',RENDPROGRAM ex403IMPLICIT NONEREAL a1,a2,a3,a4,a5,a6,maxnumberwrite(*,*)'请输入6个实数:'READ(*,*)a1,a2,a3,a4,a5,a6a1=abs(a1);a2=abs(a2);a3=abs(a3);a4=abs(a4);a5=abs(a5);a6=a bs(a6)maxnumber=max(a1,a2,a3,a4,a5,a6)WRITE(*,*)'绝对值最大的数为=',maxnumberENDPROGRAM ex404IMPLICIT NONEinteger n,n1,n2,n3,sumwrite(*,*)'请输入1个三位整数:'READ(*,*)n n1=n/100n2=(n-n1*100)/10n3=n-n1*100-n2*10sum=n1+n2+n3WRITE(*,*)'各位数字之和为=',sum ENDprogram ex501implicit nonereal a,b,c,x1,x2,d,e,fprint*,"请输入任意实数:"read*,a,b,cd=b**2-4.0*a*cif(a==0.and.b==0.and.c==0)then print*,"此一元二次方程有无穷多的根"6endifif(a==0.and.b==0.and.c/=0)thenprint*,"此一元二次方程无解"endifif(a==0.and.b/=0)thenx1=-c/bprint*,"此一元二次方程的解为:",x1endifif(a/=0.and.d>0)thenx1=(-b+sqrt(d))/2*ax2=(-b-sqrt(d))/2*aprint*,"此一元二次方程有两个不同的实根:",x1,x2 endifif(a/=0.and.d==0)thenx1=(-b+sqrt(d))/2*ax2=(-b-sqrt(d))/2*aprint*,"此一元二次方程有两个相同的的实根:",x1,x2 endifif(a/=0.and.d<0)thene=sqrt(4*a*c-b**2)f=(-b)/2*aprint*,"此一元二次方程实根为:" print*,"x1=",f,"+",e,"i"print*,"x2=",f,"-",e,"i"endifendprogram ex502implicit nonereala,b,c,d,tprint*,"请输入任意四个实数:" read*,a,b,c,dif(a>b)then7t=aa=bb=t endifif(a>c)thent=aa=cc=t endifif(a>d)thent=aa=dd=t endifif(b>c)thent=bb=cc=t endifif(b>d)thent=bb=dd=t endifif(c>d)thent=cc=dd=tendifprint*,"四个数由小到大顺序为:",a,b,c,dendprogram ex502_1 !升序排列四个数,并打印输出integera,b,c,d,tempprint*,'请输入任意四个整数:'read*,a,b,c,dif(b<a)thentemp=a;a=b;b=tempendifif(c<b)thentemp=c;c=b;b=tempif(b<a)thentemp=a;a=b;b=tempendifendifif(d<c)thentemp=d;d=c;c=tempif(c<b)thentemp=c;c=b;b=tempif(b<a)thentemp=a;a=b;b=temp8endifendifendifprint*,a,b,c,dendprogram ex502_2implicit noneintegern,i,jreal treal,allocatable::a(:)write(*,*)"How many numbers"!提示输入数的个数read*,n !请输入数的个数n print*,'请输入n个数' !请输入n个数allocate(a(n))read*,ado j=1,n-1doi=1,n-jif(a(i)>a(i+1)) thent=a(i)a(i)=a(i+1)a(i+1)=tendifenddoenddoprint*,adeallocate(a)endprogram ex503implicit nonereala,b,c,d,e,sumprint*,"请输入该学生的五门课成绩:"read*,a,b,c,d,esum=a+b+c+d+eif(sum>450)thenprint*,"该学生获得学习优良奖"elseif(a>88.and.b>88.and.c>88.and.d>88.and.e>88)then print*,"该学生获得学习优良奖"elseif(a>95.and.b>95.and.c>95.and.d>80.and.e>80)then print*,"该学生获得学习优良奖"elseprint*,"该学生不能获得学习优良奖"endif9endprogram ex504implicit nonerealx,yprint*,"请输入x的值:"read*,xif(x>=1.and.x<2)theny=sqrt(4.3)+log(x)print*,"所对应的y的值为:",y elseif(x>=2.and.x<3)theny=x**2+exp(x)print*,"所对应的y的值为:",y elseif(x>=3.5.and.x<5)then y=log10(x)print*,"所对应的y的值为:",y elsey=1+x+x**2print*,"所对应的y的值为:",yendifendprogram ex601implicit nonerealx,s,f,pi,yinteger:: i=1parameter(pi=3.1415926)print*,"请输入x的值:"10read*,xx=(x*pi)/180s=xf=xy=sin(x)do while(abs(f)>1.0e-7)i=i+1f=(-x*x*f)/((2*i-2)*(2*i-1))s=x+fenddoprint 10,x,s,y10 format(f4.2,2x,f4.2,2x,f4.2)EndPROGRAM ex601_1IMPLICIT NONEREAL pi,epsPARAMETER(pi=3.1415926,eps=1E-7) INTEGER:: n=1REAL x,T,sinxWRITE(*,*),'输入一个度数值: 'READ*,xx=x*pi/180 !转换为弧度值T=x;sinx=TDO WHILE(ABS(T)>eps)n=n+1T=-T*x*x/((2*n-2)*(2*n-1))sinx=sinx+TEND DOPRINT*,'程序计算得到的正弦值',sinxPRINT*,'FORTRAN 90内部函数值',SIN(x)ENDPROGRAM ex601_2IMPLICIT NONEREAL pi,epsPARAMETER(pi=3.1415926,eps=1E-7)INTEGER:: n=1,maxterms=1000REAL x,T,sinxWRITE(*,*),'输入一个度数值: 'READ*,xx=x*pi/180 !转换为弧度值T=x;sinx=TDO WHILE(ABS(T)>eps.AND.(n<=maxterms)) n=n+1T=-T*x*x/((2*n-2)*(2*n-1))sinx=sinx+TEND DOIF(ABS(T)>eps)THEN11PRINT*,'发散级数,不能得到结果.' ELSEPRINT*,'程序计算得到的正弦值',sinx PRINT*,'FORTRAN 90内部函数值',SIN(x) END IFENDPROGRAM ex601_3IMPLICIT NONEREAL pi,epsPARAMETER(pi=3.1415926,eps=1E-7) INTEGER:: n=1,mREAL x,T,sinxWRITE(*,*),'输入一个度数值: 'READ*,xm=int(x/360.0)x=x-m*360x=x*pi/180 !转换为弧度值T=x;sinx=TDO WHILE(ABS(T)>eps)n=n+1T=-T*x*x/((2*n-2)*(2*n-1))sinx=sinx+TEND DOPRINT*,'程序计算得到的正弦值',sinx PRINT*,'FORTRAN 90内部函数值',SIN(x)ENDprogram ex602implicit noneintegeri,n,Arealf,sumprint*,"请输入A的值:"read*,Asum=0n=1do while(sum<A)sum=sum+n**2n=n+1enddof=0if(sum==A)then12print*,"此时n的值为:",n doi=1,nf=f+(1.0/i)*(-1)**(i+1) end doprint*,"此程序计算结果为:",f elseprint*,"此时n的值为:",n-1 doi=1,n-1f=f+(1.0/i)*(-1)**(i+1) end doprint*,"此程序计算结果为:",f endifend program ex701implicit noneinteger a(10),b,n,p,ia=(/10,55,25,70,45,15,25,85,45,35/) print*,"原始数据为:"print 10,aprint*,"输入一个待删除整数:"read*,bn=10p=1do while(p<=n)do p=1,nif(a(p)==b) exitend doif(p<=n) thendoi=p,n-1a(i)=a(i+1)end don=n-1end ifend doif(n==10) thenprint*,"没有发现要删除的数据!"13elseprint*,"待删除整数删除后的数据为:"print 10,a(1:n)end if10 format(1x,10i4)Endprogram ex702implicit noneinteger,allocatable::a(:,:),b(:)integersum,max,m,n,p,t,i,jprint*,"请输入m*n矩阵阶数m,n:"read*,m,nallocate(a(m,n),b(m))print*,"按逻辑结构输入m*n矩阵数据(数据之间用空格间隔):" read*,((a(i,j),j=1,n),i=1,m)doi=1,msum=0 do j=1,nsum=sum+a(i,j)end dob(i)=sumend domax=b(1);p=1doi=2,mif(b(i)>=max) thenmax=b(i);p=iendifend doprint*,"对调前矩阵"doi=1,mprint 200,(a(i,j),j=1,n)end doprint*,"和最大的行:",pdo j=1,nt=a(p,j);a(p,j)=a(1,j);a(1,j)=t end doprint*,"对调后矩阵:"doi=1,mprint 200,(a(i,j),j=1,n)end do200 format(1x,<n>(i4,1x))End1415program ex703 implicit noneparameter m=3,n=4 real a(m,n),min,max,tintegeri,j,i_min,j_min,i_max,j_maxa=reshape((/25.5,15.2,20.3,35.2,12.0,14.5,38.5,29.5,30.5,15.3,18.5,17.8/),(/m,n/))print*,"交换前的数据为:" print 10,((a(i,j),j=1,4),i=1,3)min=a(1,1) max=a(m,n)doi=1,m do j=1,nif(abs(min)>abs(a(i,j))) then min=a(i,j) i_min=i j_min=j endifif(abs(max)<abs(a(i,j))) then max=a(i,j) i_max=i j_max=j endifend doend dot=a(1,1)a(1,1)=a(i_min,j_min)a(i_min,j_min)=tt=a(m,n)a(m,n)=a(i_max,j_max)a(i_max,j_max)=tprint*,"交换后的数据为:"print 10,((a(i,j),j=1,4),i=1,3)10 format(2x,f4.1,2x,f4.1,2x,f4.1,2x,f4.1) endprogram ex704implicit noneinteger,allocatable::a(:,:) integer::sum1=0,sum2=0,i,j,nprint*,"请输入n*n矩阵阶数n:"read*,n allocate(a(n,n))print*,"按逻辑结构输入n*n矩阵数据:" read*,((a(i,j),j=1,n),i=1,n)doi=1,nsum1=sum1+a(i,i)end dodoi=1,nsum2=sum2+a(i,n-i+1)end doprint*,"第一条对角线元素之和:",sum1 print*,"第二条对角线元素之和:",sum2 end16program ex705 implicit none integeri,j,t,a(4)print*,"请输入4个整数:" read*,(a(i),i=1,4)print 100,(a(i),i=1,4) print*,"输出数组:"doi=1,4t=a(1)do j=2,4a(j-1)=a(j)end doa(4)=tprint 100,a(1:4)end do100 format(1x,i4,1x,i4,1x,i4,1x,i4,1x) Endprogram ex801implicit nonerealx,yx,fx,px,qxrealy,f,p,qy(x)=1+2*x+x**2f(x)=x**2/sqrt(1+2*x+x**2)p(x)=log(1+sqrt(x))/(1+x**2) q(x)=atan(x/sqrt(1-x**2))do x=0.1,0.3,0.1yx=y(x)fx=f(x)px=p(x)qx=q(x)print*,'x=',x17print*,'y(x)=',yx print*,'f(x)=',fx print*,'p(x)=',px print*,'q(x)=',qxenddoendprogram ex802implicit noneintegerx,y,zinteger ff(x,y,z)=25*x+20*y+13*z print*,'方程组的自然数解为:' do x=1,18do y=1,18z=20-x-yif(f(x,y,z)==400)thenprint*,z,y,zendifenddoenddoend program ex803implicit nonereal radius, areawrite(*,*) "请输入圆的半径:"read(*,*) radiuscallCircleArea(radius, area)write(*,"('圆面积=',F8.3)") area stopend program subroutineCircleArea(radius, area) implicit nonereal, parameter :: PI=3.14159real radius, areaarea = radius*radius*PIreturnend subroutineprogram ex804implicit none18real radiusreal, external :: CircleAreawrite(*,*) "请输入圆的半径"read(*,*) radiuswrite(*,"('圆面积=',F8.3)") CircleArea(radius) stopend programreal function CircleArea(radius)implicit nonereal, parameter :: PI=3.14159real radiusCircleArea = radius*radius*PIreturnendfunction subroutinematra_mul(A,B,M,N,L,AB)!A(M,N)*B(N,L)=>AB(M,L)implicit noneintegerM,N,L,i,j,kreal A,B,ABdimension A(M,N),B(N,L),AB(M,L)doi=1,Mdo j=1,LAB(i,j)=0do k=1,nAB(i,j)=AB(i,j)+A(i,k)*B(k,j)enddoenddoenddoendprogram ex805implicit noneintegerM,N,L,i,jparameter (M=3,N=4,L=3)real,dimension(:,:):: A(M,N),B(N,L),AB(M,L)data A/2.5,3.8,-45,1.5,4.5,23,12,5.9,34,2.4,24.5,0/ data B/3.2,0,3.4,2.5,-7.8,-9.8,5.8,-56,5,4.5,7.8,210/ callmatra_mul(A,B,M,N,L,AB)write(*,*)'A数组:'write(*,100)((A(i,j),j=1,N),i=1,M)19write(*,*)write(*,*)'B数组:'write(*,200)((B(i,j),j=1,L),i=1,N) write(*,*)write(*,*)'AB数组:'write(*,300)((AB(i,j),j=1,L),i=1,M) 100 format(2X,4F8.2)200 format(2X,3F8.2)300 format(2X,3F10.2)End program ex901 !用文件组织数据,对数据排序implicit noneinteger M,N,Lparameter (n=9,m=3)integer::A(n),i,j,t,kopen(1,file='dat.in')open(2,file='dat.out')k=n/mdoi=1,kread(1,*)(A(k*(i-1)+j),j=1,k)enddodoi=1,n-1do j=i+1,nif(A(i)>A(j))thent=A(i);A(i)=A(j);A(j)=tendifenddoenddodoi=1,kwrite(2,'(1X,<k>(I2,2X))')(A(k*(i-1)+j),j=1,k) enddoprint*,'程序运行结束,结果在输出文件dat.out中。

相关主题