程序設(shè)計(jì)試題匯編(答案)_第1頁
程序設(shè)計(jì)試題匯編(答案)_第2頁
程序設(shè)計(jì)試題匯編(答案)_第3頁
程序設(shè)計(jì)試題匯編(答案)_第4頁
程序設(shè)計(jì)試題匯編(答案)_第5頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

程星微花詼照及泰嗓

(備注:試題難度評(píng)價(jià)采取五★級(jí)評(píng)價(jià)體系,分基礎(chǔ)、容易、一般、稍難、難五個(gè)等級(jí),其中的

一、二、三★級(jí)都屬于程序設(shè)計(jì)的基礎(chǔ)試題級(jí)別,同學(xué)們稍加思考均有能力求得正確解答,對(duì)

于四★級(jí)試題屬于程序設(shè)計(jì)試題基礎(chǔ)級(jí)別的思考題,五★級(jí)難度試題在此沒有涉及,在程序設(shè)

計(jì)高級(jí)試題中另行講解.對(duì)于基礎(chǔ)和容易兩個(gè)級(jí)別的程序設(shè)計(jì)試題,若能夠給出語句分類(如

If條件語句、條件語句嵌套、循環(huán)語句、多重循環(huán)語句等)的將盡量給出。若屬于13大類別的

將盡量標(biāo)注。)

程序設(shè)計(jì)試題幾大分類:

1、素?cái)?shù)類問題(求素?cái)?shù)的幾種算法):

2、數(shù)據(jù)排序問題(數(shù)據(jù)排序的幾種方法):

3、最大公約數(shù)和最小公倍數(shù)問題(兒種算法):

4、公式求解類問題(如求圓周率”、自然常數(shù)e、解方程等等):

5、編號(hào)相反處理問題:

6、約瑟夫問題(或猴子選大王問題、密碼問題):

7,回文數(shù)問題:

8、高精度數(shù)值計(jì)算問題:

9、數(shù)值計(jì)算問題:

10、進(jìn)制相互轉(zhuǎn)換問題:

11、字符串倒置問題:

12、排列與組合類問題:

13、因子、質(zhì)因子(質(zhì)因數(shù))類相關(guān)問題:

答案部分:

(程序設(shè)計(jì)的源程序沒有統(tǒng)一的標(biāo)準(zhǔn)答案,實(shí)現(xiàn)程序的算法也是多種多樣,但結(jié)果是唯一的,算

法也有優(yōu)劣之分,一個(gè)程序的優(yōu)劣,關(guān)鍵在于是否找到了好的算法,以下程序和算法不一定就

是最佳算法和最佳程序,只能僅供參考,希望同學(xué)們能夠?qū)δ承┏绦蛱岢龈玫乃惴▉砀倪M(jìn)程

序)

(經(jīng)常碰到的判斷是否為素?cái)?shù)、是否為回文數(shù)、求兩個(gè)數(shù)的最大公約數(shù)、求兩個(gè)數(shù)的最小公倍數(shù)

等問題的子函數(shù)源程序,請(qǐng)務(wù)必記??!)

①判斷是否為素?cái)?shù),若是素?cái)?shù)則返回true,若不是素?cái)?shù)則返回false:

functionprime(x:longint):boolean;

var

j,y:longint;

begin

prime:=true;

ifx<2thenprime:=false;

y:=trunc(sqrt(x));

forj:=2toydo

if(xmodj=0)then

beginprime:=false;exit;end;

end;

備注:1?100之間所有的素?cái)?shù):2、3、5、7、11、13、17、19、23、29、31、37、41、43、47、

53、59、61、67、71、73、79、83、89、97?(共25個(gè))

②判斷是否為回文數(shù),若是回文數(shù)則返回true,若不是回文數(shù)則返回false:

functionhuiwen(n:longint):boolean;

m,i,j:longint;

a:array[l..10]ofinteger;

begin

ifn<0thenbeginhuiwen:=false;exit;end;

m:=n;i:=0;huiwen:二true;

repeat

i:=i+l;

