t=a(j)
a(j)=a(j+1)
a(j+1)=t
endif
enddo
enddo
endselect
end
real,dimension(:
),allocatable:
:
b
integerk,n
print*,"请输入要排序的数据数目"
read*,n
allocate(b(n))
print*,"请输入这n个数据"
read*,(b(i),i=1,n)
print*,"请输入k的值"
read*,k
callsort(b,n,k)
print*,(b(i),i=1,n)
end
10.编写一个判断闰年的程序。
调用该过程输出2011~2050之间所有的闰年。
functions(n)integernlogicals
if(mod(n,4)==0.and.mod(n,100)/=0.or.mod(n,400)==0)then
s=.true.
else
s=.false.
endif
end
logicals
doi=2011,2050
if(s(i))then
print*,i
endif
enddoend
11.利用子程序机制实现:
输入若干名学生的学号和三门课程的成绩;计算每个学生的总分;输出每个学生的学号、三门课程的成绩和总分。
integer,dimension(:
:
),allocatable:
:
gradeinteger,dimension(:
),allocatable:
:
zonginteger,dimension(:
),allocatable:
:
mingci
integerm,n
read*,m,n
allocate(grade(m,n))allocate(zong(m))allocate(mingci(m))callinput(grade,m,n)callsum1(grade,m,n,zong)callqiuming(zong,m,mingci)calloutput(grade,m,n,zong,mingci)end
subroutineinput(grade,m,n)
integergrade(m,n)
print*,"请输入成绩"
doi=1,m
read*,(grade(i,j),j=1,n)
enddo
end
subroutinesum1(grade,m,n,zong)
integergrade(m,n)
integerzong(m)
zong=0
doi=1,m
doj=1,n
zong(i)=zong(i)+grade(i,j)
enddo
enddo
end
subroutineqiuming(zong,m,mingci)
integerzong(m)
integermingci(m)
mingci=1
doi=1,m
doj=1,m
if(zong(i)mingci(i)=mingci(i)+1
endif
enddo
enddo
end
subroutineoutput(grade,m,n,zong,mingci)integergrade(m,n)
integerzong(m)
integermingci(m)
doi=1,m
print*,(grade(i,j),j=1,n),zong(i),mingci(i)enddo
end
12•利用递归函数方法实现:
求n!
;然后调用该函数求
246
,、’xxx
cos(x)=1-
2!
4!
6!
直到最后一项:
:
:
10上
integerrecursivefunctionfac(n)result(f)if(n==1)then
f=1
else
f=n*fac(n-1)
endif
endparameter(pi=3.1416926)
realx,s
integern,f
s=1
print*,"请输入角度值"
read*,x
x=x*pi/180
f=-1
n=2
dowhile(abs(f*x**n/fac(n)>1e-6)s=s+f*x**n/fac(n)
n=n+2
f=-f
enddo
print*,s
end
13.输入10名学生的学号、姓名、性别和一门课程的成绩,要求打印出不及格学生的所有信息。
typescharacter*11numcharacter*8namelogicalsexrealgradeendtypetype(s)g(10)integeri,jprint*,"请输入学生的基本信息"doi=1,10
read*,g(i).num,g(i).name,g(i).sex,g(i).grade
enddo
doi=1,10
if(g(i).grade<60)then
j=i
endif
enddo
print*,g(j).num,g(j).name,g(j).sex,g(j).grade
end
14.已知职工工资表记录包括:
职工号,姓名,年龄、职称、工资,建立一个10个职工组成
的记录表,打印输出职工中工资最高者和最低者所有信息,以及工资总额和平均工资。
typeemp
character*6num
character*8name
integerage
character*16zhichen
realwage
endtype
type(emp)s(10)
integeri
realmax,min,sum,avg
print*,"请输入职工的基本信息"
doi=1,10
read*,s(i).num,s(i).name,s(i).age,s(i).zhichen,s(i).wage
enddo
max=s
(1).wage;j=1
doi=2,10
if(max
max=s(i).wage
j=i
endif
enddo
max=s
(1).wage;k=1
doi=2,10
if(min>s(i).wage)then
min=s(i).wage
k=i
endif
enddo
sum=0
doi=1,10
sum=sum+s(i).wage
enddo
avg=sum/10
print*,"输出最高工资的职工信息"
print*,s(j).num,s(j).name,s(j).age,s(j).zhichen,s(j).wage
print*,"输出最低工资的职工信息"
print*,s(k).num,s(k).name,s(k).age,s(k).zhichen,s(k).wage
print*,"输出工资总额和平均值"
print*,sum,avg
end