循环程序测试题目2解析.docx
《循环程序测试题目2解析.docx》由会员分享,可在线阅读,更多相关《循环程序测试题目2解析.docx(14页珍藏版)》请在冰点文库上搜索。
循环程序测试题目2解析
1、从键盘上输入两个不超过32767的整数,试编程序用竖式加法形式显示计算结果。
例如:
输入123,85
显示:
123
+ 85
-------------
208
varx,y:
integer;
begin
readln(x,y);
writeln(x:
10);
writeln('+',y:
9);
writeln('-------------');
writeln(x+y:
10);
end.
2、输入一个奇数,输出下列图形;
输入:
3
*
***
*
输入:
5
*
***
*****
***
*
varx,i,j,space:
integer;
Begin
readln(x);
space:
=40;
fori:
=1toxdo
ifodd(i)then
begin
write('':
space);
forj:
=1toido
write('*':
1);
writeln;
space:
=space-1;
end;
fori:
=x-1downto1do
ifodd(i)then
begin
write('':
space+2);
forj:
=1toido
write('*':
1);
writeln;
space:
=space+1;
end;
end.
3、随机产生一些1—100之间的整数,直到产生的数为50为止。
varx,y:
integer;
begin
randomize;
repeat
x:
=random(100)+1;
write(x:
4);
untilx=50;
end.
4、输入一串字符,以“?
”结束,输出其中小写字母、大写字母与数字的个数。
programex;
var
ch:
char;
big,small,data:
integer;
begin
big:
=0;small:
=0;data:
=0;
read(ch);
whilech<>'?
'dobegin
if(ord(ch)>=65)and(ord(ch)<=90)thenbig:
=big+1;
if(ord(ch)>=97)and(ord(ch)<=122)thensmall:
=small+1;
if(ord(ch)>=48)and(ord(ch)<=57)thendata:
=data+1;
read(ch);
end;
writeln;
writeln(big:
4,small:
4,data:
4);
end.
5、任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。
如6的所有真约数是1、2、3,而且6=1+2+3。
像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数(完全数)。
古希腊人非常重视完美数。
毕达哥拉斯发现它之后,人们就开始了对完美数的研究。
现在要求输出所有在2到10000范围内的完美数。
var
i,j,tmp:
integer;
begin
fori:
=2to10000do
begin
tmp:
=0;
forj:
=1toIdiv2do
if imodj=0then
tmp:
=tmp+j;
iftmp=ithen
writeln(i);
end;
readln;
end.
6、输出1--999中能被3整除,且至少有一位数字是5的所有整数。
vara,b,c,n:
integer;
begin
forn:
=1to999do
begin
a:
=ndiv100;
b:
=(n-a*100)div10;
c:
=nmod10;
if((a=5)or(b=5)or(c=5))and((nmod3)=0)then
write(n,'')
end;
end.
programex1;
vars,n:
integer;
begin
n:
=2;
s:
=0;
whiles<1500do
begin
s:
=s+n*n;
n:
=n+2;
end;
writeln(n);
readln
end.
7、输入x的值(|x|<1),按下列公式计算s
s=x+(x^2/2)+(x^3/3)+(x^4/4)+....
直到最后一项的绝对值小于0.00001为止。
vars,t,x:
real;n:
integer;
begin
readln(x);
t:
=x;s:
=x;n:
=1;
whileabs(t/n)>0.00001do
begin
t:
=t*x;
n:
=n+1;
s:
=s+(t/n);
end;
writeln(s);
end。
8、求下列式中n的最大值:
2^2+4^2+6^2+...+n^2<1500
varx,n,z:
integer;
begin
n:
=0;z:
=0;
repeat
n:
=n+2;
x:
=n*n;
z:
=z+x;
untilz>1500;
writeln(n-2);
end.
9、输入20个数,统计其中正、负和零的个数
程序如下:
programex4_7;
var
a:
real; {声明变量a,用于表示输入数}
i,k,n,l:
integer;{i表示输入数是第几个,k,n,l分别表示负数、零、正数的个数}
begin
i:
=0;k:
=0;n:
=0;l:
=0;
whilei<20do
begin
readln(a);
ifa<0thenk:
=k+1;
ifa>0thenl:
=l+1;
ifa=0thenn:
=n+1;
i:
=i+1;
end;
writeln(l,',',k,',',n);
end.
10、输入一自然数A,判断它是否是质数。
(提示:
若从2到A的平方根的范围内,没有一个数能整除A,则A是质数。
)
var i,j,k,n:
integer;
yes:
boolean;
begin
readln(i);
yes:
=true;
ifi=1then beginyes:
=false;writeln(i,'no':
6);halt;end;
ifi=2then beginyes:
=true;writeln(i,'yes':
6);halt;end;
k:
=trunc(sqrt(i));
for j:
=2 to k do
ifi mod j=0 then
begin yes:
=false;writeln(i,'no':
6);break;end;
if yesthen write(i,'yes':
6);
end.
11、设我国目前的人口为11亿,且每年的增长率为1.5%。
问多少年后,我国的人口会翻一番,达到22亿?
var
x:
real;
i:
longint;
begin
i:
=1;
x:
=11;
whilex<22do
begin
inc(i);x:
=x*1.015;end;
writeln(i);
end.
12、编程模拟剪刀、石头、布游戏:
用S表示剪刀,用R表示石头,用P表示布。
规则是:
剪刀剪布,石头砸剪刀,布包石头。
游戏者把自己的选择输入,计算机随机产生输入并给出结果。
实现重复玩,键入“x”结束。
Programgame;
Const
S1='playeronewin!
';
S2='playertwowin!
';
S3='nowinner.';
Var
P1,p2:
integer;
T:
char;
Begin
whilet<>'x'dobegin
randomize;
p1:
=random(3)+1;
Writeln('playertwo:
');
Readln(t);
Caseupcase(t)of
'S':
p2:
=1;
'R':
p2:
=2;
'P':
p2:
=3;
End;
Casep1-p2of
-2:
writeln(s1);
-1:
writeln(s2);
0:
writeln(s3);
1:
writeln(s1);
2:
writeln(s2);
End;
end;
End.
13、有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子长到第三个月后,每个月又生一对兔子,假设兔子都不死,问:
第20个月后共有多少对兔子。
求费波那契faibonacai数列(0,1,1,2,3,5,8,13,21…………….)的前n项。
Varn,p,l,t,f:
integer;
Begin
writeln('nonfaibonacai:
');
read(n);
p:
=0;l:
=1;t:
=2;
write('0':
6,'1':
6);
whilen>tdo
Begin
f:
=p+l;
if(tmod4)=0thenwriteln;
write(f:
6);
p:
=l;
l:
=f;
t:
=t+1;
End;
End.
14、A,B,C,D,E五个人合伙夜间捕鱼,凌晨时都疲惫不堪,各自在河边的树丛中找地方睡着了,日上三竿,E第一个醒来,他将鱼数了数,平分成五分,把多余的一条扔进河中,拿走一份回家去了,D第二个醒来,他并不知道有人已经走了,照样将鱼平分成五分,又扔掉多余的一条,拿走自己的一份,接着C,B,A依次醒来,也都按同样的办法分鱼(平分成五份,扔掉多余的一条,拿走自己的一份),问五人至少合伙捕到多少条鱼。
也许你能用数学办法推出鱼的条数,但我们要求你编出一个程序,让计算机帮你算出鱼的总数。
programyam;
vara1,a2,a3,a4,a5:
integer;
bl:
boolean;
begin
a1:
=6;bl:
=false;
repeat
a2:
=a1div5;
a3:
=a2div5;
a4:
=a3div5;
a5:
=a4div5;
if(a1mod5=1)and(a2mod5=1)and (a3mod5=1)and(a4mod4=1)and(a5mod5=1)then
bl:
=true;
inc(a1);
untilbl;
write(a1-1);
end.
Var a,b,i,n:
integer;
functionis_prime(m:
integer):
Boolean;
var i:
integer; Ok:
Boolean;
begin
ok:
=true;
fori:
=2totrunc(sqrt(m))do
ifmmodi=0then
begin ok:
=false;break;end;
is_prime:
=ok;
end;
begin
fori:
=10to99do
begin
a:
=idiv10;
b:
=imod10;
n:
=10*b+a;
if is_prime(i)andis_prime(n)thenwrite(i:
5);
end;
end.
15、一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数,例如13。
试找出所有两位数的绝对素数。
var i,j,k,k2,n:
integer;
yes,yes2:
boolean;
begin
yes:
=true;
fori:
=10to99do
ifodd(i) then
begin
yes:
=true;
k:
=trunc(sqrt(i));
for j:
=2 to k do
ifi mod j=0 then yes:
=false;
ifyesthen begin
a:
=idiv10;
b:
=imod10;
n:
=10*b+a;
yes2:
=true;
k2:
=trunc(sqrt(n));
for j:
=2 to k do
ifn mod j=0 then yes2:
=false;
ifyes2then write(i,'');
end;
end;
end.
16、某本书的页码从1开始,小明算了算,总共出现了202个数1,试编程求这本书一共有多少页?
varx,y,s,p:
integer;
beginx:
=0;s:
=0;
whiles<202do
beginx:
=x+1;y:
=x;
whiley>0do
beginp:
=ymod10;
ifp=1thens:
=s+1;
y:
=ydiv10
end;
end;
write('p=',x);
end.
17、一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,...,9。
其中一个页码不含多余的0,如N=1234时第5页不是0005,只是5。
输入:
一个正整数N(N≤109),表示总的页码。
输出:
共十行:
第k行为数字k-1的个数。
varn,i,x,y,s0,s1,p:
integer;
begin
readln(n);
s0:
=0;s1:
=0;
fori:
=1tondo
begin
y:
=i;
whiley>0do
beginp:
=ymod10;
ifp=0theninc(s0);
ifp=1theninc(s1);
y:
=ydiv10
end;
end;
writeln('s0=',s0);
writeln('s1=',s1);
end.