a[il:=mmod10;

m:=mdiv10;

untilm=0;

forj:=lto(idiv2)do

ifa[j]<>a[i-j+l]then

beginhuiwen:=false;exit;end;

end;

③求最大公約數(shù)子函數(shù),返回兩個(gè)正整數(shù)的最大公約數(shù),采用輾轉(zhuǎn)相除法算法;

functiongcd(a,b:longint):longint;

begin

ifb=0thengcd:=a

elsegcd:=gcd(b,amodb);

end;

④求最小公倍數(shù):lcm=a*bdivgcd(a,b);

(以下程序設(shè)計(jì)試題來自《奧賽經(jīng)典(語言篇)》)

第2章基本語句與程序結(jié)構(gòu)

例題部分:

1、求梯形的面積。(梯形面積公式:S=1/2(4+6))

2

(★,測(cè)試數(shù)據(jù)①

2、求一元二次方程ax?+bx+C=0的兩個(gè)實(shí)根。(求根公式:一""二)

2a

(★,測(cè)試數(shù)據(jù)a=1,b=-5,c=6;答案:x1=2、x2=3)

3、輸入一個(gè)三位的自然數(shù),然后把這個(gè)數(shù)的百位與個(gè)位對(duì)調(diào),輸出對(duì)調(diào)后的結(jié)果。

(★)

4、輸入三個(gè)數(shù)a、b、c,首先判斷這三個(gè)數(shù)能否構(gòu)成三角形,若能,則求出三角形的面積。

(提示:海倫公式5=—a)3——,其中.=a、b、c為邊長)

(★,If條件語句,測(cè)試數(shù)據(jù)a=5,b=6,c=7;答案:14.7)

5、從鍵盤讀入三個(gè)數(shù),按從大到小的順序把它們打印出來。(★,If條件語句)

6、輸入三角形的三邊,判斷它是否是直角三角形。

(★,If條件語句,測(cè)試數(shù)據(jù)①3、4.5;②4、5、6;答案①Yes;②No)

7、編寫一個(gè)根據(jù)用戶鍵入的兩個(gè)操作數(shù)和一個(gè)運(yùn)算符,由計(jì)算機(jī)輸出運(yùn)算結(jié)果的程序。(★

8、輸入一個(gè)年號(hào),判斷它是否為閏年。

(★,If條件語句,測(cè)試數(shù)據(jù)①1900;②2000;③2008;答案:①No;②Yes;③Yes)

9、編程計(jì)算S=l+2+3+…+100。(★,循環(huán)語句,答案:5050)

相關(guān)練習(xí):(1)S=l+-+-+---+—;(2)S=l2+22+---+1002;

23100

(3)S=2+4+6+…+100;(4)S=l+4+7+10+…+100;

(相關(guān)練習(xí)答案:(1)5.19(保留2為小數(shù));(2)338350;(3)2550;(4)1717)

萬2111

10、根據(jù)公式菅=1+++/+…+計(jì)算圓周率的“值。

(★★,循環(huán)語句,測(cè)試數(shù)據(jù)n=10000;答案:3.1414971639)

programe;

i:longint;

s:real;

begin

writein;s:=0;

fori:=lto10000dos:=s+l/(i*i);

writeln(sqrt(6*s));

end.

11、計(jì)算n!。(n!=lX2X3X…Xn,取n=10)

(★★,循環(huán)語句,10!=3628800)

12、已知一對(duì)兔子,每個(gè)月可以生??對(duì)小兔,而小兔過一個(gè)月后也可生--對(duì)小兔。即兔子

的對(duì)數(shù)是:第一個(gè)月1對(duì),第二個(gè)月2對(duì),第三個(gè)月3對(duì),第四個(gè)月5對(duì):……,假設(shè)

兔子的生育期是12個(gè)月,并且不死,問一年后,這對(duì)兔子有多少對(duì)活著的后代?(Fibonacci

數(shù)列問題)

(★★,循環(huán)語句,1、2、3、5、8、13、21、34、55、89、144、233;答案233)

13、求兩個(gè)整數(shù)a與b的最大公約數(shù)和最小公倍數(shù)。

(★,循環(huán)語句、If條件語句,測(cè)試數(shù)據(jù)16和24,最大公約數(shù)8,最小公倍數(shù)48)

14、利用格利高公式求-=1-1+1—!-+...,直到最后一項(xiàng)的值小于KT'為止。

4357

(★★★,循環(huán)語句)(答案:3.1415946569E+00)

programe2_32;

var

n,fh:longint;

s,t,p:real;

begin

writein;n:=l;s:=0;t:=l;fh:=l;

while(abs(t)>=le-6)do

begint:=fh/n;s:=s+t;n:=n+2;fh:=-fh;end;

p:=4*s;

writelnCpi=1p);

end.

相關(guān)練習(xí):利用公式一=----1---------1---------1?…,求兀。

81x35x79x11

(計(jì)算前10000項(xiàng)時(shí),答案為3.1415426536)

programe;

var

i,a,b:longint;

x,s:real;

begin

writein;s:=0;

fori:=lto10000dobegina:=(4*i-3);b:=(4*i-l);s:=s+l/(a*b);end;

writeln(8*s);

end.

15、求100?999中的水仙花數(shù)。(若三位數(shù)ABC,ABC=A3+B*C3,則稱ABC為水仙花數(shù)。

例如153,1+53+33=153,則153是水仙花數(shù)。)(★★,

循環(huán)語句)

(答案:153、370、371、407)

programel2;

var

i,a,b,c:integer;

begin

writein;

fori:=100to999do

begin

a:=idiv100;

b:=(imod100)div10;

c:=imod10;

ifi=a*a*a+b*b*b+c*c*cthenwrite(i:8);

end;

end.

16、試編寫能夠打印輸出如下圖形的程序。(★★,循環(huán)

語句)

AAAAAAAAA

AAAAAAA

AAAAA

AAA

A

programe;

constn=5;

var

i,jinteger;

begin

writein;

fori:=ltondo

begin

write(":i);

forj:=lto(n-i)*2+ldowrite('A');

writein;

end;

end.

17、四個(gè)學(xué)生上地理課,回答我國四大淡水湖大小時(shí)這樣說:(★

甲:“最大洞庭湖,最小洪澤湖,鄱陽湖第三?!?/p>

乙:“最大洪澤湖,最小洞庭湖,鄱陽湖第二,太湖第三。”

丙:“最小洪澤湖,洞庭湖第三?!?/p>

T:“最大鄱陽湖,最小太湖,洪澤湖第二,洞庭湖第三

對(duì)于每個(gè)湖的大小,每個(gè)學(xué)生僅答對(duì)一個(gè),請(qǐng)編程確定四個(gè)湖的大小。

習(xí)題部分:

1、已知三角形的兩邊a、b和夾角jc的值,求第三邊(已知條件由鍵盤輸入)。

(★)

(提示:余角公式c?=a2+/?2-2abcosc)

(測(cè)試數(shù)據(jù):輸入a=3、b=4、jc=90;輸出5)

programe2_5;

var

a,b,c,jc:real;

begin

writeln('inputa,b,jc:*);readln(a,b,jc);

c:=sqrt(a*a+b*b-2*a*b*cos(pi*jc/180));

writeln(c:8:2);

end.

2、編寫程序把?個(gè)四位整數(shù)3581顛倒成1853。

(★)

programe;

constn=3581;

var

a,b,c,d:integer;

begin

writein;

a:=nmod10;

b:=(ndiv10)mod10;

c:=(ndiv100)mod10;

d:=ndiv1000;

writeln(a,b,c,d);

end.

相關(guān)練習(xí):任意輸入一個(gè)正整數(shù),顛倒輸出該數(shù)。

programe;

var

n:longint;

begin

writein;writeln('inputaintegernumber:1);readln(n);

repeat

write(nmod10);n:=ndiv10;

untiln=0;

end.

3、輸入a、b、c三個(gè)數(shù),打印出最大者。(★1條件語句)

programe;

var

a,b,c:real;

begin

writeln('inputthreenumberfora,b,c:f);

readln(a,b,c);

if(a>b)and(a>c)thenwriteln(a);

elseif(b>a)and(b>c)thenwriteln(b);

elsewriteln(c);

end.

4、從鍵盤讀入兩個(gè)數(shù),比較其大小,把大數(shù)置于x,小數(shù)置于y。請(qǐng)?jiān)O(shè)計(jì)實(shí)現(xiàn)該功能的程序。

(★,If條件語句)(程序略)

5、輸入三個(gè)數(shù),判斷以這三個(gè)數(shù)為邊能否組成一個(gè)三角形。若不能,則給出適當(dāng)信息;若能,

則進(jìn)一步判斷它們構(gòu)的是銳角三角形、直角三角形還是鈍角三角形,并輸出其特征(等邊、

等腰、直角、一般)、求其面積。(★★,If條

件語句)

(算法分析:對(duì)于判斷是銳角、直角、還是鈍角三角形,只需判斷最大邊的平方與其余兩

邊的平方和的大小比較即可,小于則為銳角、等于則為直角、大于則為鈍角。)

(測(cè)試數(shù)據(jù):①1、2、3;②3、4、5;③)4、4、7;④5、5、5;答案:①No;②直角、

面積6?00;③鈍角、等腰、面積6?78;④銳角、等邊、面積10.83)

programe;

var

a,b,c,t,s,d,ja,jb,jc:real;

begin

writeln('inputthreenumberfora,b,c:*);

readln(a,b,c);

ifa<bthenbegint:=a;a:=b;b:=t;end;

ifa<cthenbegint:=a;a:=c;c:=t;end;

if(a<b+c)then

begin

if(a*avb*b+c*c)thenwriteln(*ruijiaosanjiaoxing.)

elseif(a*a=b*b+c*c)thenwriteln('zhijiaosanjiaoxing.')

elsewriteln('dunjiaosanjiaoxing.1);

if(a=b)and(b=c)and(c=a)thenwriteln('dengbiansanjiaoxing.')

elseif((a=b)and(b<>c))or((a=c)and(c<>b))or((b=c)and(coa))then

writeln('dengyaosanjiaoxing.1)

elseif(a*aob*b+c*c)thenwriteln('yibansanjiaoxing.');

d:=(a+b+c)/2;s:=sqrt(d*(d-a)*(d-b)*(d-c));writeln(,s=,,s:0:2);

end

elsewriteln('NO!');

end.

6、設(shè)我國目前的人口為11億,且每年的增長率為L5%。問多少年后,我國的人口會(huì)翻一番?

(★)(答案:47)

programe2_22;

var

i:integer;

s:real;

begin

writein;s:=l1;i:=0;

whiles<22do

begins:=s*(1.015);inc(i);end;

writeln(i);

end.

7、Fibonacci數(shù)列問題:數(shù)列的頭兩個(gè)數(shù)分別是0和1,從第三個(gè)數(shù)開始,每個(gè)數(shù)皆為它的前

兩個(gè)數(shù)之和,即:0,1,1,2,3,5,…,輸出該數(shù)列的第50個(gè)數(shù)。(★★,循環(huán)

語句)

(答案:7778742049)

programe;

{$N+,E+}

var

i:integer;

x,y,z:extended;

begin

writein;x:=0;y:=l;write(x:20:0,y:20:0);

fori:=3to50do

beginz:=x+y;write(z:20:0);x:=y;y:=z;end;

end.

8、編寫程序求出下式中n的最大值:22+42+62+-+n2<1500o(★★,循環(huán)語

句)

(答案:18)

programe2_24;

var

n,s:integer;

begin

writein;

s:=0;n:=0;

whiles<1500do

begininc(n,2);inc(s,n*n);end;

writeln(n-2);

end.

9、把一元的鈔票換成一分、二分和五分的硬幣(每種至少一枚),問有多少種兌換方法?(★

★)(答案:461)

programe2_29;

var

i,j,k,ans:integer;

begin

ans:=0;

fork:=lto19do

forj:=lto47do

fori:=lto93do

if(k*5+j*2+i)=100theninc(ans);

writeln(ans);

end.

10、編寫程序求最小正整數(shù)m、n(0<n<m)為何值時(shí),1989"'與1989"的最后三位數(shù)字相

同?

(★★★★)

(算法:這類數(shù)字很大且有效數(shù)字位數(shù)很多(超出最多有效位數(shù)extended數(shù)據(jù)類型有效

數(shù)字18位)的數(shù)字問題,一定要另辟蹊徑尋找突破口,注意到此題只要求最后三位數(shù)

字相同,則我最多保留最后四位有效數(shù)字即可進(jìn)行判斷。還請(qǐng)記住這樣一個(gè)事實(shí),如

1989x1989=3956121,3956121x1989=7868724669,最后四位數(shù)字是“4669”,而我

把3956121取其最后的四位數(shù)“6121”與1989相乘即6121x1989=12174669,最后四

位數(shù)字也是“4669”,沒有破壞最后四位有效數(shù)字的值,因此可以通過這種方法來編寫

此程序。)

(答案:m=51;n=l);

programe;

var

m,n,i,j:integer;

x,y,a,b:longint;

begin

writein;

form:=2to60do

forn:=ltom-1do

begin

x:=l;y:=l;

fori:=ltomdobeginx:=xmod10000;x:=x*1989;a:=xmod1000;end;

forj:=ltondobeginy:=ymod10000;y:=y*1989;b:=ymod1000;end;

ifa=bthenwrit61n('m=',m,'n=\n);

end;

end.

11、編寫程序提示用戶輸入一系列整數(shù),用0作結(jié)束標(biāo)志,統(tǒng)計(jì)其中有多少個(gè)正數(shù)。

(★)

programe;

var

count,x:integer;

begin

writein;writeln(,inputintegernumber(O—end):');count:=0;

repeat

read(x);

ifx>0theninc(count);

until(x=0);

writeln('count=',count);

end.

12>求自然常數(shù)e=—I-----1------F…H----的值。(提不:0!=1,11=1)(★

0!1!2!〃!

★)

(1)直到第50項(xiàng);(2)直到最后一項(xiàng)小于10一5。

(答案:(1)2.71828182845905E+0000;(2)2.71828152557319E+0000)

(備注:第2小問程序略,只須將更改語句“until(l/s)vlE?5;”即可求的解答)

programe2_35;

{$N+}

var

i,count:integer;

e,s:extended;

begin

e:=l;count:=0;

repeat

inc(count);s:=l;

fori:=ltocountdos:=s*i;

e:=e+l/s;

untilcount=50;

writeln(e);

end.

13、三齊王點(diǎn)兵的故事。相傳三齊王韓信才智過人,從不直接清點(diǎn)自己軍隊(duì)的人數(shù),只是

讓士兵先后以三人一排、五人一排、七人一排地變換隊(duì)形,而他每次只掠?眼隊(duì)伍的排

尾就知道總?cè)藬?shù)了(不超過100人)。輸入三次排尾的人數(shù),輸出總?cè)藬?shù)。

(★★)

programe2_36;

var

a,b,c,i:integer;

begin

writelnC'shurup3(0~2),p5(0?4),p7(0?6)deweishu:');

readln(a,b,c);

fori:=100downto1do

if(imod3=a)and(imod5=b)and(imod7=c)thenwriteln(i);

ifi=lthenwriteln(,Noanswer!1);

end.

14、編寫程序,計(jì)算N!以十進(jìn)制數(shù)形式表示的數(shù)中最右的非零數(shù)字,并找出在它右邊有

兒個(gè)零。例如12!=1X2X3X-X12=479001600,因此12!的右邊有2個(gè)零。

(★★★)

(提示:碰到5、5\5\5,…才會(huì)出現(xiàn)末尾是零,所以1000!末尾零的個(gè)數(shù)為:

(1000div5)+(1000div52)+(1000div53)+(1000div54)=249)

(下面的程序沒采用上面的算法,采取另一種算法實(shí)現(xiàn)了這一程序,顯然上面的算法效

率高)

(程序算法:只需提供末尾幾位有效數(shù)字即可,我采取提供四位有效數(shù)字相乘)

program1_11;

var

s:longint;

i,d:integer;

begin

writein;

d:=0;s:=l;

fori:=lto1000do

begin

s:=s*i;

if(smod1000=0)thenbegins:=sdiv1000;d:=d+3;end;

if(smod100=0)thenbegins:=sdiv100;d:=d+2;end;

if(smod10=0)thenbegins:=sdiv10;d:=d+l;end;

s:=smod10000;

end;

writein;write(d);

end.

15、編寫程序,輸出“字母塔二以此類推共26層。A

(★★)

ABA

ABCBA

programe2_40;

var

i,j:integer;

begin

writein;

fori:=lto26do

begin

forj:=lto26-idowrite。);

forj:=ltoidowrite(chr(64+j));

forj:=i-ldownto1dowrite(chr(64+j));

writein;

end;

end.

第4章數(shù)組類型

例題部分:

1、輸入10個(gè)整數(shù),把這10個(gè)數(shù)按從小到大的順序排列。(★

★)

(冒泡法排序和選擇法排序兩種方法)

冒泡法排序:

programe1;

constn=10;

var

a:array[1..10]ofinteger;

i,j,t:integer;

begin

writeln('input\n,'integernumber:*);

fori:=ltondoread(a[i]);

fori:=lton-1do

forj:=lton-ido

ifa[j]>a[j4-l]thenbegint:=a[j];a[j]:=a[j4-l];a[j+l]:=t;end;

fori:=ltondowrite(a[i]:5);

end.

2、折半查找。(二分法查找)(★★)

3、旅館里有一百個(gè)房間,從1到100編了號(hào)。第一個(gè)服務(wù)員把所有的房間門都打開了,第二

個(gè)服務(wù)員把所有編號(hào)是2的倍數(shù)的房間“相反處理”,第三個(gè)服務(wù)員把所有編號(hào)是3的倍

數(shù)的房間作“相反處理”,……,以后每個(gè)服務(wù)員都是如此。問第10()個(gè)服務(wù)員來過后,

哪幾扇門是打開的。(所謂“相反處理”是:原來開著的門關(guān)上,原來關(guān)上的門打開。)

(★★)

(提示:對(duì)于任何一個(gè)編號(hào),例如8,它的因子只有1、2、4、8,并且成對(duì)出現(xiàn),當(dāng)此數(shù)

的因子數(shù)為偶數(shù)個(gè)時(shí)將被關(guān)上,當(dāng)此數(shù)的因子數(shù)為奇數(shù)個(gè)時(shí)才會(huì)被打開??紤]到因子成對(duì)

出現(xiàn)的情況,因此只有平方數(shù)的因子是奇數(shù)個(gè)的,所以門被打開的只能是平方數(shù)的房間,

如1,4等)

4、編寫程序把任意十進(jìn)制整數(shù)轉(zhuǎn)換成二進(jìn)制整數(shù)。(★★)

5、所謂“幻方”,是一個(gè)行、列為奇數(shù)的方陣,把1?1?這I?個(gè)不同的數(shù)放入方陣中,使方陣

的每行、每列和每個(gè)對(duì)角線上的元素的和全部相等。卜.面給出幻方的種排列方法:

(1)先把1放在第一行的中間位置;

(2)下一個(gè)數(shù)放在上一個(gè)數(shù)的右上方;

(3)若右上方已超出方陣的第一行,則下一個(gè)數(shù)放在下一列的最后一行上;

(4)若右上方已超出方陣的最后一列,則下一個(gè)數(shù)放在上一行的第一列上;

(5)若右上方已經(jīng)有數(shù),或右上方已超出方陣的第一行最后一列,則下一個(gè)數(shù)放在上

一個(gè)數(shù)的正下方。

編寫程序,對(duì)輸入小于15的n,打印出相應(yīng)的幻方。(★★

★)

6、在一個(gè)字符數(shù)組LET中形成由A開始的連續(xù)26個(gè)大寫字母構(gòu)成的字串,并將其倒置后仍

放在LET中。

7、隨機(jī)輸入一個(gè)長度不超過255的字符串,將其倒置后輸出。

8、隨機(jī)輸入一些國家的英文名字,以end作為輸入結(jié)束標(biāo)志,按字母順序排序后輸出。

9、求n個(gè)字符串的最長公共子串,n<20,字符長度不超過255。

例如n=3,由鍵盤依次輸入三個(gè)字符串為:

whatislocalbus?

Namesomelocalbus.

LocalbusishighspeedI/Obusclosetotheprocessor.

則最長公共子串為"localbus”。

10、文本的整版。編寫一個(gè)程序,從鍵盤以任意的方法輸入句子,然后打印出來。打印時(shí)

每行寬度必須為n個(gè)字符。如果一行的最后一個(gè)單詞超出了本行n個(gè)字符的范圍,則應(yīng)

把它移到下一行去。輸入一個(gè)句子測(cè)試你的程序。

習(xí)題部分:

1、輸入n個(gè)整數(shù),請(qǐng)找出最小數(shù)所在的位置,并把它與第一個(gè)數(shù)對(duì)調(diào)。

(★)

programe4_2;

var

a:array[1..10]ofinteger;

i,t,y:integer;

begin

writelnC'inputtenintegernumber:*);

fori:=lto10doread(a[i]);

t:=a[l];

fori:=2to10doifa[il<tthent:=a[il;

fori:=lto10do

ifa[i]=tthenbeginwriteln('theminnumberisa[i]:=a[l];a[l]:=t;end;

fori:=lto10dowrite(a[i]:8);

end.

2、用邊排序邊合并的方法把兩個(gè)有序數(shù)列合并為一個(gè)新的有序數(shù)列,不得先合并再重新排

序。

(★★)

(測(cè)試數(shù)據(jù):這里a組數(shù)據(jù)共8個(gè):113667910;b組數(shù)據(jù)共5個(gè):01234)

programe4_3;

var

a:array[1..8]ofinteger;

b:array[1..5]ofinteger;

c:array[1..13]ofinteger;

i,j,k,m,n:integer;

begin

writelnC'input8integernumberofsquarearrayA:');

fori:=lto8doread(a[i]);

writeln('input5integernumberofsquarearrayB:*);

fori:=lto5doread(b[i]);

j:=l;k:=l;m:=a[j];n:=b[k];

fori:=lto13do

begin

ifm<nthen

begin

c[i]:=m;inc(j);m:=a[j];

ifj=9thenm:=maxint;

end

else

begin

c[i]:=n;inc(k);n:=b[k];

ifk=6thenn:=maxint;

end;

end;

fori:=lto13dowrite(c[i]:4);

end.

3、將一個(gè)數(shù)插入到有序的數(shù)列中,插入后數(shù)列仍然有序。(★

★)

(測(cè)試數(shù)據(jù):有序數(shù)組為113667910;待插入數(shù)為5)

programe4_4;

var

i,j,n:integer;

flag:boolean;

a:array[1..9]ofinteger;

begin

writeln('input8integersquarenumber:');

fori:=lto8doread(a[i]);

writeln('inputaintegernumbertoinsert:');

readln(n);

flag:=false;i:=l;

repeat

ifa[i]>nthenflag:=trueelseinc(i);

untilflag=true;

forj:=9downtoi+1doa[j]:=afj-l];

afil:=n;

fori:=lto9dowrite(a[i]:4);

end.

4、有N個(gè)無序的數(shù)存放在A數(shù)組中,請(qǐng)將后面相同的數(shù)刪成只剩下一個(gè),并輸出經(jīng)過刪除

后的數(shù)列。(★

★)

(測(cè)試數(shù)據(jù):數(shù)列為13537531;答案:1357)

programe4_5;

var

a:array[1..8]ofinteger;

i,j,n:integer;

begin

writeln('input8integernumber:');

fori:=lto8doread(a[i]);

fori:=2to8do

forj:=ltoi-1doifa[i]=a[jjthena[i]:=maxint;

fori:=lto8do

ifa[i]omaxintthenwrite(a[i]:4);

end.

5、有N個(gè)人排隊(duì)到R個(gè)相同的水龍頭去打水,他們裝滿各自水桶的時(shí)間Tl、T2、…、TN

為整數(shù)且互不相等,應(yīng)如何安排他們打水的順序才能使他們花費(fèi)的總時(shí)間最少?(花費(fèi)的

總時(shí)間等于每個(gè)花費(fèi)時(shí)間的總和)

6、求一個(gè)五階方陣中某個(gè)元素的位置:它在行上是最小的,在列上也是最小的,如果沒有請(qǐng)

輸出“NOFIND!”。(★★

★)

(分析:整個(gè)矩陣中的最小值,當(dāng)然也是所在行和所在列的最小值,因此肯定能找到這

樣的數(shù))測(cè)試數(shù)據(jù):答案:2、1、3、6

II4278

5923125

322211815

171624126

1310192014

programe;

var

i,j,x,y:integer;

minx:integer;

a:array[1..5,1..5]ofinteger;

begin

writein;writeln('inputnumber(5*5):');

fori:=lto5do

forj:=lto5do

read(a[i,j]);

fori:=lto5do

begin

minx:=a[i,l];x:=i;y:=l;

forj:=lto5do

ifa[ij]<minxthenbeginminx:=a[ij];y:=j;end;

forj:=lto5do

ifa[j,y]<minxthenbreak;

ifj=5thenwritelnC'thenumberis

end;

end.

第5章過程與函數(shù)

例題部分:

1、編程求:1!+3!+5!+7!+9!+11!。

2、求數(shù)字的乘積根。一個(gè)正整數(shù)的數(shù)字的乘積N的定義是:這個(gè)整數(shù)中非零數(shù)字的乘積。例

如,整數(shù)999的數(shù)字乘積為9X9X9,即729。729的數(shù)字乘積為7X2X9,即126。126

的數(shù)字乘積為1X2X6,即12。12的數(shù)字乘積為1X2,即2。一個(gè)正整數(shù)的數(shù)字乘積根N

是這樣得到的:反復(fù)取該整數(shù)的數(shù)字乘積,直到得到一位數(shù)字為止。例如,在上面的例子

中數(shù)字的乘積根是2。編寫一個(gè)程序,輸入一個(gè)正整數(shù)(長度不超過200位數(shù)字),輸出

計(jì)算其數(shù)字乘積根的每一步結(jié)果。

3、漢諾(Hanoi)塔問題。設(shè)有n個(gè)大小不等的中空?qǐng)A盤,按照從小到大(尺寸和序號(hào))的

順序疊套在立柱A上。另有兩根立柱B和C,如圖所示。問題要求把全部圓盤從A柱(源

柱)移到C柱(目標(biāo)柱)。移動(dòng)過程中可借助B柱(中間柱)。移動(dòng)時(shí)有如下要求:

(1)一次只能移動(dòng)一個(gè)圓盤;

(2)不允許把大盤放在小盤上邊;

(3)可使用任意一根立柱暫存圓盤。

nAnsnc

1

4、把一個(gè)十進(jìn)制整數(shù)轉(zhuǎn)化為K進(jìn)制數(shù)(KW10)。

5、八皇后問題:把八個(gè)皇后擺在8X8國際象棋棋盤格子內(nèi),使它們互不捕獲對(duì)方\換言之,

在任何一行、一列或一條對(duì)角線上,僅能放置一個(gè)皇后。這一問題是由19世紀(jì)著名數(shù)學(xué)

家高斯(Gauss)于1850年首先提出的。(答案共有92種解答)

6、已知:切比雪夫多項(xiàng)式如下:(提示:運(yùn)用遞歸函數(shù)計(jì)算)

1(〃=0)

T?(x)=<x(〃=1)

2xTn_y(x)-Tn_2{x)(n>2)

對(duì)給定的不同的正整數(shù),它是一些階數(shù)不同的多項(xiàng)式,編程計(jì)算第n個(gè)多項(xiàng)式的值。

習(xí)題部分:

1、編寫一遞歸函數(shù)說明,用以計(jì)算組合數(shù)C(M,N)。(即C?)

2、兩個(gè)人玩井字游戲,在井字進(jìn)分的九個(gè)空位上輪流畫O或*,誰最先使自己的三個(gè)0或三

個(gè)*在一條直線上,誰就贏了。編寫程序檢查每一步是否走得正確,并告訴誰是勝利者。

第6章集合與記錄類型

例題部分:

1、七段數(shù)碼管問題。

2、任意給出一個(gè)正整數(shù)N,找一個(gè)正整數(shù)M,使得N*M的值的數(shù)字由0、1、…、C(CW9)

組成,且這些數(shù)字至少出現(xiàn)?次。編寫程序在整數(shù)范圍內(nèi)找出滿足條件的最小M。若沒有

給出信息,則輸出“Nofind!”。

例如:C=3、N=65時(shí),M=48,65X48=3210;

C=8、N=125時(shí),“Nofind!”。

(以下程序設(shè)計(jì)試題來自《計(jì)算機(jī)二級(jí)考試復(fù)習(xí)指南》)

1,數(shù)列e⑵稱為e數(shù)列,(★

e(n)=(n-l)e(n-1)+(〃-2)e(n-2)(n>2)

★)

每一個(gè)e(n)(n=l,2,…)稱為e數(shù)。求[1,30000]之內(nèi):

(1)最大的e數(shù);(2)e數(shù)的數(shù)目。

(該數(shù)列前面幾項(xiàng)為1、1、3、11、53、……;答案:①16687;②8)

programe;

var

a,b,c,n:longint;

begin

writein;n:=3;a:=l;b:=l;

repeat

c:=(n-2)*a+(n-l)*b;a:=b;b:=c;inc(n);

untilc>30000;

writeln(,maxe=,,a/count=,n-2);

end.

10001

2.計(jì)算并輸出:S=£-----------之值(精確到小數(shù)點(diǎn)后第5位)。(★)

,=iix(i+1)

(答案:0.99900)

programe;

var

i:integer;

s,n:real;

begin

writein;s:=0;

fori:=lto1000dobeginn:=i;s:=s+l/(n*(n+l));end;

writeln(s:0:5);

end.

??谧蟆故?°)=尸⑴=n2)=1+

3.已知《,求:(★★)

F(N)=F(N-1)-2F(N-2)+F(N-3)(N〉2)

(1)F(50);(2)F(0)+F(1)+......+F(50)。

(答案:①212101;②一97262)

programe;

var

i,a,b,c,d,s:longint;

begin

writein;a:=l;b:=l;c:=l;s:=3;

fori:=3to50do

begind:=a-2*b+c;s:=s+d;a:=b;b:=c;c:=d;write(d:8);end;

writein;writeln('s=',s);

end.

4.求滿足:A?B=716699并且A+B最小兩個(gè)條件的A和B。(★★★)

(答案:A=563;B=1273)

programe;

var

a,x,s,mina,minb:longint;

begin

writein;s:=716699;x:=trunc(sqrt(716699));

fora:=ltoxdo

if(716699moda=0)and(a+(716699diva)<s)then

begins:=a+(716699diva);mina:=a;minb:=(716699diva);end;

writeln(,A=,,mina?,B=\minb);

end.

5.一自然數(shù)平方的末幾位與該數(shù)相同時(shí),稱此數(shù)為自同構(gòu)數(shù)。伊回n,由于52=25,則稱5為自

同構(gòu)數(shù)。求出[1,7001以內(nèi)的:(1)最大的自同構(gòu)數(shù);(2)自同構(gòu)數(shù)數(shù)目。(★

★)

(答案:①625②)7)

programe;

var

i,count:longint;

begin

writein;count:=0;

fori:=lto9do

if(i*i-i)mod10=0theninc(count);

fori:=10to99do

if(i*i-i)mod100=0theninc(count);

fori:=100to700do

if(i*i-i)mod1000=0thenbegininc(count);write(i:8);end;

writein;writeln(,count=',count);

end.

6.若某不含數(shù)字0的三位正整數(shù),其平方數(shù)至少有三位同樣的數(shù)字,則稱該三位數(shù)為三重?cái)?shù)。

例如,由于:51儼=261121(有三位1),所以511為三重?cái)?shù)。求出:(★★★

★)

