请您留下宝贵的建议吧:)
广西百色高中欢迎您!

| 网站首页 | 学校概况 | 软件下载 | 图片中心 | 雁过留声 | 视频资源 | 校长信箱 | 内 部 网 |
| 同 学 录 | 网络办公 | 教学课件 | 优秀教案 | 试卷下载 | 教学素材 | 教学论文 | 电子图书 |

 
您现在的位置: 广西百色高中校园网 >> 学校概况 >> 学生频道 >> 信息技术 >> PASCAL教程 >> 文章正文 用户登录 新用户注册
   
   

PASCAL习题          【字体:
PASCAL习题
作者:仔仔    文章来源:本站原创    点击数:    更新时间:2006-9-8

第一题:下列哪些常量是对的,哪些是错误的,错在哪?

Const

a=30;

b=a;

b=a+1;

c=true and false

d=2,3

f,g=a;

解:1.常量定义不可以出现字母的赋值,如:B=a;B=a+1;

2.定义的数值只可以唯一。如 D=2,3则为非法。

3.常量只可以一个一个定义。如F,g=3为非法,更不用说 F,g=a.

 

第二题:下面的表达式,哪些是正确的,哪些是错误的;正确的请求出表达式的值,错误的指出其错误。

(其中L为整型变量,R为实型变量)

1round(L) and round(L+1)

2round(L)round(L+1)

3odd(L) or odd(L+1)

4round(L/r) mod 5

解:1.大家知道round()是取四舍五入的标准函数.odd()是判断奇偶数的函数。

    2.and or not 只能连接布尔型常量truefalse.并且得到布尔型常量。 

      而比较符如>,<,<>odd()函数等也可以得到布尔型常量.

所以:1。错误

      2true

      3true

      4。小于5大于等于0的整数

 

第三题:将下列写成pascal语言的表达式。

(1) Ma+b

(2)tg2(x/2)/(a-x)

          a+3

(3)   -------------

       4/(b+1)+c+d 

解:这一题很简单,只要知道括号的运用一般就可以迎刃而解,并且要知道pascal中没有直接的次方函数。正切的函数为tan(),其它三角函数可以通过正切来转化。如sin,cos,ctg等。

1S:=1;for i:=1 to (a+b) do S:=S*M;M:=S;

2tan(x/2)*tan(x/2)/(a-x)

3(a+3)/((4/b+1)+c+d)

 

第四题:完善下列程序:

问题:给出半径R=100,高H=30,求圆周长、圆面积、圆柱全面积。

源程序:

  program lx1(input,output);

  var

    (1):real;

  begin

    len:=2*pi*r;

    s:=(2);

    qs:=len*h+2*s;

    writeln('len=',len,'s=',sm,'qs=',qs);

  end.

解:我们可以看到变量pi,r,s,qs,len,h均未定义。则(1)为pi,r,s,qs,len,h

    由圆面积公式可以很容易得到(2):pi*r*r

    注:这一题题目有错,pi,r,h变量未定义。同学们可以自行加上,但不可以不加。

    如在begin下加

    pi:=3.1415926;

    r:=100;

h:=30;

 

第五题:编写一程序,当程序执行时,输入以秒为单位的时间,输出形式为:小时::

解:这一题用到两个标准函数:moddiv,mod指取余,div指取整商。

puts表输入,用hours表小时,用minutes表分钟,用seconds表秒。

程序如下:

    program name;

    var puts,hours,minutes,seconds:integer;

    begin

      read(puts);

      hours:=puts mod 3600;

      puts:=puts div 3600;

      minutes:=puts mod 60;

      seconds:=puts div 60;

      writeln(hours,':',minutes,':',seconds)

    end.  

同学们可以看到puts是输入变量,也是临时变量,变了两次值,仔细想想是如何变化的。

 

第六题:编写一程序,输入一个三位数的正整数,输出时反向输出。如:输入456,输出654

解:这一题如果学了数组很简单,没有的话就要用moddiv函数,请同学们在理解上一题的

基础上看下面的程序。

    program name;

    var three:integer;

    begin

      read(three);

      for i:=1 to 3 do

        begin

         write(three mod 10);

         three:=three div 10;  

        end; 

    end.

本程序用到一个for循环,指循环执行三次。同学们想一想最后three的值是什么?对了!是0

 

第七题:编写一个程序,输入两个实数a,b,求a,b的乘积。(尤其当a,b两数比较大时,看一下输出结果。)

解:这一题主要是范围问题。

    program name;

    var a,b:real;

    begin

      read(a,b);

      write(a*b);

    end.

