求pascal语言各种类型练习题
∧是逻辑运算符 且 相当于 and
∨是逻辑运算符 或 相当于 or
「是逻辑运算符 非 相当于 not
A: (not a and b) or (c and d or a)
=(false and true ) or (false and false or true)
= false or false
=false
B:not(((a and b) or c)and d)
=not((true or false)and false)
=not(true and false)
=true
同理,C、D算出来也是true
所以选A
and运算:true and true=true, true and false=false, false and false=false
or运算:true or true=true,true or false=true,false or false=false
not运算,它是单目运算符:not true=false,not false=true
我觉得不用死记硬背,and是两个都要是真是才能为真,or是只要有一个为真就为真,not就是反一下
第一题:var
a,b:array[1..1000]of longint;
i,n:longint;
procedure kp(l,r:longint);
var
i,j,mid,t:longint;
begin
i:=l;j:=r;mid:=a[(l+r)div 2];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then
begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
t:=b[i];
b[i]:=b[j];
b[j]:=t;
inc(i);dec(j);
end;
until i>j;
if i<r then kp(i,r);
if l<j then kp(l,j);
end;
begin
read(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n do b[i]:=i;
kp(1,n);
writeln(b[n]);
end.
第二题:
var
n,i,ans,sum:longint;
procedure zhuan(n:longint);
begin
if n=0 then exit
else begin
zhuan(n div 2);
if n mod 2=0 then inc(ans);
if n mod 2=1 then inc(sum);
end;
end;
begin
readln(n);
zhuan(n);
if ans>=sum then writeln('B');
if ans<sum then writeln('A');
end.
第三题:
var
n,i,j:longint;
begin
readln(n);
for i:=1 to n do begin
for j:=1 to i do begin
write('* ');
end;
writeln;
end;
end.
分析:在游戏中每个小朋友拥有的的糖果数是在变化的,用a,b,c三个变量分别存放甲乙丙在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数 div 3(用整除恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的糖果数。
program xpo;
var a,b,c:integer;
begin
a:=50;
b:=43;
c:=13;
a:=a div 3;
b:=b+a;
c:=c+a;
b:=b div 3;
a:=a+b;
c:=c+b;
c:=c div 3;
a:=a+c;
b:=c+b;
writeln('a=',a,'b=':5,b,'c=':5,c);
readln;
readln;
end.
练习2:对某产品征收税金,在产值1万元以上征收税5%;在1万元以下但在5000元以上的征收税3%;在5000元以下但在1000元以上征收税2%;1000元以下的免收税。编程计算该产品的收税金额。
提示:设x为产值,tax为税金,用P表示情况常量各值
P=0: tax=0 (x<1000 )
P=1,2,3,4: tax=x*0.02 (1000<=x<5000 )
P=5,6,7,8,9: tax=x*0.03 (5000<X<=10000 )
P=10: tax=x*0.05 (x> 10000 )
这里的P是“情况”值,用产值x除以1000的整数值作为P,如果P>10也归入P=10的情况。Pascal语言用P=trunc(x/1000)取整计算,
解: program xpo;
var x,p:integer;tax:real;
begin
write('input x=');
read(x);
p:=trunc(x/1000);
if p>0 then
case p of
0:tax:=0;
1,2,3,4:tax:=x*0.02;
5,6,7,8,9:tax:=x*0.03;
else tax:=x*0.05;
end;
write('tax=',tax:0:2);
readln;
readln;
end.
两个小题,希望对你有所帮助 ^_^
我这里有本书恩 叫奥赛经典 挺符合你的要求 我qq514154351
1.在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
program queens;
var a:array [1..8] of integer;
b,c,d:array [-7..16] of integer;
t,i,j,k:integer;
procedure print;
begin
t:=t+1;
write(t,': ');
for k:=1 to 8 do write(a[k],' ');
writeln;
end;
procedure try(i:integer);
var j:integer;
begin
if i>8 then print;{完成任务,打印结果}
for j:=1 to 8 do {每个皇后都有8种可能位置}
if (b[j]=0) and (c[i+j]=0) and (d[i-j]=0) then {判断位置是否冲突} begin
a[i]:=j; {摆放皇后}
b[j]:=1; {宣布占领第J行}
c[i+j]:=1; {占领两个对角线}
d[i-j]:=1;
try(i+1); {8个皇后没有摆完,递归摆放下一皇后}
b[j]:=0; {回溯}
c[i+j]:=0;
d[i-j]:=0;
end;
end;
begin
fillchar(a,sizeof(a),0); {初始化数组}
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
fillchar(d,sizeof(d),0);
try(1);{从第1个皇后开始放置}
end.
2.有三根塔,第一根塔上从小到大摆有n片铜片,要求把这些铜片摆到第三根塔上.但大铜片不能压在小铜片上面.
输入:[KEYBOARD] 输出:[SCREEN]
3
a->c a->b c->b a->c b->a b->c a->c
program hanoitower;
uses crt;
var n:integer;
procedure hanoi(x:integer;a,b,c:char);
begin
if x=1 then write(' ',a,' -> ',c,' ') else
begin
hanoi(x-1,a,c,b);
write(' ',a,' -> ',c,' ');
hanoi(x-1,b,a,c);
end;
end;
begin
clrscr;
write('Hanoi tower,Please input n:');
readln(n);
hanoi(n,'a','b','c');
readln;
end.
3.A、B、C三根细柱,A上有2n个圆盘,共有n个不同的尺
寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘足不加区分的。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。
要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
计算为2n个圆盘完成上述任务所需的最少移动次数。
program hanoi;
var
a:array[1..10000] of integer;
i,j,x,k:longint;
begin
readln(n);
a[1]:=1;k:=1;
for i:=1 to n do
begin
x:=0;
for j=1 to k do
begin
x:=x+a[j]*2;
a[j]:=x mod 10;
x:=x div 10;
end;
while x>0 do
begin
inc(k);
a[k]:=x mod 10;
x:=x div 10;
end;
end;
x:=2;
k:=1;
while x>0 do
begin
a[j]:=a[j]+x;
x:=x div 10;
end;
for i:=k downto 1 do write(a[i]);
end.
希望对你有用!
第二章 顺序结构程序设计
2.1 顺序结构程序
2.1.1 顺序结构
所有计算机程序都可以用四种基本结构表示。这就是顺序结构、选择结构、循环结构以及函数与过程结构。顺序结构是一组按书写顺序执行的一组语句。函数与过程结构使得可以通过简单的函数或过程调用执行一组复杂的语句。这四种结构对外界而言都有唯一的一个入口和一个出口。养成使用这四种结构编程的习惯,可使你的程序结构清晰,可读性好,同时也方使调试和修改。
我们通常把解题的方法和步骤称为算法。为了形象精确地描述算法,我们常常采用流程图描述方法,而PDL框图与N-S框图常用于描述算法用,以后我们将同时介绍这两种框图描述方法,但以N-S框图为主。顺序结构程序是最简单而又最基本的一种结构。用PDL框图及N-S框图描述如下:
语句1
. . . . . .
语句n
2.1.2 赋值语句
赋值语句是PASCAL中最常用的语句,它主要用于计算表达式的值,并将其赋给一个变量。
赋值语句的一般格式为:
<变量标识符>:=<表达式> ;
其中“:=”称为赋值运算符,它表示将运算符右侧表达式的结果送入运算符左侧变量相对应的存储单元中,作为其当前值。语法图如下:
赋值语句使用注意以下几点:
(1) 表达式的类型必须是左端变量的类型能相容的。
(2) 赋值运算符“:=”与等号“=”具有完全不同的含义。
例如2.1:找出下面程序的错误
program rzy3;
var
a : integer;
b : real;
c : char;
d : string;
e:boolean;
begin
b:=5;
a:=b+1;
a:=2*16384
e:= (5>0);
c:='I';
d:=c+' am a boy';
c:=d;
end .
说明:字符串型变量(string)可相容字符型(char)数据,实数型变量(real)可相容整型(integer)数据,反过来则不可以。如上例:b+1结果为实型,不能送入整型变量a中。
2.2 顺序结构程序设计
例2.2 我们用“1”代表牛奶,用“2”代表蜜糖,现有三个杯,其中一个杯装有牛奶,另一杯装有蜜糖,剩下的一个杯为空杯,试编程模拟交换牛奶和蜜糖两杯内容的过程。
思路:借助空杯实现交换,设a:=1; b:=2; c:=0; 交换图示如下:
N-S流程图及程序如下:
program rzy4;
var
a,b,c:integer;
begin
writeln('a b c');
开始
赋予a为1,b为2,c为0
输出开始状态,即a,b,c的值
把a杯牛奶送入c杯
显示当前a,b,c值
把b杯蜜糖送入a杯
显示显示当前a,b,c值
把c杯牛奶送入b杯
显示显示当前a,b,c值
清空c杯
显示当前a,b,c值
结束
a:=1; b:=2; c:=0;
writeln(a,b,c);
c:=a;
writeln(a,b,c);
a:=b;
writeln(a,b,c);
b:=c:
writeln(a,b,c);
c:=0;
writeln(a,b,c);
end.
运行结果:
a b c
1 2 0
1 2 1
2 2 1
2 1 1
2 1 0
问题:从运行时a,b,c的值发现:执行过程中会多一杯牛奶或蜜糖,如1 2 1 ,您知到为什么会这样吗?
原因:PASCAL中对变量的操作是:
“取数用复制,存数用替换”
因此程序中,c:=a; 的操作是:从a中复制数“1”到c中,结果c中值为1,而a中值仍然为1,结果多一杯牛奶了!
改进后运行结果
a b c
1 2 0
0 2 1
2 0 1
2 1 0
你能进一步修改程序,使模拟过程更加合理,并要求输出左边的运行结果吗?看谁做得最快!
例2.3 已知甲、已两港间的水路为S千米,一只船从甲港开往乙港,顺水T1小时到达,从乙港返回甲港,逆水T2小时到达,求船速VB和水速VW。编程实现从键盘中输入S、T1和T2则可打印出船速和水速。
思路:从题意注意到有下面基本数量关系
顺水速度=船速 + 水速
开始
提示输入数据
输入水路及顺逆水时间
计算船速及水速
输出船速及水速
结束
逆水速度=船速 - 水速
因此可建立下面数学模型
顺水速度=水路/顺水时间 即VT1=S/T1
逆水速度=水路/逆水时间 即VT2=S/T2
船速=(顺水速度+逆水速度)/2 即VB=(S/T1+S/T2)/2
水速=(顺水速度-逆水速度)/2 即VW=(S/T1-S/T2)/2
程序如下:
program rzy5;
var
s,t1,t2,vb,vw:real;
begin
write('s,t1,t2=');
readln(s,t1,t2);
vb:=(s/t1+s/t2)/2;
vw:=(s/t1-s/t2)/2;
writeln('vb=',vb:8:2);
writeln('vw=',vw:8:2);
end .
运行输入数据:
s,t1,t2= 208 8 13
运行输出结果:
vb= 21.00
vw= 5.00
再运行输入数据:
s,t1,t2= 300 10 15
请记录运行输出结果:
vb=
vw=
例2.4 猜数游戏,运行程序时,计算机会随机产生一个1到10间的数,然后您输入一个数,您猜对了,计算机会显示“right! computer number is X”,否则显示“wrong! computer number is X”。其中X为计算机随机产生的数。
思路:主要使用到计算机提供的随机函数random(x),产生[0,x-1]之间的随机数,再与输入的数比较而决定不同的输出。randomize过程可使每次运行程序产生的随机数更加随机。
program rzy6;
var
开始
把输出信息存入变量name中
产生一个随机数存入变量c中
提示输入猜测数
输入一个猜测数并存入p中
判断两数是否相同,结果b中存入了true或false
用copy函数从name中复制相应信息输出。
结束
c,p:integer;
name:string;
b:boolean;
begin
name:='wrong!right!';
randomize;
c:=random(11);
write('your guess number:');
readln(p);
b:=(c=p);
writeln( copy(name,1+ord(b)*6,6) , ' computer number is ' , c );
end .
程序理解:假设计算机随机产生数为3,即c为3,读者输入猜数为4,即p为4,则b:=(3=4);故b值为false, 则copy(name,1+ord(b)*6,6)简化为copy(name,1+ord(false)*6,6),因为ord(false)的值为0,则copy('wrong!right!',1,6),结果为 'wrong!' 。试分析输入猜数为3时,又如何。有关函数random,copy,ord请参阅第一章或Turbo Pascal帮助说明。
例2.5 编程实现从键盘中输入一个字符,打印输出该字符的ASCII码值。
思路:程序很简单,只须用ord(x)求出字符在ASCII字符集中的序号即可。
程序如下:
program rzy7;
运行程序:
enter a charater: A
输出结果:
A ASCII is 65
var
ch:char;
begin
write('enter a charater:');
readln(ch);
writeln( ch,' ASCII is ',ord(ch) );
end.
本章练习
练习1:编程实现输入三角形的底边和高,求三角形的面积。
(提示:三角形面积=(底*高)/2 )
练习2:编程用writeln语句及“*”号输出你的姓名。例如“王平”,输出如下:
******* *********
* * * *
* ***
******* ***********
* *
* *
******* *
练习3:问题:有两支蜡烛,燃烧速度相同,第一支n小时燃尽,第二支m小时燃尽,其中n>m。如果同时点燃这两支蜡烛,在点燃多少小时以后,第一支蜡烛的长度是第二支蜡烛的k倍。要求编程实现从键盘输入不同的m,n,k值,则输出应点燃时间t。
提示:
(1)设燃烧速度为L
(n*L-t*L)=k*(m*L-t*L)
即 t=(k*m-n)/(k-1)
(2)设n,m, k,t为real型。
(3)试测试数据n,m, k对应4 3 3
正确结果t为2.5000000000E+00
练习4:一人骑自行车从甲地到乙地,速度是9千米/小时,如果车速改为12千米/小时,结果就会比原速早到半小时。问甲乙两地之间的距离是多少千米?
提示:(1)设甲乙距离为S,原速成为v1=9千米/小时,提速后v2=12千米/小时,相差时间为dt=0.5小时。
(2)有s/v1-s/v2=dt 即有s=dt/(1/v1-1/v2)
(3)可设s,v1,v2,dt为实数型real;
(4)测试数据v1,v2,dt分别为9 12 0.5 , 输出正确结果:s= 18:00 。
pascal语言编程的格式
就是直接按空格嘛...一般是这样的习惯:像if , for ,repeat, while...有包含步骤的,就将其子步骤的每一句都向后敲两个空格,同一级别的内容对齐,如果有begin ...end 就在多敲一行(看样例),这样会使程序具有可读性,步骤的包含关系很明确,另外begin end 可以对的很齐,就会减少错误。
高一学pascal语言
IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计语言之一, NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。 在Pascal问世以来的三十余年间,先后产生了适合于不同机型的各种各样版本。其中影响最大的莫过于Turbo Pascal系列...
pascal跟C语言有什么区别? 先学pascal再学C有必要吗?
C更加流行,它是程序员操控方便的更加接近接口和设备语言,优点是高效,简洁。现在面向对象编和JAVA,C++,C#之类的面向对象语言,多是和C相似,有了C基础学这些语言会更加轻松自如。至于学C之前要学PASCAL没有科学依据,大学工科专业一般第一门程序语言就是C,不必要有PASCAL作为铺垫。
C语言与PASCAL语言有什么区别
但今天的 C\/C++ 语言支持函数原型(而且不提倡用旧的函数风格),类型检查机制几乎和 Pascal 一样严格。古老的 C 语言曾经只能靠指针存取外界的变量,很不安全,但今天 C\/C++ 的引用参数则是相当类型安全的。而引用参数和 Pascal 的 var 参数如出一辙。 另外,Pascal 语言本身也经过了巨大的发展,Borland 功不可没...
Pascal 为什么变得不流行了?
曾经的编程王者为何落寞?曾经,Pascal语言的代表Delphi和BCB以其无可匹敌的优势横扫市场,如同一道闪电,令VC和VB都黯然失色。那是一个时代,Linux的开源浪潮和Java的跨平台特性,为Pascal树立了无法忽视的里程碑。微软敏锐地捕捉到这股风向,推出C#,并宣告了未来桌面开发的新纪元:只有跨平台的解决方案...
Delphi、FORTRAN、Pascal语言各是什么及其用途?
都属于高级语言,从程序设计方法上来说fortran和pascal都属于面向过程的语言,delphi在06年以前指的是borland公司的IDE,06年以后borland公司提出了delphi语言,就语言本身来说,delphi可以称为 “带类的pascal”,即面向对象的pascal语言,在原有pascal语言的基础上,引入了面向对象的设计方法,delphi用来开发...
Pascal 语言中"(「A∧B)∨(C∧D∨A)"什么意思
在Pascal语言中"真"用ture表示,"假"用False表示。所以布尔类型只有TRUE与FALSE两个常量。2、 布尔变量(BOOLEAN)如果我们将某些变量说明成布尔型,那么这些变量就是布尔变量,它们只能用于存放布尔值(ture或false)。例如,VAR A,B:BOOLEAN;3、 布尔类型是顺序类型 由于这种类型只有两个常量,Pascal...
pascal 语言中的FOR循环语句的结构
Pascal语言中for循环语句是计数型循环,所以可以知道循环的次数,结构如下:for <变量>:=<初值> to <终值> do <循环体>;for <变量>:=<初值> downto <终值> do <循环体>;解释:在第一种格式中,<变量>先被赋值于<初值>,然后执行一次<循环体>,之后<变量>自加1,再执行一次<循环体>…...
PASCAL与C,C++和JAVA不都是面向对象的程序设计语言吗?它们之间有什么不...
是一个争论不休的话题,不同人总会有不同的见解。传统的说法是从Pascal开始,而较为新点的是C开始,这几年以来,也有提出直接从C++或者C#\/Java开始学起。首先,我先来介绍一下各种编程语言的来源、特点。Pascal语言:Pascal是一种计算机通用的高级程序设计语言,由瑞士Niklaus Wirth教授六十年代末设计并...
pascal和C语言的字母表是什么?他们语言中变量定义的语法规则又都是什么...
C语言变量的标识符,只能有数字、字母和一个特殊符号下划线(_)组成,而且第一个字符不能是数字,pascal中以下划线、大小写字母(大小写不敏感)、数字组成(第一个字符不能为数字)基本和C语言是相同的!对于$这个符号不用,没有硬性的规定,有些编译器是可以用的,比如vc6.0,主要是因为c语言最终...
本舍盐酸: program p5_3_5; var y,m,d:integer; y1,m1:integer; s:integer; begin readln(y,m,d); y1:=y-1+(y-1) div 4-(y-1)div 100+(y-1) div 400; case m of 1,10:m1:=0; 5:m1:=1; 8:m1:=2; 2,3,11...
殷都区18750481503: 求pascal编程练习题及答案. - ?
本舍盐酸: 循环:for i:=1 to n do read(a[i]); 选择:if x>0 then writeln(k+x) else writeln(x-k); array:循环里 顺序:x:=2; y:=3; write(x+y); 望采纳
殷都区18750481503: Pascal语言的几道题谁能帮我做一下? - ?
本舍盐酸: 1095program wew;var a,b:integer;begin readln(a,b); writeln(a,'+',b,'=',a+b); writeln(a,'-',b,'=',a-b); writeln(a,'*'...
殷都区18750481503: 几道简单的Pascal编程题 - ?
本舍盐酸: 1.var a,b:integer; begin readln(a,b); writeln(a+b); end;2.var s:real; begins:=(8+12)*9/2; writeln(s:2:2) end.3.var a:integer; ge,bai,shi:integer; beginreadln(a); ge:=a mod 100; bai:=a div 100; shi:=a-ge-bai*100; weiteln(ge,bai,shi); end.4.var a:array[1.....
殷都区18750481503: pascal case 语句类型题 - ?
本舍盐酸: 第一:你的Case有问题,应该如下. CASE Y OF 2 :T:=('28'); 4,6,9,11 :T:=('30'); ELSE T:=('31'); END; 第二:你的数据类型有问题. 这个T:=('28')类型不兼容.如果转化成T:=Char('28')的话那结果就不是你要的,个人建议你的T应该直接使用字符串类型,应Char(一个数字)这样的转化会得出的字符
殷都区18750481503: Pascal 练习!求解! - ?
本舍盐酸: 1a,x:longint;beginreadln(x);if x>50 then begina:=x-50;x:=50;end;writeln(x*0.35+a*0.5);end.2varx:longint;beginreadln(x);if x mod 3=2 thenif x mod 5=3 thenif x mod7=2 thenwriteln(...
殷都区18750481503: 1116:Pascal语言考试练习题 - 一元二次方程 时间限制: 1 Sec 内存限制: 128 MB?
本舍盐酸: Var x1,x2,a,b,c,d:integer;Begin Readln(a,b,c); D:=b*b-4*a*c; If d>0 then Begin X1:=(-b+sqrt(d))/2/a; X2:=(-b-sqrt(d))/2/a; Writeln(x1,x2);EndElse Writeln('no real roots');End.求采纳
殷都区18750481503: 请列举一些PASCAL的练习题,并给出答案~~谢谢~~~?
本舍盐酸: 初学示例程序 http://bbs.cnpascal.cn/viewthread.php?tid=12&extra=page%3D1
殷都区18750481503: 关于Pascal语言的习题 - ?
本舍盐酸: var a,q,w:longint; c:boolean; begin for a:=1000 to 9999 do begin c:=true; for q:=1 to 10 do if a mod q<>q-1 then c:=false; if c then write(a:8); end; writeln; end.答案:2519 5039 7559
殷都区18750481503: 2道pascal练习题nbsp;在线求解!?
本舍盐酸: {1}programnbsp;lx;constn=给定的数vara:array[1..k];b,c,d,e,f,k:integer;beginreadln(k);b:=n;fornbsp;c:=1nbsp;tonbsp;knbsp;donbsp;a[c]:=c;whilenbsp;bamp;lt;amp;gt;1nbsp;dowritenbsp;(knbsp;modnbsp;bnbsp;);beginfornbsp;c:=knbsp;modnbsp;...