(1)按升序排列第10個(gè)三重?cái)?shù);(2)按升序排列前10個(gè)三重?cái)?shù)之和;

(答案:(1)258;(2)1826)

programe1;

var

i,j,k,a,b,c,x,n,count,s:longint;

aa:array[1..5]ofinteger;

begin

writein;

s:=0;count:=0;

fori:=lllto316do

begin

a:=idiv100;b:=(idiv10)mod10;c:=imod10;

if((a<>0)and(b<>0)and(c<>0))then

begin

x:=i*i;

aa[l]:=xdiv10000;

aa[2]:=(xdiv1000)mod10;

aa[3]:=(xdiv100)mod10;

aa[4]:=(xdiv10)mod10;

aa[5]:=xmod10;

forj:=lto3do

begin

n:=l;

fork:=j+lto5do

ifaa[j]=aa[k]thenn:=n+l;

ifn>2thenbeginwriteln(i:8,x:8);s:=s+i;count:=count+l;break;end;

end;

end;

ifcount=10thenbreak;

end;

writeln(s:8);

end.

7.滿足下列兩個(gè)條件:(a)千位數(shù)字與百位數(shù)字相同(非0),十位數(shù)字與個(gè)位數(shù)字相同;(b)

是某兩位數(shù)的平方。的四位正整數(shù)稱為四位平方數(shù)。例如,由于:7744=882,則稱7744為四

