第一范文网 - 专业文章范例文档资料分享平台

(信息学奥赛辅导)程序设计试题汇编(答案)

来源:用户分享 时间:2020-06-19 本文由开心的时刻 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

信息学奥林匹克竞赛辅导——程序设计试题答案部分 第1页

程序设计试题及答案

(备注:试题难度评价采取五★级评价体系,分基础、容易、一般、稍难、难五个等级。

其中的一、二、三★级都属于程序设计的基础试题级别,同学们稍加思考均有能力求得正确解答。

对于四★级试题属于程序设计试题基础级别的思考题.

五★级难度试题在此没有涉及,在程序设计高级试题中另行讲解。对于基础和容易两个级别的程序设计试题,若能够给出语句分类(如If条件语句、条件语句嵌套、循环语句、多重循环语句等)的将尽量给出。若属于13大类别的将尽量标注。)

程序设计试题几大分类:

1、素数类问题(求素数的几种算法): 2、数据排序问题(数据排序的几种方法): 3、最大公约数和最小公倍数问题(几种算法):

4、公式求解类问题(如求圆周率π、自然常数e、解方程等等): 5、编号相反处理问题:

6、约瑟夫问题(或猴子选大王问题、密码问题): 7、回文数问题:

8、高精度数值计算问题: 9、数值计算问题:

10、 进制相互转换问题: 11、 字符串倒置问题: 12、 排列与组合类问题:

13、 因子、质因子(质因数)类相关问题:

答案部分:

(程序设计的源程序没有统一的标准答案,实现程序的算法也是多种多样,但结果是唯一的,算法也有优劣之分,一个程序的优劣,关键在于是否找到了好的算法,以下程序和算法不一定就是最佳算法和最佳程序,只能仅供参考,希望同学们能够对某些程序提出更好的算法来改进程序) (经常碰到的判断是否为素数、是否为回文数、求两个数的最大公约数、求两个数的最小公倍数等问题的子函数源程序,请务必记住!)

①判断是否为素数,若是素数则返回true,若不是素数则返回false:

function prime(x:longint):boolean; var

j,y:longint; begin

prime:=true;

if x<2 then prime:=false; y:=trunc(sqrt(x)); for j:=2 to y do

if (x mod j = 0) then

begin prime:=false; exit; end;

信息学奥林匹克竞赛辅导——程序设计试题答案部分 第2页

end;

备注:1~100之间所有的素数: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个)

②判断是否为回文数,若是回文数则返回true,若不是回文数则返回false:

function huiwen(n:longint):boolean; var

m,i,j:longint;

a:array[1..10] of integer; begin

if n<0 then begin huiwen:=false; exit; end; m:=n; i:=0; huiwen:=true; repeat i:=i+1;

a[i]:=m mod 10; m:=m div 10; until m=0;

for j:=1 to (i div 2) do if a[j]<>a[i-j+1] then

begin huiwen:=false; exit; end; end;

③求最大公约数子函数,返回两个正整数的最大公约数,采用辗转相除法算法; function gcd(a,b:longint):longint; begin

if b=0 then gcd:=a

else gcd:=gcd(b,a mod b); end;

④求最小公倍数:lcm=a*b div gcd(a,b);

(以下程序设计试题来自《奥赛经典(语言篇)》) 第2章 基本语句与程序结构

例题部分:

