第一篇:Fortran語言編程小結(jié)
1.單雙精度 Program ex01 implicit none real(kind=4):: a real(kind=8):: b a=3.***66666666_4
!確定這個數(shù)字是使用單精度 b=3.***66666666_8
!確定這個數(shù)字是使用雙精度 write(*,*)a,b End program ex01
2.判斷kind值 program ex02 Implicit none
!判斷可以記錄9個位數(shù)的整數(shù)kind值
integer, parameter :: long_int = selected_int_kind(9)!判斷可以記錄3個位數(shù)的整數(shù)kind值 integer, parameter :: short_int = selected_int_kind(3)
!判斷可以有3個有效位數(shù), 指數(shù)可以記錄到3的浮點數(shù)kind值
integer, parameter :: long_real = selected_real_kind(10, 50)!判斷可以有10個有效位數(shù), 指數(shù)可以記錄到50的浮點數(shù)kind值
integer, parameter :: short_real= selected_real_kind(3, 3)integer(kind=long_int):: a = 123456 integer(kind=short_int):: b = 123 real(kind=long_real)
:: c = +1.23456789D45 real(kind=short_real)
:: d =+1230 write(*, “(I3,1X,I10)”)
long_int,a write(*, “(I3,1X,I10)”)
short_int, b write(*, “(I3,1X,E10.5)”)long_real, c write(*, “(I3,1X,E10.5)”)short_real, d END
3.TYPE program ex0434 implicit none Type :: person
!開始建立person這個類型
character(len=30):: name!人名
integer :: age
!年齡
integer :: height
!身高
INTEGER :: weight
!體重
character(len=80):: address!地址 End type person type(person):: a
!聲明一個person類型的變量 write(*,*)“NAME:” read(*,*)a%name write(*,*)“AGE:” read(*,*)a%age write(*,*)“HEIGHT:” read(*,*)a%height write(*,*)“WEIGHT:” read(*,*)a%weight write(*,*)“ADDRESS:” read(*,*)a%address write(*,100)a%name,a%age,a%height,a%weight 100 format(“Name:”,A10/,“Age:”,I3/,“Height:”,I3/,“Weight:”,I3/,&
“Addres:”,A80)End
4.REAL 與 INTEGER Program ex0431 implicit none
integer :: a=1
integer :: b=2
real
:: c
c=a/b!c=1/2=0, 雖然c是浮點數(shù),但因為a,b是整數(shù),計算a/b時會用整數(shù)去計算.write(*,“(F5.2)”)c End
5.DATA 變量表/初值表/,變量表/初值表/,… PROGRAM ex0430 IMPLICIT NONE INTEGER A REAL
B COMPLEX C CHARACTER(20)STR DATA A,B,C,STR /1, 2.0,(1.0,2.0), 'FORTRAN 77'/ WRITE(*,*)A,B,C,STR END
6.復數(shù)實虛部 Program ex0430 complex :: c =(1,2)write(*,100)real(c),'+',aimag(c),'i' 100 format(f5.1,a1,f5.1,a1)End
7.邏輯輸出 Program ex0416
logical a,b
a=.true.b=.false.write(*,100)a,b
format(L5,L4)End
8.Program ex0415
character(len=20)string
character(len=5)substring
string = “Have a nice day.”
substring = “nice”
write(*,*)ichar('A')!輸出字符A的ASCII碼
write(*,*)char(65)
!輸出ASCII碼65所代表的字符,也就是A
write(*,*)len(string)!輸出字符串string聲明時的長度
write(*,*)len_trim(string)!輸出字符串string內(nèi)容的長度
write(*,*)index(string, substring)!nice在Have a nice day的第8個位置 End
9.Program ex0414
character(len= 6)first
character(len=10)second
character(len=20)add
first=“Happy ”
second=“Birthday”
add = first//second!經(jīng)由兩個連續(xù)的除號可以連接兩個字符串
write(*,100)add
FORMAT('生日快樂',/,A)End
10.帶精度計算 Program ex0408
real(kind=8):: a,b
a=1
b=0.1
write(*,*)a,“+”,b,“=”,a+b End
11.邏輯if語句 Program ex0504 implicit none
integer rain, windspeed
logical r,w
write(*,*)“Rain:”
read(*,*)rain
write(*,*)“Wind:”
read(*,*)windspeed
r =(rain>=500)
!如果rain>=150, r=.true, 不然r=.false.w =(windspeed>=10)!如果windspeed>=10, w=.true, 不然w=.false.if(r.or.w)then
!只要r或w有一個值是true就成立
write(*,*)“停止上班上課”
else
write(*,*)“照常上班上課” End if End
12.Select Case用法 Program ex0512 implicit none
integer :: score
character grade
write(*,*)“Score:”
read(*,*)score
select case(score)
case(90:100)
grade='A'
case(80:89)
grade='B'
case default
grade='?'
End select
write(*,“('Grade:',A1)”)grade End
13.IF GOTO語句
PROGRAM ex0514 IMPLICIT NONE REAL height
REAL weight
WRITE(*,*)“height:” READ(*,*)
height
WRITE(*,*)“weight:” READ(*,*)
weight
IF(weight > height-100)GOTO 200 100 WRITE(*,*)“Under control.”
GOTO 300
200
WRITE(*,*)“Too fat!” 300 STOP END
14.DO WHILE 循環(huán) Program ex0604 implicit none
integer, parameter :: limit=10
integer counter
integer :: ans = 0
counter = 2
do while(counter <= limit)
ans = ans + counter
counter = counter + 2
end do
write(*,*)ans END
15.CYCLE,EXIT 語句 Program ex0609 implicit none
integer :: i,j
loop1: do i=1,3
loop2: do j=1,3
if(i==3)exit loop1
!跳離loop1循環(huán)
if(j==2)cycle loop2
!重做loop2循環(huán)
write(*, “('(',i2,',',i2,')')”)i, j
end do loop2
end do loop1 End
16.大小寫字符 Program ex0612 implicit none
integer i
integer strlen
character(len=20):: string
write(*,*)“String:”
read(*,*)string
strlen = LEN_TRIM(string)
do i = 1, strlen
string(i:i)= char(ichar(string(i:i))+32)
end do
write(*,“('encoded:',A20)”)string End
17.循環(huán)計算 Program ex0614 implicit none
real a,b,ans
character :: key = 'y'
!為了至少循環(huán)一次
do while(key=='y'.or.key=='Y')
read(*,*)a read(*,“(A1)”)key read(*,*)b select case(key)case('+')
ans = a+b case('-')
ans = a-b case('*')
ans = a*b
case('/')
ans = a/b case default
write(*,“('Unknown operator ',A1)”)key
stop end select
write(*,“(F6.2,A1,F6.2,'=',F6.2)”)a,key,b,ans write(*,*)“(Y/y)to do again.(Other)to exit.” read(*,“(A1)”)key
end do End
18.矩陣相加 pogram ex implicit none
integer, parameter :: row = 2
integer, parameter :: col = 2
integer :: matrixA(row,col)
integer :: matrixB(row,col)
integer :: matrixC(row,col)
integer r
integer c
write(*,*)“Matrix A”
do r=1, row
do c=1, col
write(*,“('A(',I1,',',I1,')=')”)r,c
read(*,*)matrixA(r,c)end do
end do
write(*,*)“Matrix B”
do r=1, row
do c=1, col
write(*,“('B(',I1,',',I1,')=')”)r,c
read(*,*)matrixB(r,c)end do
end do
write(*,*)“Matrix A+B=”
do r=1, row
do c=1, col
matrixC(r,c)= matrixB(r,c)+matrixA(r,c)
write(*,“('(',I1,',',I1,')=',I3)”)r,c,matrixC(r,c)end do
end do end pogram ex
[ write(*,“(I3,I3,/,I3,I3)”)((mc(i,j), i=1,2),j=1,2)]
19.program ex
implicit none
integer, parameter :: row = 2
integer, parameter :: col = 2
integer :: a(2,2)=(/ 1,2,3,4 /)
!a(1,1)=1, a(2,1)=2, a(1,2)=3, a(2,2)=4
integer :: b(4)=(/ 5,6,7,8 /)
integer :: c(2)
write(*,*)a,2)
write(*,*)a(:,1)
c = a(:,1)
!c(1)=a(1,1), c(2)=a(2,1)
write(*,*)c!c(1), c(2)
c = a(2,:)
!c(1)=a(2,1), c(2)=a(2,2)
write(*,*)c!c(1), c(2)
write(*,*)c(2:1:-1)
!c(2), c(1)
c = b(1:4:2)
!c(1)=b(1), c(2)=b(3)
write(*,*)c
!c(1), c(2)End
20.FORALL語句 Program ex Implicit none
integer :: I,J
integer, parameter :: size = 5
integer :: a(size,size)
forall(I=1:size, J=1:size, I>J)a(I,J)=1
!上半部分
forall(I=1:size, J=1:size, I==J)a(I,J)=2!對角線
forall(I=1:size, J=1:size, I !下半部分 write(*,“(5(5I5,/))”)a End 21.Allocatable Program EX Implicit none integer :: size, error=0 integer, parameter :: one_mb=1024*1024 !1MB character, allocatable :: a(:) Do size=size+one_mb! allocate(a(size), stat=error) if(error/=0)exit write(*,“('Allocate ',I10, ' bytes')”)size write(*,“(F10.2,' MB used')”)real(size)/real(one_mb) deallocate(a) End do End 22.Function 函數(shù) Program ex implicit none real :: a=10 real :: b=20 real :: add write(*,“(f6.2)”)add(a,b)End Function add(a,b)implicit none real :: a,b real :: add add = a*b End 23.SAVE語句 Program ex Implicit none call sub() call sub() call sub()End program Subroutine sub() Implicit none Integer :: count = 1 Save count !指定save變量永遠活著,不會忘記它的內(nèi)容 Write(*,*)count count = count+1 End [運行結(jié)果:1 2 3 ] 24.生成隨機數(shù) program ex implicit none interface!定義函數(shù)的接口 function random10(lbound, ubound)implicit none real :: lbound, ubound real :: random10(10) end function end interface real :: a(10) CALL RANDOM_SEED()!系統(tǒng)根據(jù)日期和時間隨機地提供種子 a = random10(1.0, 10.0) write(*,“(10F6.2)”)a end function random10(lbound, ubound)implicit none real :: lbound, ubound real :: len real :: random10(10) real t integer i len = ubound-lbound!計算范圍大小 do i=1,10 call random_number(t)!t會是0~1之間的隨機數(shù) random10(i)= lbound + len * t!把t轉(zhuǎn)換成lbound~ubound間的隨機數(shù) end do End 25.MODULE語句 Module global implicit none integer a,b common a,b End module Program ex0834 use global implicit none a=1 b=2 call sub()End program Subroutine sub() use global implicit none write(*,*)a,b return End subroutine 26.寫文件到text program ex0902 implicit none character(len=20):: string open(unit=10, file=“test.txt”) write(10,“(A20)”)“I LOVE YOU.”!寫到文件中 rewind(10) read(10,“(A20)”)string!從文件中讀出來 write(*,“(A20)”)string!寫到屏幕上 end 27.隨機成績 program gendata implicit none integer students integer i real r(3) write(*,“(4A5)”)“座位”,“語文”,“數(shù)學”,“英語” call random_seed() write(*,*)“How many students?” read(*,*)students do i=1,students call random_number(r) write(*,“(6I5)”)i,int(r*50+50) end do end program 復習內(nèi)容提綱 1.FORTRAN程序的結(jié)構(gòu)、書寫規(guī)則 FORTRAN程序的構(gòu)成(主程序和子程序);FORTRAN77源程序的書寫格式。 2.數(shù)據(jù)類型及其運算 常量和變量的類型(整型、實型、雙精度型、復型、邏輯型、字符型);定義變量類型的方法(用I-N規(guī)則隱式說明和顯式說明);符號常量及其定義方法(PARAMETER語句);運算符及運算優(yōu)先級;表達式(算術(shù)表達式、關(guān)系表達式、邏輯表達式和字符表達式)及其求值規(guī)則;不同類型數(shù)據(jù)的混合運算。 3.基本語句 賦值語句(算術(shù)、邏輯和字符型賦值語句);表控格式的輸入和輸出;格式輸出:格式編輯符(X、I、F、E、A、/),格式的重復作用,格式語句與輸出語句(WRITE語句)的相互作用,在輸出語句中包含格式說明的方法;停止語句(STOP語句);結(jié)束語句(END語句);賦初值語句(DATA語句);轉(zhuǎn)移語句(GO TO語句);程序舉例。 4.選擇結(jié)構(gòu)程序設(shè)計 邏輯IF語句;塊IF結(jié)構(gòu);選擇結(jié)構(gòu)的嵌套;程序舉例。 5.循環(huán)結(jié)構(gòu)程序設(shè)計 當型循環(huán)與直到型循環(huán);用DO語句實現(xiàn)循環(huán):DO語句時循環(huán)次數(shù)的計算,循環(huán)體的概念,循環(huán)終端語句和CONTINUE語句;DO WHILE 循環(huán)語句;用塊IF和GOTO語句實現(xiàn)循環(huán);循環(huán)的嵌套;程序舉例。 6.數(shù)組的使用 定義數(shù)組的方法(用DIMENSION語句和類型語句定義一維或多維數(shù)組);數(shù)組元素的正確引用;數(shù)組在內(nèi)存中存儲順序(按列存儲);對數(shù)組賦初值的方法;數(shù)組的輸入與輸出;可調(diào)數(shù)組;程序舉例。 7.函數(shù)和子程序 內(nèi)部函數(shù)的調(diào)用方法;語句函數(shù)的定義及引用方法;函數(shù)子程序(FUNCTION子程序)的結(jié)構(gòu)及調(diào)用方法;子例行程序(SUBROUTINE子程序)的結(jié)構(gòu)及調(diào)用方法;模塊間的數(shù)據(jù)傳遞(虛實結(jié)合);程序舉例。 8.數(shù)據(jù)聯(lián)系及文件 公用語句(COMMON語句),無名公用區(qū)和有名公用區(qū)。 編程小結(jié) (一)一.累加:加數(shù)1+加數(shù)2+加數(shù)3+??+加數(shù)n(n個加數(shù)相加)假設(shè)我們用i表示我們的加數(shù)數(shù)目,例如:當i=9時,就表示加數(shù)9 模版:int i,sum=0;(注意:如果是分數(shù)或者小數(shù)sum就是float類型) for(i=1;i<=n;i++)(注意:循環(huán)變量的初值和遞變規(guī)律,也有 可能是i--,或者i+=2等等){通項a;(通項:用一個通用的式子表示所有的加數(shù))sum+=a;} printf(“%d”,sum);(注意:如果是float類型就是%f) 1、求1+2+3??+100的和,則通項a就是i。 分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略。整理之后就是: int i,sum=0;for(i=1;i<=100;i++)sum+=i;printf(“%d”,sum); 2、求2+4+6??+100的和。 分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個加數(shù)都是偶數(shù),那么i的變化就是i+=2,并且i是從2開始變化,那么在賦值的時候就應(yīng)該是i=2。整理之后就是: int i,sum=0;for(i=2;i<=100;i+=2)sum+=i;printf(“%d”,sum); 3、求1+3+5??+99的和。 分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個加數(shù)都是奇數(shù),那么i的變化就是i+=2。整理之后就是: int i,sum=0;for(i=1;i<=100;i+=2)sum+=i;printf(“%d”,sum); 4、求1+5+9+13+17+??的前100項的和,則通項為j+4,則程序為: int i,sum=0,j=1;for(i=1;i<=100;i++){ sum+=j;j=j+4; } printf(“%d”,sum);因為加數(shù)的第一項是1,所以賦初值的時候j=1,然后加數(shù)進行變化,變成5加到sum里面,所以這里要將通項和求和這兩句話互換位置。 5、求1+4+9+16+??的前100項的和 分析可知:每個加數(shù)就是對應(yīng)的加數(shù)數(shù)目的平方,則通項為i*i,則程序為: int i,sum=0;for(i=1;i<=100;i++)sum+= i*i;printf(“%d”,sum); 6、求1+(1+2)+(1+2+3)+(1+2+3+4)+??的前100項的和。 分析可知每一個加數(shù)本身又是一個累加的式子,進一步觀察可以發(fā)現(xiàn),每個累加的式子都是加到這個加數(shù)所在的加數(shù)數(shù)目,即第35個加數(shù)就是1+2+3??+35,并且是在前面一個加數(shù)的基礎(chǔ)上加上這個加數(shù)所在的加數(shù)數(shù)目,也就是說第36個加數(shù)就是在前一個加數(shù)的基礎(chǔ)上加上36,即:1+2+3??+35+36。假設(shè)第k個加數(shù)是j,那么第k+1個加數(shù)就可以表示為j+(k+1),然后第k+2個加數(shù)就是j+(k+1)+(k+2)??那么我們的通項就可以表示為a=a+i,則程序為: int i,sum=0, a=0;for(i=1;i<=100;i++){ a+=i;sum+=a;} printf(“%d”,sum); 7、求1+1+2+3+5+8+13+21+??的前100項的和。 分析可知從第三個加數(shù)開始,每一個加數(shù)是其前兩個加數(shù)之和,假設(shè)第k個加數(shù)是m,第k+1個加數(shù)是n,然后第k+2個加數(shù)就是m+n,那么我們的通項就可以表示為a=m+n,但是要注意每次加數(shù)所對應(yīng)的m和n不一樣,所以我們要在求出每個加數(shù)之后,找出其對應(yīng)的m和n;再分析我們可以發(fā)現(xiàn)當前的n是下一次的m,當前的加數(shù)a是下一次的n,假設(shè)接著上面的推導,那么第k+3個加數(shù)就是n+(m+n),對應(yīng)我們的通項a=m+n,理解前面一句話。則程序為: int i,sum=0, m=1,n=1,a;for(i=3;i<=100;i++){ a=m+n;sum+=a;m=n;n=a;} printf(“%d”,sum); 8、求1+1/2+1/3+??+1/100 分析可知每一個加數(shù)就是我們的加數(shù)數(shù)目的倒數(shù),則通項a就是1/i,我們說循環(huán)變量i一般定義為整型,那么1/i的結(jié)果就是整型,這樣的話小數(shù)點后面的就會被省略,所以正確的應(yīng)該寫為a=1.0/i,則程序為: int i;float sum=0;for(i=1;i<=100;i++){a=1.0/i;sum+=a;} printf(“%f”,sum); 9、求1+1/2+2/3+3/5+5/8+??的前100項的和。 分析可從第三個加數(shù)開始觀察,每一個加數(shù)的分母是其前一個加數(shù)的分子和分母之和,每一個加數(shù)的分子是其前一個加數(shù)的分母??梢詫⒌谝粋€加數(shù)看成1/1,那么第二個加數(shù)也符合我們的規(guī)律,只有第一個不符合,那么我們可以先將第一個加數(shù)加到sum,然后再變下一個加數(shù),但是要注意每次加數(shù)所對應(yīng)的分子和分母不一樣,所以我們要在求出每個加數(shù)之后,找出下一個加數(shù)所對應(yīng)的分子和分母。設(shè)通項表示為a=m/n, 那么下一個加數(shù)是n/(m+n),然后下下一個加數(shù)就是(m+n)/(m+n+n);再分析我們可以發(fā)現(xiàn)當前的分子和分母之和(m+n)是下一次的分母n,當前的分母n是下一次的分子m,注意這里在做數(shù)據(jù)交換的時候需要中間變量,對應(yīng)我們的通項a=m/n,理解前面一句話。則程序為: int i;float sum=0, m=1,n=1,t;for(i=1;i<=100;i++){ sum+=m/n;t=m+n;m=n;n=t;} printf(“%f”,sum); 二.累乘:乘數(shù)1*乘數(shù)2*乘數(shù)3*??*乘數(shù)n(n個乘數(shù)相乘)假設(shè)我們用i表示我們的乘數(shù)數(shù)目,例如:當i=9時,就表示乘數(shù)9 模版:int i,sum=1;(注意:如果是分數(shù)或者小數(shù)sum就是float類型) for(i=1;i<=n;i++)(注意:循環(huán)變量的初值和遞變規(guī)律,也有 可能是i--,或者i+=2等等){通項a;(通項:用一個通用的式子表示所有的乘數(shù))sum*=a;} printf(“%d”,sum);(注意:如果是float類型就是%f) 1、求1*2*3??*100的積,則通項a就是i。 分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略。整理之后就是: int i,sum=1;for(i=1;i<=100;i**)sum*=i;printf(“%d”,sum); 2、求2*4*6??*100的和。分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個乘數(shù)都是偶數(shù),那么i的變化就是i+=2,并且i是從2開始變化,那么在賦值的時候就應(yīng)該是i=2。整理之后就是: int i,sum=1;for(i=2;i<=100;i+=2)sum*=i;printf(“%d”,sum); 3、求1*3*5??*99的和。 分析:因為a就是i的值,所以這里不需要通項這一行了,因此整個大括號中間就只有一句話,所以大括號可以省略,再分析,再分析我們發(fā)現(xiàn)每個乘數(shù)都是奇數(shù),那么i的變化就是i+=2。整理之后就是: int i,sum=1;for(i=1;i<=100;i+=2)sum*=i;printf(“%d”,sum); 4、求1*5*9*13*17*??的前100項的積,則通項為j*4,則程序為: 分析:因為乘數(shù)的第一項是1,所以賦初值的時候j=1,然后乘數(shù)進行變化,變成5乘到sum里面,所以這里要將通項和求積這兩句話互換位置。 int i,sum=1,j=1;for(i=1;i<=100;i**){ sum*=j;j=j*4; } printf(“%d”,sum); 5、求1*4*9*16*??的前100項的積 分析可知:每個乘數(shù)就是對應(yīng)的乘數(shù)數(shù)目的平方,則通項為i*i,則程序為: int i,sum=1;for(i=1;i<=100;i**)sum*= i*i;printf(“%d”,sum); 6、求1*(1*2)*(1*2*3)*(1*2*3*4)*??的前100項的積。分析可知每一個乘數(shù)本身又是一個累乘的式子,進一步觀察可以發(fā)現(xiàn),每個累乘的式子都是乘到這個乘數(shù)所在的乘數(shù)數(shù)目,即第35個乘數(shù)就是1*2*3??*35,并且是在前面一個乘數(shù)的基礎(chǔ)上乘上這個乘數(shù)所在的乘數(shù)數(shù)目,也就是說第36個乘數(shù)就是在前一個乘數(shù)的基礎(chǔ)上乘上36,即:1*2*3??*35*36。假設(shè)第k個乘數(shù)是j,那么第k+1個乘數(shù)就可以表示為j*(k+1),然后第k+2個乘數(shù)就是j*(k+1)*(k+2)??那么我們的通項就可以表示為a=a*i,則程序為: int i,sum=1, a=0;for(i=1;i<=100;i**){ a*=i;sum*=a;} printf(“%d”,sum); 7、求1*1*2*3*5*8*13*21*??的前100項的積。 分析可知從第三個乘數(shù)開始,每一個乘數(shù)是其前兩個乘數(shù)之和,假設(shè)第k個乘數(shù)是m,第k+1個乘數(shù)是n,然后第k+2個乘數(shù)就是m+n,那么我們的通項就可以表示為a=m+n,但是要注意每次乘數(shù)所對應(yīng)的m和n不一樣,所以我們要在求出每個乘數(shù)之后,找出其對應(yīng)的m和n;再分析我們可以發(fā)現(xiàn)當前的n是下一次的m,當前的乘數(shù)a是下一次的n,假設(shè)接著上面的推導,那么第k+3個乘數(shù)就是n*(m+n),對應(yīng)我們的通項a=m*n,理解前面一句話。則程序為: int i,sum=1, m=1,n=1,a;for(i=3;i<=100;i**){ a=m+n;sum*=a;m=n;n=a;} printf(“%d”,sum); 8、求1*1/2*1/3*??*1/100 分析可知每一個乘數(shù)就是我們的乘數(shù)數(shù)目的倒數(shù),則通項a就是1/i,我們說循環(huán)變量i一般定義為整型,那么1/i的結(jié)果就是整型,這樣的話小數(shù)點后面的就會被省略,所以正確的應(yīng)該寫為a=1.0/i,則程序為: int i;float sum=1;for(i=1;i<=100;i**){a=1.0/i;sum*=a;} printf(“%f”,sum); 9、求1*1/2*2/3*3/5*5/8*??的前100項的積。 分析可從第三個乘數(shù)開始觀察,每一個乘數(shù)的分母是其前一個乘數(shù)的分子和分母之和,每一個乘數(shù)的分子是其前一個乘數(shù)的分母。可以將第一個乘數(shù)看成1/1,那么第二個乘數(shù)也符合我們的規(guī)律,只有第一個不符合,那么我們可以先將第一個乘數(shù)乘到sum,然后再變下一個乘數(shù),但是要注意每次乘數(shù)所對應(yīng)的分子和分母不一樣,所以我們要在求出每個乘數(shù)之后,找出下一個乘數(shù)所對應(yīng)的分子和分母。設(shè)通項表示為a=m/n, 那么下一個乘數(shù)是n/(m+n),然后下下一個乘數(shù)就是(m+n)/(m+n+n);再分析我們可以發(fā)現(xiàn)當前的分子和分母之和(m+n)是下一次的分母n,當前的分母n是下一次的分子m,注意這里在做數(shù)據(jù)交換的時候需要中間變量,對應(yīng)我們的通項a=m/n,理解前面一句話。則程序為: int i;float sum=1, m=1,n=1,t;for(i=1;i<=100;i**){ sum*=m/n;t=m+n;m=n;n=t;} printf(“%f”,sum); 10、求1+(1*2)+(1*2*3)+(1*2*3*4)+??的前100項的和。 分析可知每一個加數(shù)本身是一個累乘的式子,進一步觀察可以發(fā)現(xiàn),每個累乘的式子都是乘到這個乘數(shù)所在的乘數(shù)數(shù)目,即第35個乘數(shù)就是1*2*3??*35,并且是在前面一個乘數(shù)的基礎(chǔ)上乘上這個乘數(shù)所在的乘數(shù)數(shù)目,也就是說第36個乘數(shù)就是在前一個乘數(shù)的基礎(chǔ)上乘上36,即:1*2*3??*35*36。假設(shè)第k個乘數(shù)是j,那么第k+1個乘數(shù)就可以表示為j*(k+1),然后第k+2個乘數(shù)就是j*(k+1)*(k+2)??那么我們的通項就可以表示為a=a*i,再利用累加的模版,則程序為: int i,sum=0, a=1;for(i=1;i<=100;i**){ a*=i;sum+=a;} printf(“%d”,sum); 11、求1*(1+2)*(1+2+3)*(1+2+3+4)*??的前100項的積。 分析可知每一個乘數(shù)本身又是一個累加的式子,進一步觀察可以發(fā)現(xiàn),每個累加的式子都是加到這個乘數(shù)所在的乘數(shù)數(shù)目,即第35個乘數(shù)就是1+2+3??+35,并且是在前面一個乘數(shù)的基礎(chǔ)上加上這個乘數(shù)所在的乘數(shù)數(shù)目,也就是說第36個乘數(shù)就是在前一個乘數(shù)的基礎(chǔ)上加上36,即:1+2+3??+35+36。假設(shè)第k個乘數(shù)是j,那么第k+1個乘數(shù)就可以表示為j+(k+1),然后第k+2個乘數(shù)就是j+(k+1)+(k+2)??那么我們的通項就可以表示為a=a+i, 再利用累乘的模版,則程序為: int i,sum=1, a=0;for(i=1;i<=100;i**){ a+=i;sum*=a;} printf(“%d”,sum); 三.最大值和最小值:數(shù)字0,數(shù)字1,數(shù)字2,??數(shù)字n-1(一共n個數(shù)字)假設(shè)我們用i表示我們的數(shù)字所在的位置,并且第一個位置是0,例如:當i=9時,就表示這個數(shù)字在第10個位子 模版: int i,max,a[n];(注意:如果是分數(shù)或者小數(shù)max和a[n]就是float 類型,注意這里定義的時候根據(jù)題目所給的具體數(shù)字把n換掉,千萬不可以寫a[n]o哦~~~~) for(i=0;i 了數(shù)字,就在定義的時候直接賦值,這個循環(huán)就不需要了;如果要求產(chǎn)生給數(shù)組賦a到b之間的隨機數(shù),那么就用a[i]= a + rand()%(b-a);這句話代替這句。注意如果是float類型就是%f)max=a[0];for(i=0;i 1、求20個數(shù)字的最大值和最小值,要求賦1到100之間的隨機數(shù),并且輸出它們及其下標。 分析:因為這里還要輸出其下標,所以還有定義一個row來存放,并且要對其賦值為0,因為我們給max賦值為a[0],則程序為: int i,max,min,a[20],row1=0,row2=0;for(i=0;i<20;i++)a[i]= 1+rand()%99;max=a[0];min=a[0];for(i=0;i<20;i++){ if(maxa[i])(這里是找出最小值){ min=a[i];row2=i;} } printf(“max =%d, row=%dn min =%d, row=%dn”, max,row1,min,row2); 2、求4*5矩陣的最大值和最小值,要求賦值隨機數(shù),并且輸出它們及其下標。分析:雖然這是一個二維的數(shù)組,但是其思路仍然和一維數(shù)組的一樣,區(qū)別只是這里需要用嵌套循環(huán)。要求還要輸出其下標,二維數(shù)組的下標是兩個,所以還要定義一個row和一個col來存放,并且要對它們賦值為0,因為我們給max賦值為a[0] [0],則程序為: int i,j,max,min,a[4] [5],row1=0,row2=0,col1=0,col2=0;for(i=0;i<4;i++)for(j=0;j<5;j++)a[i] [j]=rand();max=a[0] [0];min=a[0] [0];for(i=0;i<4;i++)for(j=0;j<5;j++){ if(maxa[i] [j])(這里是找出最小值){ min=a[i] [j];row2=i;col2=j;} } printf(“max =%d, row=%d, col=%d n min =%d, row=%d, col=%d n”, max,row1, col1, min,row2, col2); 3、求4*5矩陣的每一行最大值和最小值,要求賦值隨機數(shù),并且輸出它們及其下標。 分析:雖然這是一個二維的數(shù)組,但是要求的是每一行的最大最小值,我們知道二維數(shù)組的每一行本身就是一個數(shù)組,那么我們就還需要一個控制行數(shù)的循環(huán)。要求還要輸出其下標,二維數(shù)組的下標是兩個,每一行的最大最小值其行號不就是i,所以還要定義一個存放列號的col,并且要對它賦值為0,因為我們給max賦值為每一行的第一個元素,也就是a[i] [0],則程序為: int i,j,max,min,a[4] [5],col1=0,col2=0;for(i=0;i<4;i++)for(j=0;j<5;j++)a[i] [j]=rand();for(i=0;i<4;i++)(這個循環(huán)是控制行的,里面的循環(huán)體本身就是一個求 一維數(shù)組的最大最小值的程序) {max=a[i] [0];min=a[i] [0];for(j=0;j<5;j++){ if(maxa[i] [j])(這里是找出最小值){ min=a[i] [j];col2=j;} } printf(“max =%d, row=%d, col=%d n min =%d, row=%d, col=%d n”,max,i, col1, min,i, col2);} 4、求4*5矩陣的每一列最大值和最小值,要求賦值隨機數(shù),并且輸出它們及其下標。 分析:雖然這是一個二維的數(shù)組,但是要求的是每一列的最大最小值,二維數(shù)組的每一列可以看成一個數(shù)組,那么我們就還需要一個控制列數(shù)的循環(huán)。要求還要輸出其下標,二維數(shù)組的下標是兩個,每一列的最大最小值其列號不就是j,所以還要定義一個存放行號的row,并且要對它賦值為0,因為我們給max賦值為每一列的第一個元素,也就是a[0] [j],則程序為: int i,j,max,min,a[4] [5],row1=0,row2=0;for(i=0;i<4;i++)for(j=0;j<5;j++)a[i] [j]=rand();for(j=0;j<5;j++)(這個循環(huán)是控制列的,里面的循環(huán)體本身就是一個求 一維數(shù)組的最大最小值的程序){max=a[0] [j];min=a[0] [j];for(i=0;i<4;i++){ if(maxa[i] [j])(這里是找出最小值){ min=a[i] [j];row2=i;} } printf(“max =%d, row=%d, col=%d n min =%d, row=%d, col=%d n”,max, row1,j, min, row2,j);} 5、排序(冒泡法)比如說 對于5個數(shù)字排序,首先要把5個數(shù)字放到一個一維的數(shù)組里面去 所以編程的前幾句為:int a[5] for(i=0;i<5;i++)scanf(“%d”,&a*i+); 那接下來就是排序了,為了方便理解就將數(shù)組實際化:比如 a[5]里面放著{7,9,0,12,3}那畫圖出來就是 a[5] a[0] a[1] a[2] a[3] a[4] ????????????那我們排序的方法是這樣的采用這樣幾步: 1,用a[0]與后面的(a[1]~a[4]里面的每一個成員比較即是說:a[0]~a[1]比較 a[0]~a[2]比較 a[0]~a[3]比較 a[0]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[0]小的就與他的位置交換 這部做完之后數(shù)組就應(yīng) 該是這個樣子: a[0] a[1] a[2] a[3] a[4] ???????????2,用a[1]與后面的(a[2]~a[4]里面的每一個成員比較即是說: a[1]~a[2]比較 a[1]~a[3]比較 a[1]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[1]小的就與他的位置交換 這部做完之后數(shù) 組該是這個樣子:這個時候的a1不是我們賦初值時候的a1老就是我們改變后的數(shù)組所以這個時候的a1=9哦。 a[0] a[1] a[2] a[3] a[4] ???????????3,用a[2]與后面的(a[3]~a[4]里面的每一個成員比較即是說: a[2]~a[3]比較 a[2]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[2]小的就與他的位置交換 這部做完之后數(shù)組就應(yīng) 該是這個樣子: a[0] a[1] a[2] a[3] a[4] ???????????4,用a[3]與后面的(a[4]~a[4]里面的每一個成員比較即是說: a[3]~a[4]比較)當后面的成員只要發(fā)現(xiàn)比a[2]小的就與他的位置交換 這部做完之后數(shù)組就應(yīng) 該是這個樣子: a[0] a[1] a[2] a[3] a[4] ???????????循環(huán)就是 寫成這個樣子的哦: for(i=0;i<4;i++)第二篇:Fortran語言復習大綱
第三篇:編程小結(jié)