1、作业讲解3.13,编写一个程序,输入一个八进制的正整数,把它转换成十进制数后,分别输出八进制的数和十进制的数。例如:365824510,作业讲解3.17,编写一个程序,利用下式计算cosx的近似值,直到最后一项的绝对值小于10-6时为止。,求两个正整数的最大公约数的流程图,程序:求最大公约数,program sum(input,output);var m,n,r:integer; beginwrite( input two numbers: );readln(m,n);r:=m mod n;while r0 do begin m:=n; n:=r; r:=m mod n; end;writel
2、n( Gcd is ,n);readln; end.,百鸡问题,问题:用100元钱买100只鸡。公鸡每只5元,母鸡每只3元,每元三只小鸡。问:如何买,总共有多少种买法?解:设i为公鸡数,j为母鸡数,k为小鸡数,则应满足:i+j+k=100 5i+3j+k/3=100,程序:百鸡问题,program cock(input,output);var i,j,k,count:integer; begincount:=0;for i:=0 to 20 dofor j:=0 to 34 dofor k:=0 to 100 doif (i+j+k=100) and (5*i+3*j+k /3 =100) t
3、hen begincount:=count+1;writeln(i:6,j:6,k:6);end;writeln(total:,count); readln; end.,program cock(input,output);var i,j,k,count:integer; begincount:=0;for i:=0 to 20 dofor j:=0 to 34 dobegink:=100-i-j;if (5*i+3*j+k /3 =100) then begincount:=count+1;writeln(i:6,j:6,k:6);end;end;writeln(total:,count);
4、 readln; end.,问题:求前24项斐波那契序列数,f0=0, f1=0, fn=fn-1 + fn-2,program fibonacci(input,output);var n,f,f1,f2:integer; beginf1:=-1; f2:=1; n:=1;while n=24 dobeginf:=f1+f2;writeln( fibonacci(,n, )=,f);f1:=f2; f2:=f; n:=n+1; end;readln; end.,program fibonacci(input,output);var n,f,f1,f2:integer; beginf1:=-1;
5、 f2:=1; n:=1;for n:=1 to 24 dobeginf:=f1+f2;writeln( fibonacci(,n, )=,f);f1:=f2; f2:=f; end;readln; end.,Program example1(input,output);Var temp,a,b,c:integer; Beginwrite(input three integer numbers: );readln(a,b,c);if ab then begin temp:=a; a:=b; b:=temp; end;if ac then begin temp:=a; a:=c; c:=temp
6、; end;if bc then begin temp:=b; b:=c; c:=temp; end;writeln(output in descending order:,a,b:5,c:5); End.,过程,程序设计中,为了缩短程序,节省内存和减少程序的编译时间,往往把在程序中多次使用的程序段(或称语句序列)定义为一个“过程”。 通过对过程进行定义(说明),使该程序段具有一个名字,称为过程名,这样就可以通过“过程名”来引用相应的程序段。,实现两个变量交换值的过程,Procedure swap(var x,y:integer);Var temp:integer; Begintemp:=x;
7、 x:=y; y:=temp; End;,过程定义,过程是用户(程序员)定义的程序段,一个过程由“过程首部”和“过程分程序”两部分组成;过程分程序由“过程说明部分”和“语句部分(执行部分)”组成,过程的目的是执行某种动作或计算一组值。,过程首部,说明部分,语句部分,过程分程序,Program example1(input,output);Var a,b,c:integer;Procedure swap(var x,y:integer);Var temp:integer;Begin temp:=x; x:=y; y:=temp; End; Beginwrite(input three integ
8、er numbers: ); readln(a,b,c);if ab then swap(a,b);if ac then swap(a,c);if bc then swap(b,c);writeln(output in descending order:,a,b:5,c:5); End.,过程语句,过程语句也称为过程调用语句,通过“过程名”使用一个已定义过程(程序段),过程与程序的区别,过程是程序的子程序。 标志不同。程序的标志是program,过程的标志是procedure。 参数不同。 结束标志不同。程序的结束标志是“ . ”而过程的结束标志是“ ; ”。 运行不同。,全程变量和局部变量,
9、如果一个对象,如常量、变量、过程等,只是在程序的某个部分有意义,则称它为局部量。 在一个过程内部说明的变量、常量等对象,都是局限于该过程的局部量,不允许在该过程之外去使用这些局部量。 全程变量是在程序的说明部分加以说明的,适用于整个程序。 变量可以使用的范围,称为变量的辖域。,Program callprocedure(input,output);Var x,y,z:integer;Procedure p;Var z:integer; Begin z:=x+y+z; write( z=,z:5); End;Procedure q;Beginz:=x+y+z; write( z=,z:5); E
10、nd; Beginx:=2; y:=3; p; p; p;writeln;writeln;q; q; q; writeln; End.,z=23215 z=23215 z=23215z= 5 z= 10 z= 15,变量的初始值,局部变量的初始值是不确定的; 全程变量的初始值是确定的; 全程变量和局部变量在一个过程执行时都起作用,均可以参加运算和操作;在过程执行前后,只有全程变量参加运算。局部变量不存在。,参数,形式参数和实际参数 值参与变参 值参替换与变参替换 值参调用和变参调用,形式参数和实际参数,Procedure swap(var x,y:integer);Var temp:integ
11、er; Begin temp:=x; x:=y; y:=temp; End;,Program parameter(input,output);Var a,b:integer;Procedure modify(var x:integer;y:integer);Beginwriteln( x =, x:2, y =, y:2);x:=x+1; y:=y+3;writeln( x =, x:2, y =, y:2);End; Begina:=1; b:=3;writeln( a =, a:2, b =, b:2);modify(a,b);writeln( a =, a:2, b =, b:2); E
12、nd.,a = 1 b = 3x = 1 y = 3x = 2 y = 6a = 2 b = 3,函数,函数的定义(说明)与过程类似,也是程序中的一个子程序; 过程主要用于执行某种动作或计算一组值;函数主要用于计算并返回一个值。,求和函数,Function fsum(n:integer);Var i,s:integer; Beginif n0 then exit; s:=0;for i:=1 to n do s:=s+i;fsum:=s; End;,编写一个计算半径为r的圆的面积和周长的函数。function area(r:real; var circumference:real):real;
13、const pi=3.14;begincircumference:=2*pi*r;area:=r*r*pi;end;,编写计算半径为5、6、7的圆的面积、周长及三个圆的面积之和。begina1:=area(5,c1);a2:=area(6,c2);a3:=area(7,c3);writeln(total area: ,a1+a2+a3);end;,program ex41(input,output);var a1,a2,a3,c1,c2,c3:real;function area(r:real; var circumference:real):real;const pi=3.14;begincircumference:=2*pi*r;area:=r*r*pi;end; begin maina1:=area(5,c1); a2:=area(6,c2); a3:=area(7,c3);writeln(total area: ,a1+a2+a3:10:2); end.,