PASCAL语法基础 答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Pascal语法基础习题
第一题:下列哪些常量是对的,哪些是错误的,错在哪?
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为实型变量)
(1)round(L) and round(L+1)
(2)round(L)〈round(L+1)
(3)odd(L) or odd(L+1)
(4)round(L/r) mod 5
解:1.大家知道round()是取四舍五入的标准函数.odd()是判断奇偶数的函数。

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

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

错误
2。

true
3。

true
4。

小于5大于等于0的整数
第三题:将下列写成pascal语言的表达式。

(1) M a+b
(2)tg2(x/2)/(a-x)
a+3
(3) -------------
4/(b+1)+c+d
解:这一题很简单,只要知道括号的运用一般就可以迎刃而解,并且要知道pascal中没有直接的次方函数。

正切的函数为tan(),其它三角函数可以通过正切来转化。

如sin,cos,ctg 等。

1。

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

tan(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;
第五题:编写一程序,当程序执行时,输入以秒为单位的时间,输出形式为:“小时:分:秒”
解:这一题用到两个标准函数:mod和div,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。

解:这一题如果学了数组很简单,没有的话就要用mod和div函数,请同学们在理解上一题的
基础上看下面的程序。

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.
第八题:下面程序或程序段的执行结果是什么?
(1)program 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.
(2)sum:=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)求出x的x次方,再累加.(2)题目没有写完,同学们自己加上.(2)的case语句的形式一定要住,在这一点上不要眼高手低.注意只有end没有begin,且
要注意':'的位置.case语句是指选择语句.即表达式的值若和冒号前相同则运行冒号后的语句.注意downto与to的不同.
(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位数的下整数,求出它是几位数,并打印出每位的数字.
解:同学很容易就能想到要用mod和div函数,可见这两个函数运用率还是很高的,学到以后就知道,这一题非常重要,同学们一定要好好理解,并学会触类旁通.
程序如下:
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.
第十三题:写一个程序找出3到1000之间的全部质数。

解质数的方法有很多种,在这里介绍一种最简单也是繁的。

注意这一题中判断是否为质数用了哪几个函数。

程序如下:
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改为10000,100000或者更多,会出现什么情况?。

相关文档
最新文档