2007年3月30日 第三次pascal试验课 上机内容是循环结构程序设计
以下是我课上写的几段代码,文件名就是课本上题目的位置,例如P14_1_2.PAS即为第14页的习题1.2。
P87_4_4.PAS
PROGRAM factorial(input,output);
{计算1到35的阶乘并逐行输出}
VAR
{n!是个很大的数,用整型会造成溢出,应当声明为实型}
fac:real;
i,j:integer;
BEGIN
FOR i:=1 TO 35 DO
BEGIN
{置初值}
fac:=1;
{求i!并输出}
FOR j:=1 TO i DO fac:=fac*j;
writeln('The factorial of ',i:2,' is ',fac)
END
END.
(*经测试发现使用TurboPascal编译此代码后,计算到34!时发生溢出(error code 205),但使用FreePascal编译此代码一切正常!*)
{计算1到35的阶乘并逐行输出}
VAR
{n!是个很大的数,用整型会造成溢出,应当声明为实型}
fac:real;
i,j:integer;
BEGIN
FOR i:=1 TO 35 DO
BEGIN
{置初值}
fac:=1;
{求i!并输出}
FOR j:=1 TO i DO fac:=fac*j;
writeln('The factorial of ',i:2,' is ',fac)
END
END.
(*经测试发现使用TurboPascal编译此代码后,计算到34!时发生溢出(error code 205),但使用FreePascal编译此代码一切正常!*)
P87_4_6.PAS
PROGRAM calculatepi(input,output);
{求pi的值}
VAR
pi,sum,term:real;
n:integer;
BEGIN
sum:=0;
FOR n:=1 TO 10000 DO
BEGIN
term:=1/(4*n-3)-1/(4*n-1);
sum:=sum+term
END;
pi:=4*sum;
writeln('the value of pi is ',pi)
END.
{求pi的值}
VAR
pi,sum,term:real;
n:integer;
BEGIN
sum:=0;
FOR n:=1 TO 10000 DO
BEGIN
term:=1/(4*n-3)-1/(4*n-1);
sum:=sum+term
END;
pi:=4*sum;
writeln('the value of pi is ',pi)
END.
P88_4_10.PAS
PROGRAM daffodil(input,output);
{求100到999内的水仙花数}
VAR
num,num1,num2,num3:integer;
BEGIN
FOR num:=100 TO 999 DO
BEGIN
{读取百位数字}
num1:=trunc(num/100);
{读取十位数字}
num2:=trunc((num-num1*100)/10);
{读取个位数字}
num3:=num-num1*100-num2*10;
{如满足公式则判断其为水仙花数并输出它}
IF sqr(num1)*num1+sqr(num2)*num2+sqr(num3)*num3=num
THEN writeln(num:3)
END
END.
{求100到999内的水仙花数}
VAR
num,num1,num2,num3:integer;
BEGIN
FOR num:=100 TO 999 DO
BEGIN
{读取百位数字}
num1:=trunc(num/100);
{读取十位数字}
num2:=trunc((num-num1*100)/10);
{读取个位数字}
num3:=num-num1*100-num2*10;
{如满足公式则判断其为水仙花数并输出它}
IF sqr(num1)*num1+sqr(num2)*num2+sqr(num3)*num3=num
THEN writeln(num:3)
END
END.
P88_4_21.PAS
PROGRAM cosx(input,output);
{计算cos(x)的值}
CONST
eps=1e-5;
VAR
x,term,sum:real;
n:integer;
BEGIN
{读入x值}
readln(x);
writeln('x=',x:0:5);
{置初值}
n:=0;
term:=1;
sum:=1;
{计算cos(x)的值直到结果精确到0.00001}
REPEAT
n:=n+2;
term:=-term*sqr(x)/n/(n-1);
sum:=sum+term
UNTIL abs(term)<eps;
{以5位小数四舍五入输出计算结果}
writeln('cos(x)=',sum:0:5)
END.
(*最后以5位小数四舍五入输出结果是因为其精确度为0.00001,这样输出可以避免科学计数法在显示上的弊端,大大增强了结果的可读性。例如当计算cos(pi/2)时输出结果为0.00000,但如果不以5位小数四舍五入输出结果则会显示为6.321469515849048E-009*)
{计算cos(x)的值}
CONST
eps=1e-5;
VAR
x,term,sum:real;
n:integer;
BEGIN
{读入x值}
readln(x);
writeln('x=',x:0:5);
{置初值}
n:=0;
term:=1;
sum:=1;
{计算cos(x)的值直到结果精确到0.00001}
REPEAT
n:=n+2;
term:=-term*sqr(x)/n/(n-1);
sum:=sum+term
UNTIL abs(term)<eps;
{以5位小数四舍五入输出计算结果}
writeln('cos(x)=',sum:0:5)
END.
(*最后以5位小数四舍五入输出结果是因为其精确度为0.00001,这样输出可以避免科学计数法在显示上的弊端,大大增强了结果的可读性。例如当计算cos(pi/2)时输出结果为0.00000,但如果不以5位小数四舍五入输出结果则会显示为6.321469515849048E-009*)
P89_4_28.PAS
PROGRAM prime(input,output);
{求1-100之间的素数}
VAR
{flagnum用来标示当前数是否为素数}
i,num:integer;
flagnum:boolean;
BEGIN
{判断2到100中的数那些是质数}
FOR num:=2 TO 100 DO
BEGIN
{置初值}
flagnum:=true;
i:=2;
{用num除以i到round(sqrt(num)),如果除不尽flagnum保持为真}
WHILE flagnum AND (i<=round(sqrt(num))) DO
BEGIN
IF num MOD i=0
THEN flagnum:=false;
i:=i+1
END;{WHILE}
{如果flagnum保持为真(即为素数)则输出这个数}
IF flagnum
THEN writeln(num:2,' is a prime number ...')
END{FOR}
END.
{求1-100之间的素数}
VAR
{flagnum用来标示当前数是否为素数}
i,num:integer;
flagnum:boolean;
BEGIN
{判断2到100中的数那些是质数}
FOR num:=2 TO 100 DO
BEGIN
{置初值}
flagnum:=true;
i:=2;
{用num除以i到round(sqrt(num)),如果除不尽flagnum保持为真}
WHILE flagnum AND (i<=round(sqrt(num))) DO
BEGIN
IF num MOD i=0
THEN flagnum:=false;
i:=i+1
END;{WHILE}
{如果flagnum保持为真(即为素数)则输出这个数}
IF flagnum
THEN writeln(num:2,' is a prime number ...')
END{FOR}
END.
2007年4月8日 sch