1、 求梯形的面积。(梯形面积公式:S?(★,测试数据①

1h(a?b)) 2?b?b2?4ac2、 求一元二次方程ax+bx+C=0的两个实根。(求根公式:x1,2?)

2a2

(★,测试数据a=1,b=-5,c=6;答案:x1=2、x2=3)

3、 输入一个三位的自然数,然后把这个数的百位与个位对调,输出对调后的结果。

(★)

4、 输入三个数a、b、c,首先判断这三个数能否构成三角形,若能,则求出三角形的面积。 (提示:海伦公式S?d(d?a)(d?b)(d?c),其中d?a?b?c,a、b、c为边长) 2(★,If条件语句,测试数据a=5,b=6,c=7;答案:14.7)

信息学奥林匹克竞赛辅导——程序设计试题答案部分 第3页

5、 从键盘读入三个数,按从大到小的顺序把它们打印出来。(★,If条件语句) 6、 输入三角形的三边,判断它是否是直角三角形。

(★,If条件语句,测试数据①3、4、5;②4、5、6;答案①Yes;②No) program ex7; var a,b,c:integer; begin

reanln(a,b,c);

if (a*a+b*b=c*c ) or ( b*b+c*c=a*a ) or (c*c+a*a=b*b ) then writeln(‘yes’) else writeln(‘no’); end.

7 编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。(★★★)

program ex71;

var a,b,s:integer;(real) begin

reanln(a,b); s:=a+b; writeln(s); end.

program ex72;

var a,b,s:integer;(real) begin

reanln(a,b); s:=a-b; writeln(s); end.

program ex73;

var a,b,s:integer;(real) begin

reanln(a,b); s:=a*b; writeln(s); end.

program ex74; var a,b,s:(real); begin

reanln(a,b); s:=a/b; writeln(s); end.

8 输入一个年号,判断它是否为闰年。

(★,If条件语句,测试数据①1900;②2000;③2008;答案:①No;②Yes;③Yes) program ex8; var a:integer;

信息学奥林匹克竞赛辅导——程序设计试题答案部分 第4页

begin readln(a);

if (a mod 4=0 ) and (( a mod 100 ) mod 400=0 ) then writeln(‘yes’) else writeln(‘no’); end.

9 编程计算S=1+2+3+?+100。(★,循环语句, 答案:5050)

program e; var I,s:integer; begin s:=0;

for i:=1 to 100 do s:=s+I; writeln(s); end.

相关练习:

(1)S?1?111????; 23100program e1;

var I:integer; s:real; begin s:=0;

for i:=1 to 100 do s:=s+1/I; writeln(s); end.

(2)S?1?2???100; program e2; var I,s:integer; begin s:=0;

for i:=1 to 100 do s:=s+I*i; writeln(s); end.

(3)S?2?4?6???100; program e3; var I,s:integer; begin s:=0;

for i:=1 to 50 do s:=s+I*2;

222信息学奥林匹克竞赛辅导——程序设计试题答案部分 第5页

writeln(s); end.

(4)S?1?4?7?10???100; program e; var I,s:integer; begin s:=0;

for i:=1 to 100 do if I mod 3=1 then s:=s+I; writeln(s); end.

(相关练习答案:(1)5.19(保留2为小数);(2)338350;(3)2550;(4)1717) a) 根据公式

?26?1?111????,计算圆周率的π值。 2232n2(★★,循环语句,测试数据n=10000;答案:3.1414971639)

program e; var i:longint; s:real; begin

writeln; s:=0;

for i:=1 to 10000 do s:=s+1/(i*i); writeln(sqrt(6*s)); end.

b) 计算n!。(n!=1×2×3×?×n,取n=10)

(★★,循环语句,10!=3628800) program e11; const n=10; var I,s:integer; begin s:=1;

for i:=1 to n do s:=s*i; writeln(s); end.

c) 已知一对兔子,每个月可以生一对小兔,而小兔过一个月后也可生一对小兔。即兔子的对数

是:第一个月1对,第二个月2对,第三个月3对,第四个月5对,??,假设兔子的生育期是12个月,并且不死,问一年后,这对兔子有多少对活着的后代?(Fibonacci数列问题) (★★,循环语句, 1、2、3、5、8、13、21、34、55、89、144、233;答案233)

program work(input,output); var i:integer;{循环变量}

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新自然科学(信息学奥赛辅导)程序设计试题汇编(答案) 全文阅读和word下载服务。

(信息学奥赛辅导)程序设计试题汇编(答案) .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1086917.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top