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

2007年3月30日的第三次Pascal试验课中,重点讲解了循环结构程序设计。以下是课堂上编写的几个小程序代码示例,对应课本不同页码的习题,如P14_1_2.PAS代表第14页的第1.2题,主要涉及Pascal语言中的integer类型、输入输出(input/output)以及FreePascal编译器的应用。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值