第一篇:Fortran语言编程小结
1.单双精度 Program ex01 implicit none real(kind=4):: a real(kind=8):: b a=3.***66666666_4
!确定这个数字是使用单精度 b=3.***66666666_8
!确定这个数字是使用双精度 write(*,*)a,b End program ex01
2.判断kind值 program ex02 Implicit none
!判断可以记录9个位数的整数kind值
integer, parameter :: long_int = selected_int_kind(9)!判断可以记录3个位数的整数kind值 integer, parameter :: short_int = selected_int_kind(3)
!判断可以有3个有效位数, 指数可以记录到3的浮点数kind值
integer, parameter :: long_real = selected_real_kind(10, 50)!判断可以有10个有效位数, 指数可以记录到50的浮点数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是浮点数,但因为a,b是整数,计算a/b时会用整数去计算.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.复数实虚部 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内容的长度
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!经由两个连续的除号可以连接两个字符串
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 循环 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循环
if(j==2)cycle loop2
!重做loop2循环
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.循环计算 Program ex0614 implicit none
real a,b,ans
character :: key = 'y'
!为了至少循环一次
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 函数 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变量永远活着,不会忘记它的内容 Write(*,*)count count = count+1 End [运行结果:1 2 3 ] 24.生成随机数 program ex implicit none interface!定义函数的接口 function random10(lbound, ubound)implicit none real :: lbound, ubound real :: random10(10) end function end interface real :: a(10) CALL RANDOM_SEED()!系统根据日期和时间随机地提供种子 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之间的随机数 random10(i)= lbound + len * t!把t转换成lbound~ubound间的随机数 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)”)“座位”,“语文”,“数学”,“英语” 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 复习内容提纲 1.FORTRAN程序的结构、书写规则 FORTRAN程序的构成(主程序和子程序);FORTRAN77源程序的书写格式。 2.数据类型及其运算 常量和变量的类型(整型、实型、双精度型、复型、逻辑型、字符型);定义变量类型的方法(用I-N规则隐式说明和显式说明);符号常量及其定义方法(PARAMETER语句);运算符及运算优先级;表达式(算术表达式、关系表达式、逻辑表达式和字符表达式)及其求值规则;不同类型数据的混合运算。 3.基本语句 赋值语句(算术、逻辑和字符型赋值语句);表控格式的输入和输出;格式输出:格式编辑符(X、I、F、E、A、/),格式的重复作用,格式语句与输出语句(WRITE语句)的相互作用,在输出语句中包含格式说明的方法;停止语句(STOP语句);结束语句(END语句);赋初值语句(DATA语句);转移语句(GO TO语句);程序举例。 4.选择结构程序设计 逻辑IF语句;块IF结构;选择结构的嵌套;程序举例。 5.循环结构程序设计 当型循环与直到型循环;用DO语句实现循环:DO语句时循环次数的计算,循环体的概念,循环终端语句和CONTINUE语句;DO WHILE 循环语句;用块IF和GOTO语句实现循环;循环的嵌套;程序举例。 6.数组的使用 定义数组的方法(用DIMENSION语句和类型语句定义一维或多维数组);数组元素的正确引用;数组在内存中存储顺序(按列存储);对数组赋初值的方法;数组的输入与输出;可调数组;程序举例。 7.函数和子程序 内部函数的调用方法;语句函数的定义及引用方法;函数子程序(FUNCTION子程序)的结构及调用方法;子例行程序(SUBROUTINE子程序)的结构及调用方法;模块间的数据传递(虚实结合);程序举例。 8.数据联系及文件 公用语句(COMMON语句),无名公用区和有名公用区。 编程小结 (一)一.累加:加数1+加数2+加数3+„„+加数n(n个加数相加)假设我们用i表示我们的加数数目,例如:当i=9时,就表示加数9 模版:int i,sum=0;(注意:如果是分数或者小数sum就是float类型) for(i=1;i<=n;i++)(注意:循环变量的初值和递变规律,也有 可能是i--,或者i+=2等等){通项a;(通项:用一个通用的式子表示所有的加数)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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个加数都是偶数,那么i的变化就是i+=2,并且i是从2开始变化,那么在赋值的时候就应该是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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个加数都是奇数,那么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);因为加数的第一项是1,所以赋初值的时候j=1,然后加数进行变化,变成5加到sum里面,所以这里要将通项和求和这两句话互换位置。 5、求1+4+9+16+„„的前100项的和 分析可知:每个加数就是对应的加数数目的平方,则通项为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项的和。 分析可知每一个加数本身又是一个累加的式子,进一步观察可以发现,每个累加的式子都是加到这个加数所在的加数数目,即第35个加数就是1+2+3„„+35,并且是在前面一个加数的基础上加上这个加数所在的加数数目,也就是说第36个加数就是在前一个加数的基础上加上36,即:1+2+3„„+35+36。假设第k个加数是j,那么第k+1个加数就可以表示为j+(k+1),然后第k+2个加数就是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项的和。 分析可知从第三个加数开始,每一个加数是其前两个加数之和,假设第k个加数是m,第k+1个加数是n,然后第k+2个加数就是m+n,那么我们的通项就可以表示为a=m+n,但是要注意每次加数所对应的m和n不一样,所以我们要在求出每个加数之后,找出其对应的m和n;再分析我们可以发现当前的n是下一次的m,当前的加数a是下一次的n,假设接着上面的推导,那么第k+3个加数就是n+(m+n),对应我们的通项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 分析可知每一个加数就是我们的加数数目的倒数,则通项a就是1/i,我们说循环变量i一般定义为整型,那么1/i的结果就是整型,这样的话小数点后面的就会被省略,所以正确的应该写为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项的和。 分析可从第三个加数开始观察,每一个加数的分母是其前一个加数的分子和分母之和,每一个加数的分子是其前一个加数的分母。可以将第一个加数看成1/1,那么第二个加数也符合我们的规律,只有第一个不符合,那么我们可以先将第一个加数加到sum,然后再变下一个加数,但是要注意每次加数所对应的分子和分母不一样,所以我们要在求出每个加数之后,找出下一个加数所对应的分子和分母。设通项表示为a=m/n, 那么下一个加数是n/(m+n),然后下下一个加数就是(m+n)/(m+n+n);再分析我们可以发现当前的分子和分母之和(m+n)是下一次的分母n,当前的分母n是下一次的分子m,注意这里在做数据交换的时候需要中间变量,对应我们的通项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); 二.累乘:乘数1*乘数2*乘数3*„„*乘数n(n个乘数相乘)假设我们用i表示我们的乘数数目,例如:当i=9时,就表示乘数9 模版:int i,sum=1;(注意:如果是分数或者小数sum就是float类型) for(i=1;i<=n;i++)(注意:循环变量的初值和递变规律,也有 可能是i--,或者i+=2等等){通项a;(通项:用一个通用的式子表示所有的乘数)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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个乘数都是偶数,那么i的变化就是i+=2,并且i是从2开始变化,那么在赋值的时候就应该是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的值,所以这里不需要通项这一行了,因此整个大括号中间就只有一句话,所以大括号可以省略,再分析,再分析我们发现每个乘数都是奇数,那么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,则程序为: 分析:因为乘数的第一项是1,所以赋初值的时候j=1,然后乘数进行变化,变成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项的积 分析可知:每个乘数就是对应的乘数数目的平方,则通项为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项的积。分析可知每一个乘数本身又是一个累乘的式子,进一步观察可以发现,每个累乘的式子都是乘到这个乘数所在的乘数数目,即第35个乘数就是1*2*3„„*35,并且是在前面一个乘数的基础上乘上这个乘数所在的乘数数目,也就是说第36个乘数就是在前一个乘数的基础上乘上36,即:1*2*3„„*35*36。假设第k个乘数是j,那么第k+1个乘数就可以表示为j*(k+1),然后第k+2个乘数就是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项的积。 分析可知从第三个乘数开始,每一个乘数是其前两个乘数之和,假设第k个乘数是m,第k+1个乘数是n,然后第k+2个乘数就是m+n,那么我们的通项就可以表示为a=m+n,但是要注意每次乘数所对应的m和n不一样,所以我们要在求出每个乘数之后,找出其对应的m和n;再分析我们可以发现当前的n是下一次的m,当前的乘数a是下一次的n,假设接着上面的推导,那么第k+3个乘数就是n*(m+n),对应我们的通项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 分析可知每一个乘数就是我们的乘数数目的倒数,则通项a就是1/i,我们说循环变量i一般定义为整型,那么1/i的结果就是整型,这样的话小数点后面的就会被省略,所以正确的应该写为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项的积。 分析可从第三个乘数开始观察,每一个乘数的分母是其前一个乘数的分子和分母之和,每一个乘数的分子是其前一个乘数的分母。可以将第一个乘数看成1/1,那么第二个乘数也符合我们的规律,只有第一个不符合,那么我们可以先将第一个乘数乘到sum,然后再变下一个乘数,但是要注意每次乘数所对应的分子和分母不一样,所以我们要在求出每个乘数之后,找出下一个乘数所对应的分子和分母。设通项表示为a=m/n, 那么下一个乘数是n/(m+n),然后下下一个乘数就是(m+n)/(m+n+n);再分析我们可以发现当前的分子和分母之和(m+n)是下一次的分母n,当前的分母n是下一次的分子m,注意这里在做数据交换的时候需要中间变量,对应我们的通项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项的和。 分析可知每一个加数本身是一个累乘的式子,进一步观察可以发现,每个累乘的式子都是乘到这个乘数所在的乘数数目,即第35个乘数就是1*2*3„„*35,并且是在前面一个乘数的基础上乘上这个乘数所在的乘数数目,也就是说第36个乘数就是在前一个乘数的基础上乘上36,即:1*2*3„„*35*36。假设第k个乘数是j,那么第k+1个乘数就可以表示为j*(k+1),然后第k+2个乘数就是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项的积。 分析可知每一个乘数本身又是一个累加的式子,进一步观察可以发现,每个累加的式子都是加到这个乘数所在的乘数数目,即第35个乘数就是1+2+3„„+35,并且是在前面一个乘数的基础上加上这个乘数所在的乘数数目,也就是说第36个乘数就是在前一个乘数的基础上加上36,即:1+2+3„„+35+36。假设第k个乘数是j,那么第k+1个乘数就可以表示为j+(k+1),然后第k+2个乘数就是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); 三.最大值和最小值:数字0,数字1,数字2,„„数字n-1(一共n个数字)假设我们用i表示我们的数字所在的位置,并且第一个位置是0,例如:当i=9时,就表示这个数字在第10个位子 模版: int i,max,a[n];(注意:如果是分数或者小数max和a[n]就是float 类型,注意这里定义的时候根据题目所给的具体数字把n换掉,千万不可以写a[n]o哦~~~~) for(i=0;i 了数字,就在定义的时候直接赋值,这个循环就不需要了;如果要求产生给数组赋a到b之间的随机数,那么就用a[i]= a + rand()%(b-a);这句话代替这句。注意如果是float类型就是%f)max=a[0];for(i=0;i 1、求20个数字的最大值和最小值,要求赋1到100之间的随机数,并且输出它们及其下标。 分析:因为这里还要输出其下标,所以还有定义一个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矩阵的最大值和最小值,要求赋值随机数,并且输出它们及其下标。分析:虽然这是一个二维的数组,但是其思路仍然和一维数组的一样,区别只是这里需要用嵌套循环。要求还要输出其下标,二维数组的下标是两个,所以还要定义一个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矩阵的每一行最大值和最小值,要求赋值随机数,并且输出它们及其下标。 分析:虽然这是一个二维的数组,但是要求的是每一行的最大最小值,我们知道二维数组的每一行本身就是一个数组,那么我们就还需要一个控制行数的循环。要求还要输出其下标,二维数组的下标是两个,每一行的最大最小值其行号不就是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++)(这个循环是控制行的,里面的循环体本身就是一个求 一维数组的最大最小值的程序) {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矩阵的每一列最大值和最小值,要求赋值随机数,并且输出它们及其下标。 分析:虽然这是一个二维的数组,但是要求的是每一列的最大最小值,二维数组的每一列可以看成一个数组,那么我们就还需要一个控制列数的循环。要求还要输出其下标,二维数组的下标是两个,每一列的最大最小值其列号不就是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++)(这个循环是控制列的,里面的循环体本身就是一个求 一维数组的最大最小值的程序){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个数字排序,首先要把5个数字放到一个一维的数组里面去 所以编程的前几句为:int a[5] for(i=0;i<5;i++)scanf(“%d”,&a*i+); 那接下来就是排序了,为了方便理解就将数组实际化:比如 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]比较)当后面的成员只要发现比a[0]小的就与他的位置交换 这部做完之后数组就应 该是这个样子: 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]比较)当后面的成员只要发现比a[1]小的就与他的位置交换 这部做完之后数 组该是这个样子:这个时候的a1不是我们赋初值时候的a1老就是我们改变后的数组所以这个时候的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]比较)当后面的成员只要发现比a[2]小的就与他的位置交换 这部做完之后数组就应 该是这个样子: a[0] a[1] a[2] a[3] a[4] 4,用a[3]与后面的(a[4]~a[4]里面的每一个成员比较即是说: a[3]~a[4]比较)当后面的成员只要发现比a[2]小的就与他的位置交换 这部做完之后数组就应 该是这个样子: a[0] a[1] a[2] a[3] a[4] 循环就是 写成这个样子的哦: for(i=0;i<4;i++) for(j=i+1;j<5;j++)if(a[i] {c=a[i];a[i]=a[j];a[j]=c;}(这个复合语句表示交换a[i]与a[j]进行交换)你把这个 循环好好的分析一下,当i=0 j可以取(1 2 3 4)那if是不是就是a0跟a1—a4之间的所有进行比较并且交换。其他的以此类推。 最后是不是要对排好序的数组进行输出: for(i=0;i<5;i++)printf(“%d”,a*i+); 6、排序(选择法)比如说 对于5个数字排序,首先要把5个数字放到一个一维的数组里面去 所以编程的前几句为:int a[5] for(i=0;i<5;i++)scanf(“%d”,&a*i+); 那接下来就是排序了,为了方便理解就将数组实际化:比如 a[5]里面放着{7,9,0,12,3}那画图出来就是 a[5] a[0] a[1] a[2] a[3] a[4] 那我们排序的方法是这样的采用这样几步: 1,先把a[0]的下标储存起来,即赋值给k,然后用a[0]与后面的比较 (a[1]~a[4]里面的每一个成员比较即是说:a[0]~a[1]比较 a[0]~a[2]比较 a[0]~a[3]比较 a[0]~a[4]比较)当后面的成员只要发现比a[0]小的就把他的下标赋值给k,最后将a[0]和a[k]的位置交换,这步做完之后数组就应该是这个样子: a[0] a[1] a[2] a[3] a[4] 2,先把a[1]的下标储存起来,即赋值给k,然后用a[1]与后面的比较 (a[2]~a[4]里面的每一个成员比较即是说: a[1]~a[2]比较 a[1]~a[3]比较 a[1]~a[4]比较)当后面的成员只要发现比a[1]小的就把他的下标赋值给k,最后将a[1]和a[k]的位置交换 这步做完之后数组就应该是这个样子: a[0] a[1] a[2] a[3] a[4] 3,先把a[2]的下标储存起来,即赋值给k,然后用a[2]与后面的比较 (a[3]~a[4]里面的每一个成员比较即是说:a[2]~a[3]比较 a[2]~a[4]比较)当后面的成员只要发现比a[2]小的就把他的下标赋值给k,最后将a[2]和a[k]的位置交换 这步做完之后数组就应该是这个样子: a[0] a[1] a[2] a[3] a[4] 4,先把a[3]的下标储存起来,即赋值给k,然后用a[3]与后面的比较(a[4]里面的每一个成员比较即是说: a[3]~a[4]比较)当后面的成员只要发现比a[3]小的就把他的下标赋值给k,最后将a[3]和a[k]的位置交换 这步做完之后数组就应该是这个样子: a[0] a[1] a[2] a[3] a[4] 循环就是 写成这个样子的哦: for(i=0;i<4;i++) {k=i;for(j=i+1;j<5;j++) if(a[i] k=j;if(k!=i) {c=a[i];a[i]=a[j];a[j]=c;} }(这个复合语句表示交换a[i]与a[j]进行交换)把这个循环好好的分析一下,当i=0, j可以取(1 2 3 4)那if是不是就是a0跟a1—a4之间的所有进行比较并且交换。其他的以此类推。 最后是不是要对排好序的数组进行输出: for(i=0;i<5;i++)printf(“%d”,a*i+); 四.寻找特殊的数字或解应用题:输出a到b之间的所有的具有某个特点的数字 模版: int n,a,b;(注意:如果是分数或者小数a和b就是float类型) scanf(“%d,%d”,&a,&b);(从键盘输入查找的范围;如果题目已经给 了范围,就在循环的时候直接带值,这句话就不需要了。注意如果是float类型就是%f。注意如果运行程序,在输入数据验证的时候注意格式要匹配)for(n=a;n<=b;n++)(如果题目已经给了具体的范围,那么这里就根 据题目把a和b换掉){if(条件)(注意:这句话是这类题目的核心,有时候也许不是一 句话,这句话放在这的意思是判定是否是特殊数字)printf(“%d”, n);(注意:如果是float类型就是%f)} 1、输出3到1000之间的所有素数 分析:在做本题之前,先要搞明白什么是素数,它又是如何判定的。补充: 素数 又叫质数,如果一个数只能被1和它本身整除,那么我们就说它是素数。分析:既然一个素数只可以被1和它本身整除,那么当我们判断一个数n是不是素数的时候,就用这个数去除2到(n-1),一旦我们发现可以整除这个区间的某一个数,那么我们就不再去除别的数了,因为在2到(n-1)这个范围内,n可以整除其中的某一个数,那么就肯定不是素数。这个过程需要一个循环和停止循环的break来实现。继续分析,当我们在2到(n-1)这个范围内找不到n可以整除的数,那么就说明这个数是素数,那么我们就判断上面的循环时候做完了,如果中间就跳出循环,则说明不是素数,反之,如果做完了,那么就是素数。P判断能否整除,就是求余看是否为0,则程序如下: int n;(n是要判断的数,具体根据题意赋值或从键盘输入)for(i=2;i 上面的循环有没有做完)本题分析:只要用上面的程序替换掉模版的那个if就可以了,注意这里不再需要else了,因为题目只要求输出素数,输出语句也只需要一句,则程序如下: int n,i;for(n=3;n<=1000;n++){ for(i=2;i 2、输出1到100之间的所有同构数 分析:在做本题之前,先要搞明白什么是同构数,它又是如何判定的。补充: 同构数 如果一个数出现在自己的平方数的右边,那么我们就说它是同构数。分析:既然一个同构数会出现在它自己的平方数的右边,那么当我们判断一个数n是不是同构数的时候,先要做的就是求出这个数的平方,然后该怎么判断是不是出现在右边呢?我们人有眼睛,可以直接看,但是电脑不长眼睛的,它看不到,它只能分析,那么它怎么分析呢?1到100之间的所有数只有一位或者两位,那么我们在取平方数右边的时候,只要取这个平方数的最右边的一位或者两位,与我们的数进行比较,看是否一样,如果一样就是同构数,反之就不是。怎么取一个数的最右边一位或者两位呢?求余!!一个数对10求余就是取它的最右边一位,也就是个位;如果对100求余就是取它的最右边两位,也就是十位和个位。则程序如下: int n;(n是要判断的数,具体根据题意赋值或从键盘输入)if(n*n%10==n|| n*n %100==n)printf(“%d is a isomorphic number!n”,n);本题分析:直接带模版,则程序如下: int n;for(n=1;n<=100;n++){ if(n*n%10==n|| n*n %100==n)printf(“%d is a isomorphic number!n”,n);}(这里的大括号实际是可以去掉的,不去掉也没有关系) 3、输出1到1000之间的所有回文数 分析:在做本题之前,先要搞明白什么是回文数,它又是如何判定的。补充: 回文数 如果一个数字正读和倒读一样,那么这个数字就是回文数。例如:98789, 这个数字正读是98789,倒读也是98789,所以这个数字就是回文数。 分析:既然一个回文数正读和倒读一样,也就是它的最高位和最低位一样,它的次高位和次低位一样,那么当我们判断一个数n是不是回文数的时候,先要确定这个数有几位,才可以确定谁与谁进行比较,然后确定这个数每一位都是谁。1到1000之间的数,除了1000其余最多三位数,显然1000不是回文数,先不考虑,怎么确定这个数是几位呢?如果它的百位是0,那么肯定不是三位数,如果百位和十位都是0,那么肯定是一位数,我们知道一位数肯定都是回文数;对于一个两位数,只要判断它的个位和十位是不是一样就可以了,如果一样,那么肯定是回文数;对于一个三位数只要判断他的个位和百位就可以了,如果一样就是回文数。求一个最多是三位数的每一位,就是将这个数对10求余得到个位;然后这个数除以10,再对10求余得到十位;最后除以100得到百位。则程序如下: int n;(n是要判断的数,具体根据题意赋值或从键盘输入)if(n>0&&n<10)printf(“%d is a huiwen number!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a huiwen number!n”,n);} else if(n/100==n%10)printf(“%d is a huiwen number!n”,n);本题分析:只要用上面的程序替换掉模版的那个if就可以了,则程序如下: int n;for(n=1;n<=1000;n++){ if(n>0&&n<10)printf(“%d is a huiwen number!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a huiwen number!n”,n);} else if(n/100==n%10)printf(“%d is a huiwen number!n”,n);} 4、输出1到1000之间的所有完数 分析:在做本题之前,先要搞明白什么是完数,它又是如何判定的。补充: 再做完数之前先讲怎么求两个数的最大公约数和最小公倍数。 分析:假设求a和b两个数的最大公约数和最小公倍数,并且a>b,如果a0&&n<10)printf(“%d is a wanshu!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a wanshu!n”,n);} else if(n/100==n%10)printf(“%d is a wanshu!n”,n);本题分析:只要用上面的程序替换掉模版的那个if就可以了,则程序如下: int n;for(n=1;n<=1000;n++){ if(n>0&&n<10)printf(“%d is a wanshu!n”,n);else if(n/100==0){if(n/10==n%10)printf(“%d is a wanshu!n”,n);} else if(n/100==n%10)printf(“%d is a wanshu!n”,n);} 5、输出1到999之间的所有水仙花数 分析:在做本题之前,先要搞明白什么是水仙花数,它又是如何判定的。补充: 水仙花数 如果一个三位数的各个位数字的立方和等于该数字本身,那么这个数就是水仙花数。例如:153,1*1*1+5*5*5+3*3*3=153,所以这个数字就是回文数。分析:既然一个水仙花数的各个位数字的立方和等于该数字本身,那么当我们判断一个数n是不是水仙花数的时候,先要求出各个位数字,然后求其立方和,判断是不是和该数本身一样,如果一样就是水仙花数,否则就不是。求一个三位数的每一位,就是将这个数对10求余得到个位;然后这个数除以10,再对10求余得到十位;最后除以100得到百位。则程序如下: int n,a,b,c;(n是要判断的数,具体根据题意赋值或从键盘输入)a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c==n)printf(“%d is the shuixianhua number!n”,n);本题分析:只要用上面的程序替换掉模版的那个if就可以了,则程序如下: int n;for(n=1;n<=1000;n++){ a=n/100;b=n/10%10;c=n%10;if(a*a*a+b*b*b+c*c*c==n)printf(“%d is the shuixianhua number!n”,n);} 6、用一张100的钱换100张零钞,假设面额有5元,3元,1/2元三种,问有多少种方法? 分析:这是一道解方程组的题,根据我们的小学知识可以列出方程组,其中有三个未知数,所以应该是三层嵌套循环,再分析题目我们知道1/2的张数只能是偶数张,则程序为: int i,j,k,n;for(i=0;i<=20;i++)for(j=0;j<=33;j++)for(k=0;k<=100;k++)if(5*i+3*j+k/2==100&&i+j+k==100&&k%2==0){ printf(“%d,%d,%dn”,i,j,k);n++;} printf(“There are %d changes!n”,n); 7、爱因斯坦阶梯问题。设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问满足条件的最少阶梯数是多少? 分析:这道题的实质是找满足上述条件的数,而且要最小的,那么我们就写一个循环,循环变量从最小的数开始递增,分析题目我们可知从7开始递增即可(如果不从7,从1开始也是可以的),一旦满足上述条件,循环变量就不需要增加了,输出循环变量即可,所以我们选择while循环结构,当不满足上述条件我们就做循环变量的递增,如果满足就输出,则程序为: int n=7;while(!(n%2==1&&n%3==2&&n%5==4&&n%6==5&&n%7==0)){ n++;} printf(“%dn”,n); 8、求一句英文所含有的单词数。 分析:一句英文里面每个单词之间都用空格隔开,所以我们只要数空格的个数即可,但是注意最后一个单词后面是没有空格的。一句英文肯定要存放在数组中,我们选择简单的一维数组。从字符数组中的第一个元素开始查看,先查看第一个元素,如果不是空格,那就证明是第一个单词,单词个数加一,然后一直做循环,直到遇到空格,就说明这个单词结束了,然后再判断是不是到数组的结尾,如果没有就继续查找,直到数组结束为止,则程序如下: #include } 五.图案:输出n行的具有规律的字符,组成我们所想要的图案。模版: int i,j,k;for(i=0;i 具体对待)for(k;;)printf(“%d”,);(注意:如果是char类型就是%c)} 1、输出下列图案 * *** ***** printf(“ There are %d words.n”,num);******* ********* ******* ***** *** * 分析:这种图案一般我们会将其分为两部分,从最多一行隔开,分为上下两个部分,先输出上面的图案,再输出下面的。通过分析我们可以发现每行既要输出空格,又要输出*,所以循环体里面需要两个循环,循环体里面的循环变量的控制最好和外层的控制行数的循环变量相关联。我们用i控制行数,用j控制每行的空格数,用k控制每行的*数,通过观察我们发现如下规律: i j k 0 4 1 1 3 3 2 2 5 3 1 7 4 0 9 那么,i+j=4,k均为奇数,再分析发现k=2i+1,每行输完还要输出换行,则程序如下: int i,j,k;for(i=0;i<5;i++){ for(j=0;j<4-i;j++)printf(“ ”);for(k=0;k<2*i+1;k++)printf(“*”);printf(“n”);} for(i=0;i<4;i++){ for(j=0;j 2、输出下列图案 A BBB CCCCC DDDDDDD EEEEEEEEE FFFFFFF GGGGG HHH I 分析:这种图案一般我们会将其分为两部分,从最多一行隔开,分为上下两个部分,先输出上面的图案,再输出下面的。通过分析我们可以发现每行既要输出空格,又要输出字母,所以循环体里面需要两个循环,循环体里面的循环变量的控制最好和外层的控制行数的循环变量相关联。我们用i控制行数,用j控制每行的空格数,用k控制每行的字母数,通过观察我们发现如下规律: i j k 0 4 1 1 3 3 2 2 5 3 1 7 4 0 9 那么,i+j=4,k均为奇数,再分析发现k=2i+1。每行的字母相同但是和上下行的不相同,观察发现字母是按照顺序递增的,那么我们就先把字母存放在一个变量里面,然后在输出每行所需的字符之后,改变字母。每行输完还要输出换行,则程序如下: int i,j,k;char c=’A’;for(i=0;i<5;i++){ for(j=0;j<4-i;j++)printf(“ ”);for(k=0;k<2*i+1;k++)printf(“%c”,c);c++;printf(“n”);} for(i=0;i<4;i++){ for(j=0;j 3、输出下列图案 121 12321 1234321 123454321 1234321 12321 121 1 分析:这种图案一般我们会将其分为两部分,从最多一行隔开,分为上下两个部分,先输出上面的图案,再输出下面的。通过分析我们可以发现每行既要输出空格,又要输出数字,所以循环体里面需要两个循环,循环体里面的循环变量的控制最好和外层的控制行数的循环变量相关联。我们用i控制行数,用j控制每行的空格数,用k控制每行的数字数,每行的数字还不相同,观察发现数字是按照顺序递增递减的,那么我们输出数字的循环又要分为两个循环,继续观察我们发现每次输出的数字和循环变量k有关,通过观察我们发现如下规律: i j k 0 4 1 1 3 2 2 2 3 3 1 4 4 0 5 那么,i+j=4,k均为奇数,再分析发现k的递增从1开始到i+1为止,递减是从i开始到1为止。每行输完还要输出换行,则程序如下: int i,j,k;for(i=0;i<5;i++){ for(j=0;j<4-i;j++)printf(“ ”);for(k=1;k<=i+1;k++)printf(“%d”,k);for(k=i;k>0;k--)printf(“%d”,k);printf(“n”);} for(i=0;i<4;i++){ for(j=0;j0;k--)printf(“%d”,k);printf(“n”);} 4、输出九九乘法表 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 „„ „„ 分析:如果用i表示行,j表示列,那么每行输出i个式子,分析发现每个式子可以用j*i表示。每行输完还要输出换行,则程序如下: int i,j;for(i=1;i<10;i++){ for(j=1;j<=i;j++)printf(“%d*%d=%dt”,j,i,j*i);printf(“n”);} 5、输出杨辉三角的前10行 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 7 21 35 35 21 7 1 8 28 56 70 56 28 8 1 9 36 84 126 126 84 36 9 1 分析:如果用i表示行,j表示列,那么每行输出i个数字,分析发现除了两头的数字为1以外,其余的每个数字每个数字等于上一行的左右两个数字之和,所以用二维数组比较简单。每行输完还要输出换行,则程序如下: int a[10][10],i,j;for(i=0;i<10;i++){ for(j=0;j<=i;j++){ if(i==j||j==0)a[i][j]=1;else a[i][j]=a[i-1][j]+a[i-1][j-1];printf(“%dt”,a[i][j]);} printf(“n”);} 五.字符串操作: 1.函数的原型说明为int chrn(char *s,char c);,其功能是测试c在s中出现的次数,编制该函数并用相应的主调函数对其进行测试。#include 程序语言学习的总结 通过两年的学习,我们基本上掌握了C语言,C++和C#三个编程课程。对于程序设计语言的学习,分为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。课程上的安排除了课堂讲授以外,学院设有专门课堂到实验室进行上机操作实验。 要利用c语言学到的知识编写c语言程序,即把c语言作为工具,通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。通过上机实验来验证自己编制的程序是否正确。在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对c语言的理解和程序开发能力。 在原有的C语言的基础知识之上,初步接触C++时感到比较简单易懂。但随着之后的步步深入学习,C++的不同之处以及其优势逐。从第二章引入了C++简单程序的设计。包括一些C++语言的概述,基本数据类型和表达式,数据的输入与输出,算法的基本东芝结构,以及自定义类型数据等知识。此部分多与C语言相似。之后又学习了函数的相关内容,这里学到了新的知识要点----函数重载。该内容尤其在现在做课程设计的时候尤为重要。类是C++语言的精华之所在,在学习中,我感觉到类和C语言中的结构体有很大的相似之处,但在类中的构造函数、拷贝构造函数以及类的组合,经常弄混淆一些概念。在这之后又学习了类的继承与派生。这使得类与类之间形成了树状图的模型,各子类可以访问到父类的一些数据成员,同样也实现了数据的之间的“共享”。我个人在编写派生类的构造函数和拷贝构造函数时,感觉很不熟练,后面章节的多态性主要学习了运算符的重载,其本质就是函数的重载。 在学习C#中,类是具有相同特性和行为的对象的抽象。它使用关键字class声明的。在c#中仅允许单个继承,类只能从一个基类继承实现。但是一个类可以实现一个以上的接口。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等局可以看对象,它不仅表示具体的事物,还能表示抽象的规则、计划或者事件。接口只是包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的。接口可以是命名空间或类的成员,并可以包含下列成员:每个C#可执行文件都有一个入口—Main方法:static void Main()修饰符public表示可以在任何地方访问该方法。所以可以在类的外部调用它。修饰符static表示方法不能在类的实例上执行,因此不必先实例化类在调用。在变量声明时:变量是类或者结构中的字段,如果没有显示初始化,创建这些变量时,其值就是默认的0。变量是方法的局部变量就必须在代码中显示初始化,之后才能在语句中使用它们的值。 课堂上要讲授许多关于语法规则,要使用这些工具解决问题,通过多次上机练习,对于语法知识有了更深刻的认识,在理解的基础上就会自然而然地掌握。一个程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。通过上机实验,熟练地掌握开发环境,为以后真正编写计算机程序解决实际问题打下基础。 #include(stdio.h) main() { int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0}; char again='y'; while(again=='y'){ srand((int)time(0)); while(i4){ k=(int)rand()%10; for(j=0;ji;j++)if(k==question[j]){ k=-1;break;} if(k==-1)continue;question[i]=k;i++;}/*while i*/ for(i=8;i0;i--)/*还有8次机会*/ { A=0;B=0;printf(“n你还剩下%d次机会。”,i); printf(“n请输入四个0-9之间的数字,中间用空格隔开n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]); for(j=0;j4;j++) for(k=0;k4;k++) { if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/ if(A==4){ again='0'; printf(“n你赢了,还继续猜吗?(y/n)”); while(again!='y'&&again!='n') scanf(“...%c”,&again);break;}/*if*/ printf(“n%dA%dB”,A,B);if(i==1){ again='0'; printf(“n你输了,正确答案是”); for(j=0;j4;j++) printf(“%dt”,question[j]); printf(“n还继续吗?(y/n)”); while(again!='y'&&again!='n')scanf(“%c”,&again); printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感谢您玩这个游戏。”);}第二篇:Fortran语言复习大纲
第三篇:编程小结
第四篇:编程语言学习心得
第五篇:C语言编程