虽然实数范围很大可达到10-38--10+38之间,但更大则会:Floating point overflow.

 

第八题:下面程序或程序段的执行结果是什么?

1program sumofpower(input,output);

     const n=4;

     var

        X,power,I,sum:integer;

     begin

        for X:=1 to n do

            begin

               power:=1;

               for I :=1 to x do

                  Power:=power*x;

               sum:=sum+power;

            end;

         writeln(sum);

     end.

2sum:=0.0

     for counter:=7 downto 4 do

         case counter of

         1,4,7:sum:=sum+1;

         2,3,6:;

         0,5:sum:sum+2;

         end;

     writeln('sum=',sum:5:2);

解:首先,pascal语言的大小写一样。而且当一个数值变量规定以后,初始值为0,这就是为何程序中sum未赋值就用。(1)求出xx次方,再累加.(2)题目没有写完,同学们自己加上.(2)case语句的形式一定要住,在这一点上不要眼高手低.注意只有end没有begin,且要注意':'的位置.case语句是指选择语句.即表达式的值若和冒号前相同则运行冒号后的语句.注意downtoto的不同.

(1)288

(2)sum=4.00

 

第九题:编写一个程序,输出三个整数中最大的数.

:虽然此题可以用三个变量来比较并交换,但由于只需输出一个数,于是只要用一个动态变量来储存最大数即可.

程序如下:

     program name;

     var i,max,temp:integer;

     begin

       max:=-maxint;

       for i:=1 to 3 do

       begin

       read(temp);

       if temp>max then max:=temp;

       end;

     end.

:maxint为保留字,是最小整数,同学们可以试一试它是多少.

 

第十题:编写一个程序,输入三个数,按从大到小的顺序打印出来。

解:由于题目指定三个数,所以题目就变得很简单。只要设三个变量就可以了,然后就比较大小。这个很简单,相信同学们一定会。同学们在学习的时候注意体会write()语句的表达方式。有时候' ' 会很好用。

程序如下:

   program name;

   var i,max,a,b,c:integer;

   begin

     read(a,b,c);  

       for i:=1 to 3 do

       begin

         max:=-maxint;

         if a>=max then max:=a;

         if b>=max then max:=b;

         if c>=max then max:=c;

         write(max,' ');

         if a=max then a:=-maxint;

         if b=max then b:=-maxint;

         if c=max then c:=-maxint; 

       end;

   end.

同学们可以想一想,如果没有指明是几个数,不用数组怎么做?

 

第十一题:输入一个不多于5位数的下整数,求出它是几位数,并打印出每位的数字.

:同学很容易就能想到要用moddiv函数,可见这两个函数运用率还是很高的,学到以后就知道,这一题非常重要,同学们一定要好好理解,并学会触类旁通.

程序如下:

   program name;

   var readin,wei,i,j:integer;

   begin

     readln(readin);

     i:=10000;

     wei:=5;

     while (readin div i)=0 do

     begin

       wei:=wei-1;

       i:=round(i/10);   

     end;

     writeln(wei); 

     for j:=1 to wei do

     begin

       write(readin div i);

       readin:=readin mod i;

       i:=round(i/10)    

   end.

同学注意我用了一个round()函数.想想如果不要会出现什么结果?

 

第十二题:五分币和二分币共有M,总金额为N分,写一个程序计算五分币和二分币各有多少枚?将结果输出。