位平方數(shù)。求出:(1)所有四位平方數(shù)的數(shù)目;(2)所有四位平方數(shù)之和。

(★★)

(分析:最小四位數(shù)1000是3L6的平方,最大的四位數(shù)9999是99.9的平方)

(答案:①1;②7744)

programe;

var

i,x,count,s:longint;

begin

writein;count:=0;s:=0;

fori:=32to99do

begin

x:=i*i;

if((xdiv1000)=((xdiv100)mod10))and(((xdiv10)mod10)=(xmod10))then

begininc(count);s:=s+x;end;

end;

writeln(,count=,,count,'s=\s);

end.

8.其平方等于某兩個(gè)正整數(shù)平方之和的正整數(shù)稱為弦數(shù)。例如,由于32+42=52,因此5為弦數(shù)。

求[121,130]之間:(1)弦數(shù)數(shù)目;(2)最小的弦數(shù);(3)最大的弦數(shù)。(★★

★)

(分析:設(shè)a?+b2=c2,且a〈b,這樣可以控制出現(xiàn)重復(fù)弦數(shù))

(答案:①4;②122;③130)

programe;

var

i,j,k,x,count:longint;

begin

writein;count:=0;

fori:=121to130do

begin

x:=trunc(sqrt(i*i/2));

forj:=ltoxdo

begin

k:=trunc(sqrt(i*i-j*j));

if(i*i=j*j+k*k)then

begininc(count);break;end;

end;

end;

writeln(,count=\count);

end.

9.求滿足以下三個(gè)條件:(a)X2+Y2+Z2=512;(b)X+Y+Z之值最大;(c)X最小。的一組X、

Y、Z的值。(★★★★)

(答案:X=22;Y=31;Z=34)

programe1;

var

x,y,z,n,m,maxs,minx,xx,yy,zz:integer;

begin

writein;

n:=trunc(sqrt(51*51/3));m:=trunc(sqrt((51*51*1)/2));

maxs:=0;minx:=51;

forx:=ndownto1do

fory:=xtomdo

begin

z:=trunc(sqrt(51*51-x*x-y*y));

if(z>y)and(x*x+y*y+z*z=51*51)then

if((x+y+z>maxs)or((x+y+z)=maxs))then

begin

maxs:=x+y+z;xx:=x;yy:=y;zz:=z;

end;

end;

writeln('x=',xx,'y=,,yy,*z=',zz);

end.

10.計(jì)算丫=-------sin(x+o)+。In--------(精度107)(a=0.1>x=1.0)(★)

22o

(答案:0.0295)

programe;

var

y,a,x:real;

begin

writein;a:=0.1;x:=1.0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論