[pascal]第三次pascal试验课上机时写的小程序

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编译此代码一切正常! * )

 

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.

 

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.

 

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 * )

 

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.

 

 200748 sch

你可能感兴趣的:([相关]专业课,[语言]Pascal,[属性]源代码文章)