解:这一题不要想单纯用计算机语言来描述,不可能。这是一题解方程题。

   { x+y=M       { x=(N-2M)/3

   |        =>   |

   { 5x+2y=N     { y=M-x

程序如下:

  program name;

  var N,M,wu:integer;

  begin

    read(M,N);

    wu:=(N-2M)/3;

    write(wu,' ',M-wu)

  end.

 

第十三题:写一个程序找出31000之间的全部质数。

解质数的方法有很多种,在这里介绍一种最简单也是繁的。注意这一题中判断是否为质数用了哪几个函数。

程序如下:

   program name;

   var i,j:integer;

       judge:boolean;

   begin

     for i:=3 to 1000 do

     begin

       judge:=true;

       for j:=1 to trunc(sqrt(i)) do

       if (i mod j)=0 then judge:=false;

       if judge then write(i,' ')

     end;

   end.

这里引入了一个判断变量judge来测试i是否为质数。sqrt()函数为求完全平方数的标准函数,trunc()函数是取整函数。为什么说为种算法繁呢?同学可以想一想如果将1000改为10000100000或者更多,会出现什么情况?

第十四题(征求更优解,不允许带数组入内):写一个程序,模拟袖珍计算器的加、减、乘、除四则运算。该程序能读入数据;并按算式计算出结果。如当你在终端键盘上打入:

     3.5+0.7*10=

后,程序将显示出结果10.5,且把它输出。

解:这一题有一定的难度。猛一看不知如何下手。因为计算必须得遵循先乘除后加减的法则。这给编程带来一定的难度。但经过分析后发现,任一个算式都是由数字和运算符号交替产生的。且结束控制符号可以让"="来代替,所以我们可以通过对运算符号的判断来决定先过行哪一个运算。不知道是我想错了还是怎么,这一题的难度并不适合初学者,同学们如果可以理解就好,如果不能够理解,以后练习多了慢慢就会知道。这里牵涉到一个将字符类型的数转变为实数的过程.注意我是怎么转化的.当然,如果同学们有更简单的方法,可以告诉我.

程序如下:

program name;

var i,j:integer;

    total,first,second1,second2:real;

    fu,fu2:char;

function reads:real;

var i,n:integer;

    j,k:real;

begin

  read(fu2);while fu2=' ' do read(fu2);

  j:=0;

  while (fu2<>'+') and (fu2<>'-') and (fu2<>'*') and (fu2<>'/') and (fu2<>'=')do

  begin

    if fu2<>'.' then

    begin

    j:=10*j+ord(fu2)-ord('0');

    read(fu2)

    end

    else if fu2='.' then

    begin

      i:=0;

      read(fu2);

      repeat

        i:=i+1;

        k:=1;

        for n:=1 to i do

        begin

          k:=k/10;

        end;

        j:=j+(ord(fu2)-ord('0'))*k;

        read(fu2);

      until (fu2='+') or (fu2='-') or (fu2='*') or (fu2='/') or (fu2='=');

    end;

  end;

  reads:=j;

end;

begin

    first:=reads;

    fu:=fu2;

    while fu<>'=' do

    begin

      if fu='*' then begin second1:=reads;first:=first*second1;end

      else if fu='/' then begin second1:=reads;first:=first/second1;end

      else if fu='+' then

      begin

        second1:=reads;

        while (fu2='*') or (fu2='/') do

        begin

          if fu2='*' then begin second2:=reads;second1:=second1*second2;end;

          if fu2='/' then begin second2:=reads;second1:=second1/second2;end;

        end;

        first:=first+second1;

      end

      else if fu='-' then

      begin

        second1:=reads;

        while (fu2='*') or (fu2='/') do

        begin

          if fu2='*' then begin second2:=reads;second1:=second1*second2;end;

          if fu2='/' then begin second2:=reads;second1:=second1/second2;end;

        end;

        first:=first-second1;

      end;

      fu:=fu2;

    end;

   write(first:8:2);

end.

因为它没有数组,所以理解起来很有困难。正因为如此,同学更要好好理解,为以后用数组来做打好基础。

 

第十五题:写一个程序找出x2+2=y3(1<=x,y<=100)所有整数解。

:由于x,y的范围不大,这一题明显用穷举法,实际上也没有更好的方法。

程序如下:

program name;

var x,y:integer;

begin

  for x:=1 to 100 do

   for y:=1 to 100 do

    if x*x+2=y*y*y then

    writeln(x,' ',y);

end.

 

第十六题:写一个程序,判断一个数是否为质数。

解:这一题的解法实际上在第十三题已经得到体现。没有什么困难。

程序如下:

program name;

var reads,i,j:integer;

begin

  j:=0;

  read(reads);

  for i:=2 to trunc(sqrt(reads)) do

  if (reads mod i)=0 then j:=-1;

  if j=0 then write('the number you put if true!')

  else write('false!');

end.

注意:进行循环时是从何处开始的。

 

第十八题:设三段线段长度分别为abc,且a>=b>=c>0,写一个程序,判别给出abc能否组成一个

三角型?

解:只要了解三角型的判别方法,这一题并不难,多用几个if语句而已。

程序如下:

program name;

var a,b,c:integer;

begin

  read(a,b,c);

  if (a+b>c) and (b+c>a) and (c+a>b)

  then writeln('That''s possible!')

  else writeln('That''s impossible!')

end.

这题唯一要注意的就是我在引用" ' "的时候是如何引用的.

 

第十七题:完善下列程序:

1)计算

  {ln|x|+ln|5-x3|             x<-3

  | ______                            _

y=||x+3                       -3<=x<3|5

  |                                _