(信息学奥赛辅导)程序设计试题汇编(答案)
- 格式:doc
- 大小:348.50 KB
- 文档页数:57
例13-4迷宫寻宝【问题描述】一个n行m列的迷宫(1<=n,m<=5),入口在左上角,规定只能向下或向右走。
迷宫的某些地方藏有不同价值(>0)的宝藏,同时又存在一些障碍无法通过。
求到达右下角出口时收集宝藏的最大值。
【输入】第一行n和m一下n行m列描述迷宫矩阵a[I,j](-1:障碍);最大值【样例输入】342-150513-16-18910【样例输出】33【分析】A[I,j]保存第i行第j列的宝藏价值。
令f[I,j]为从(1,1)走到第i行第j列时所能收集的宝藏的最大价值。
状态转移方程:F[I,j]=max{f[I-1,j],f[I,j-1]}+a[I,j](i<=n,1<=m)条件:n[I,j]<>-1初始:f[1,1]=a[1,1]目标:f[n,m]【参考程序】Const maxn=50;maxm=50;Fin=’b1.in’;Fout=’b1.out’;VarF,a:array[0..maxn+1,0..maxm+1]of integer;I,j,k,n,m,t:integer;Procedure init;BeginAssign(input,fin);Reset(input);Readln(n,m);For i:=0to n+1doFor j:=0to m+1do a[I,j]:=-1;A[0,1]:=0;For i:=1to n doFor j:=1to m doBeginRead(a[I,j]);If(a[I,j-1]=-1)and(a[i-1,j]=-1)then a[I,j]:=-1;//很关键的预处理End;Close(input);End;Function max(a,b:integer):integer;Begin max:=a;if b>a then max:=b;end;Procedure work;BeginFillchar(f,sizeof(f),0);For i:=1to n doFor j:=1to m doIf a[I,j]<>-1Then f[I,j]:=max(f[i-1,j],f[I,j-1])+a[I,j];End;Procedure print;BeginAssign(output,fout);Rewrite(output);Writeln(f[n,m]);Close(output);End;BeginInit;Work;Print;End.13-5花店橱窗布置(IOI1999)【问题描述】假设你想以最美观的方式布置花店的橱窗。
历年全国青少年信息学奥赛选择题一、单项选择题(共10题,每题1.5分,共计15分。
每题有且仅有一个正确答案)。
第14届:2008年1.在以下各项中,()不是操作系统软件。
A.SolarisB.LinuxC.SybaseD.Windows VistaE.SymbianC是数据库系统2.微型计算机中,控制器的基本功能是()。
A.控制机器的各个部件协调工作B.实现算数运算与逻辑运算C.存储各种控制信息D.获取外部信息E.存放程序和数据3.设字符串S=“Olympic”,S的非空子串的数目是()。
A.29B.28C.16D.17E.71个字符的子串(7个):"o" "l" "y" "m" "p" "i" "c",2个字符(6个):"ol" "ly" "ym" "mp" "pi" "ic" .……7个字符(1个):olympic所以:共有7+6+5+4+3+2+1=284.完全二叉树有2*N-1的结点,则它的叶子结点数目是()。
A.N-1B.2*NC.ND.2N-1E.N/2最多只能在最下层缺少结点,并且缺少的结点都在最右边,即最下层的结点都集中在该层最左边,则称此二叉树为完全二叉树。
5.将数组{8,23,4,16,77,-5,53,100}中元素从大到小按顺序排序,每次可以交换任意两个元素,最少要交换()次。
A.4B.5C.6D.7E.86.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a 那么栈容量至少应该是()。
A.6B.5C.4D.3E.27.与十进制数28.5625相等的四进制数是()A.123.21B.131.22C.130.22D.130.21E.130.20整数部分就不用说了,是130小数部分,0.5625×4=2.250.25×4=11所以是0.218.递归过程和函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
历年全国青少年信息学奥赛选择题一、单项选择题(共10题,每题1.5分,共计15分。
每题有且仅有一个正确答案)。
第14届:2008年1.在以下各项中,()不是操作系统软件。
A.Solaris B.Linux C.Sybase D.Windows Vista E.Symbian C是数据库系统2.微型计算机中,控制器的基本功能是()。
A.控制机器的各个部件协调工作B.实现算数运算与逻辑运算C.存储各种控制信息D.获取外部信息E.存放程序和数据3.设字符串S=“Olympic”,S的非空子串的数目是()。
A.29 B.28 C.16 D.17 E.71个字符的子串(7个):"o" "l" "y" "m" "p" "i" "c",2个字符(6个):"ol" "ly" "ym" "mp" "pi" "ic" .……7个字符(1个):olympic所以:共有7+6+5+4+3+2+1=284.完全二叉树有2*N-1的结点,则它的叶子结点数目是()。
A.N-1 B.2*N C.N D.2N-1 E.N/2最多只能在最下层缺少结点,并且缺少的结点都在最右边,即最下层的结点都集中在该层最左边,则称此二叉树为完全二叉树。
5.将数组{8,23,4,16,77,-5,53,100}中元素从大到小按顺序排序,每次可以交换任意两个元素,最少要交换()次。
A.4 B.5 C.6 D.7 E.86.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a 那么栈容量至少应该是()。
A.6 B.5 C.4 D.3 E.27.与十进制数28.5625相等的四进制数是()A.123.21 B.131.22 C.130.22 D.130.21 E.130.20整数部分就不用说了,是130小数部分,0.5625×4=2.250.25×4=1所以是0.218.递归过程和函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
奥林匹克信息学竞赛试题一、选择题(每题2分,共10分)1. 在C++语言中,以下哪个是正确的整数类型定义?A. int a = 10;B. float a = 10;C. double a = 10;D. char a = 10;2. 以下哪个算法的时间复杂度为O(n^2)?A. 归并排序B. 快速排序C. 线性搜索D. 二分查找3. 在数据结构中,以下哪个是线性结构?A. 树B. 图C. 栈D. 队列4. 以下哪个是递归算法的典型应用?A. 快速排序B. 归并排序C. 深度优先搜索D. 广度优先搜索5. 在数据库中,以下哪个操作用于删除表中的记录?A. SELECTB. INSERTC. UPDATED. DELETE二、简答题(每题5分,共20分)1. 解释什么是贪心算法,并给出一个实际应用的例子。
2. 描述什么是动态规划,并解释它与贪心算法的区别。
3. 什么是哈希表?请简述其工作原理。
4. 什么是图的深度优先搜索(DFS)?请描述其基本步骤。
三、编程题(每题15分,共30分)1. 编写一个函数,实现对一个整数数组的快速排序算法。
2. 编写一个程序,实现对一个字符串进行反转。
四、综合题(每题20分,共40分)1. 给定一个无向图,编写一个程序来找到图中的最短路径。
请使用Dijkstra算法实现。
2. 设计并实现一个算法,用于解决背包问题,其中背包的容量为W,有n个物品,每个物品有其价值和重量。
五、附加题(10分)1. 假设你正在开发一个在线购物平台,需要实现一个推荐系统。
描述你将如何使用机器学习算法来实现这一功能。
结束语:奥林匹克信息学竞赛不仅考验参赛者的编程技巧,更考验他们的逻辑思维和创新能力。
希望本试题能够激发你的学习兴趣,帮助你在竞赛中取得优异的成绩。
信息学奥赛基础知识习题(答案版)一、选择题(下列各题仅有一个正确答案,请将你认为是正确的答案填在相应的横线上)1.我们把计算机硬件系统和软件系统总称为 C 。
(A)计算机CPU (B)固件(C)计算机系统(D)微处理机2.硬件系统是指 D .(A)控制器,运算器 (B)存储器,控制器(C)接口电路,I/O设备 (D)包括(A)、(B)、(C) 3。
计算机软件系统包括 B .A) 操作系统、网络软件 B)系统软件、应用软件C)客户端应用软件、服务器端系统软件 D)操作系统、应用软件和网络软件4.计算机硬件能直接识别和执行的只有 D .(A)高级语言(B)符号语言(C)汇编语言 (D)机器语言5.硬盘工作时应特别注意避免 B .(A)噪声(B)震动 (C)潮湿 (D)日光6.计算机中数据的表示形式是 C 。
(A)八进制 (B)十进制 (C)二进制(D)十六进制7.下列四个不同数制表示的数中,数值最大的是 A .(A)二进制数11011101 (B)八进制数334(C)十进制数219 (D)十六进制数DA 8.Windows 9x操作系统是一个 A 。
(A)单用户多任务操作系统(B)单用户单任务操作系统(C)多用户单任务操作系统(D)多用户多任务操作系统9.局域网中的计算机为了相互通信,必须安装___B__。
(A)调制解调器(B)网卡(C)声卡(D)电视卡10.域名后缀为edu的主页一般属于__A____。
(A)教育机构(B)军事部门(C)政府部门(D)商业组织11。
香港在世界上注册的顶级域名是__A____。
(A)hk(B)cn(C)tw(D)com12.计算机能够自动、准确、快速地按照人们的意图进行运行的最基本思想是( D )。
(A)采用超大规模集成电路(B)采用CPU作为中央核心部件(C)采用操作系统 (D)存储程序和程序控制13.设桌面上已经有某应用程序的图标,要运行该程序,可以 C 。
(A)用鼠标左键单击该图标 (B)用鼠标右键单击该图标(C)用鼠标左键双击该图标(D)用鼠标右键双击该图标14.若己选定某文件,不能将该文件复制到同一文件夹下的操作是 C 。
第1~10题为基础题,第11~20题为提高题,第21~33为综合题注:因为在本文档中需要用到一些特殊的数学符号(如:求和号、分数等),所以当您在百度文库中浏览时,一些数学符号可能会显示不出来,不过当您把本文档下载下来在本地浏览时,所有的符号即可全部都显示出来。
^_^基础题:【1 Prime Frequency】【问题描述】给出一个仅包含字母和数字(0-9, A-Z 以及a-z)的字符串,请您计算频率(字符出现的次数),并仅报告哪些字符的频率是素数。
输入:输入的第一行给出一个整数T( 0<T<201),表示测试用例个数。
后面的T行每行给出一个测试用例:一个字母-数字组成的字符串。
字符串的长度是小于2001的一个正整数。
输出:对输入的每个测试用例输出一行,给出一个输出序列号,然后给出在输入的字符串中频率是素数的字符。
这些字符按字母升序排列。
所谓“字母升序”意谓按ASCII 值升序排列。
如果没有字符的频率是素数,输出“empty”(没有引号)。
注:试题来源:Bangladesh National Computer Programming Contest在线测试:UV A 10789提示先离线计算出[2‥2200]的素数筛u[]。
然后每输入一个测试串,以ASCLL码为下标统计各字符的频率p[],并按照ASCLL码递增的顺序(0≤i≤299)输出频率为素数的字符(即u [p[i]]=1且ASCLL码值为i的字符)。
若没有频率为素数的字符,则输出失败信息。
【2 Twin Primes】【问题描述】双素数(Twin Primes)是形式为(p, p+2),术语“双素数”由Paul Stäckel (1892-1919)给出,前几个双素数是(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43)。
在本题中请你给出第S对双素数,其中S是输入中给出的整数。
信息学奥赛考试题型及答案一、选择题1. 在计算机科学中,以下哪个选项不是数据结构的基本类型?A. 线性结构B. 树形结构C. 图形结构D. 量子结构答案:D2. 以下哪种算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序答案:C二、填空题1. 在信息学奥赛中,常用的图遍历算法有深度优先搜索(DFS)和______。
答案:广度优先搜索(BFS)2. 哈希表是一种通过______来访问数据的数据结构。
答案:键值对三、简答题1. 描述二分查找算法的基本步骤。
答案:二分查找算法的基本步骤包括:首先确定要查找的元素所在的区间,然后取区间的中间值与目标值进行比较。
如果中间值等于目标值,则查找成功;如果中间值小于目标值,则在区间的右半部分继续查找;如果中间值大于目标值,则在区间的左半部分继续查找。
重复以上步骤,直到找到目标值或区间为空。
2. 解释什么是递归,并给出一个递归算法的例子。
答案:递归是一种在函数中调用自身的编程技巧,用于解决可以分解为相似子问题的问题。
一个递归算法的例子是计算阶乘,即n的阶乘(n!)可以通过递归函数实现:n! = n * (n-1)!,其中基本情况是0! = 1。
四、编程题1. 给定一个整数数组,请编写一个函数,找出数组中第二大的数。
答案:以下是一个可能的解决方案的伪代码:```function findSecondLargest(nums):if length of nums < 2:return nullmax1 = max2 = -∞for num in nums:if num > max1:max2 = max1max1 = numelse if num > max2 and num != max1:max2 = numreturn max2```2. 实现一个函数,判断一个链表是否为回文结构。
答案:以下是一个可能的解决方案的伪代码:```function isPalindrome(head):if head is null or next of head is null:return truefast = slow = headwhile fast and next of fast:fast = next of next of fastslow = next of slowsecondHalf = reverse(slow)while secondHalf:if head.value != secondHalf.value:return falsehead = next of headsecondHalf = next of secondHalfreturn true```注意:以上编程题答案中的伪代码仅供解题思路参考,实际编程语言实现可能有所不同。
2023年全国中学生信息学奥赛试题及解析概述本文档为2023年全国中学生信息学奥赛试题及解析的内容。
试题及解析以下是2023年全国中学生信息学奥赛的部分试题及其解析:试题一问题描述:给定一个整数数组,找出其中和最大的连续子数组,并返回其和。
示例:输入:[-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。
解析:此问题可以使用动态规划的思想来解决。
定义一个变量`maxSum` 存储最大和,初始值为数组的第一个元素。
遍历数组,如果当前元素之前的子数组和为正数,则将当前元素加入子数组中,并更新 `maxSum` 的值。
如果当前元素之前的子数组和为负数,则将当前元素作为新的子数组的起点,并重新计算子数组的和。
遍历完成后,`maxSum` 即为所求的最大和。
试题二问题描述:给定一个字符串,找到最长的不含重复字符的子串的长度。
示例:输入:abcabcbb输出:3解释:最长的不含重复字符的子串是 "abc",其长度为 3。
解析:此问题可以使用滑动窗口的思想来解决。
定义一个变量`maxLen` 存储最长子串的长度,一个哈希表 `charMap` 存储字符和其在字符串中的索引位置。
遍历字符串,当遇到重复字符时,更新滑动窗口的起点为重复字符的下一个位置,并更新 `charMap` 中重复字符的索引位置。
每次遍历都计算滑动窗口的长度,如果大于`maxLen` 则更新 `maxLen` 的值。
遍历完成后,`maxLen` 即为所求的最长子串的长度。
结论本文提供了2023年全国中学生信息学奥赛的部分试题及其解析,主要涵盖了动态规划和滑动窗口两种算法思想。
一、初级编程入门题顺序结构1、请编写一个程序,求一个正方的周长。
2、请编写一个程序,求一个长方形的周长。
3、请编写一个程序,求一个三角形的周长。
4、请编写一个程序,从键盘输入两个整数,要求求和然后输出和。
例如:输入1 4输出55、要求从键盘输入一个三位数,要求百位变十位,十位变个位,个位变百位:例如:输入123输出3126、输入一个四位数要求按如下交换输出:例如:输入1234输出43217、输入一个四位数要求输入各位数字的和。
例如:输入4567输出228、编一程序,键盘输入整数A,B的值,然后打印A除以B的商的整数部分及余数。
9、输入一个时、分、秒,把它转换为一个秒数。
例如输入2 3 4 代表2小时3分钟4秒输出7384 代表一共有7384 秒10、求三角形面积:给出三角形的三个边长为a ,b ,c ,求三角形的面积。
提示:根据海伦公式来计算三角形的面积:S =2cb a ++;Area =))()((c S b S a S S ---11、编一程序,从键盘输入整数A ,B 的值,然后把A ,B 的值交换后输出。
从键盘输入两个整数,打印出更小的那个数。
12、设X ,Y ,Z 的值分别是FALSE ,TRUE ,FLASE 。
写出下列逻辑表达式的值:not x and not y;true and x or y;(x and z) or (z and y);x or z and y;(4>5) and (7<8)(8>9) or ( 9<10)2 and ((3=3) or (3<7))选择结构13、读入三个整数,从小到大输出。
14、从键盘输入一个数,判断它的奇偶性,如果是奇数则输出yes,否则输出no 。
15、从键盘读入一个数,判断它的正负。
是正数,则输出"+",是负数,则输出"-"。
16、从键盘输入一个数,如果是两位数那么输入yes 否则输入no 。
信息学奥赛辅导(C语言一)信息学奥赛辅导:C语言复习题(一)第1~3章练习题一、选择题1、一个C语言程序总是从____A、主过程开始执行B、主函数开始执行C、子程序开始执行D、主程序开始执行2、若num、a、b和c都是int型变量,则执行表达式num=(a=4,b=16,c=32)后num的值为_A、4B、16C、32D、523、下面四个选项中,均是C语言关键字的选项是____A、auto enum includeB、switch typedef continueC、signed union scanfD、if struct type4、下面四个选项中,均是合法整型常量的选项是____A、160 -0xffff 011B、-0xcdf 01a 0xeC、-01 986,012 0668D、-0x48a 2e5 0x5、下面四个选项中,均是合法浮点数的选项是___A、+1e+1 5e-9.4 03e2B、-.60 12e-4 -8e5C、123e 1.2e-.4 +2e-1D、-e3 .8e-4 5.e-0A、'\'' '\\' '\n'B、'\' '\017' '\"'C、'\018' '\f' 'xab'D、'\\0' '\101' 'xlf'7、下面正确的字符常量是____A、'\X17'B、'\80'C、'\\'D、"\n"8、下面四个选项中,均是正确的八进制数和十六进制数的选项是____A、-10 0x8f -011B、0abc -017 0xcC、010 -0x11 0xf1D、0a12 -0x123 -0xa9、下面四个选项中,均是正确的数值常量或字符常量的选项是____A、0.0 0f 8.9e '&'B、"a" 3.9E-2.5 1e1 '\"'C、'3' 011 0xFF00 0aD、+001 0xabcd 2e2 50.10、若有代数式,则正确的C语言表达式是____A、2*ln(x)*cos(x)/3*xB、2*ln(x)*cos(x)/(3*x)C、2*log(x)*cos(x)/3*xD、2*log(x)*cos(x)/(3*x)11、若有说明语句:char ch1='\065';char ch2="2";char ch3='2';则:ch1中____,ch2中____,ch3中____A、包含1个字符B、包含2个字符C、包含3个字符D、字符个数不确定,说明不正确12、若有运算符:>、*=、?:、%、sizeof,则将它们按运算的优先级排列的正确次序为(由低至高)____A、*=→?:→%→>→sizeofB、?:→*=→>→%→sizeof13、若有以下类型说明语句:char a;int b;float c;double d;则表达式a*b+d-c的结果类型为____A、floatB、charC、intD、double14、若有变量说明:int a=0,b=0,c=0;,以下符合C语言语法的赋值表达式是____A、a=9+b+c=a+9B、a=9+b;c=a+9;C、a=(9+b,b++)D、a=9+b++=a+715、已知字母A的ASCII码为(65)10,变量ch1为字符型,则执行语句ch1='A'+'6'-'3';后,ch1中的值为____A、DB、68C、一个不确定的值D、C16、以下运算符中优先级最高的运算符是____A、&&B、++C、?:D、!=17、若有定义:int k=7;float a=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值是___A、2.500000B、2.7500000C、3.500000D、0.00000018、sizeof(float)是____A、双精度型表达式B、一个整型表达式C、一个函数调用D、一个不合法的表达式19、设变量y为float类型,x为int类型,则以下能实现将y中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是____A、y=(y*100+0.5)/100.0B、x=y*100+0.5,y=x/100.0C、y=y*100+0.5/100.0D、y=(y/100+0.5)*100.020、设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是____A、0~255B、0~65535C、-32768~+32767D、-256~+25521、若有以下定义,则能得到值为3的表达式是____(int m=7,n=12)A、n%=(m%=5)B、n%=(m-m%5)C、n%=m-m%5D、(n%=m)-(m%=5)22、若有说明:int a=1,b=2,c=3,d=4;则表达式a<b?a:c<d?c:d的值是___< bdsfid="170" p=""></b?a:c<d?c:d 的值是___<>A、4B、3C、2D、123、若x为int类型,则逗号表达式(x=4*5,x*5),x+25的结果是___,x的值是___A、20B、100C、表达式不正确D、4524、putchar函数可以向终端输出一个____A、整型变量值B、实型变量值C、字符串D、字符或字符型变量值25、若有以下变量说明和数据的输入方式,则正确的输入语句为('└─┘'代表空格)____变量说明:float x1,x2;数据的输入方式:4.52<回车>3.5<回车>A、scanf("%f,%f",&x1,&x2);B、scanf("%f%f",&x1,&x2);C、scanf("%3.2f└─┘%2.1f",&x1,&x2);D、scanf("%3.2f%2.1f",&x1,&x2);26、若运行以下程序时,从键盘输入25,13,10<回车>,则输出结果为___{int a1,a2,a3;scanf("%d%d%d",&a1,&a2,&a3);printf("a1+a2+a3=%d\n",a1+a2+a3);}A、a1+a2+a3=48B、a1+a2+a3=25B、a1+a2+a3=10D、不确定值27、已知a、b、c为int类型变量,若有输入语句:scanf("a=%db=%dc=%d",&a,&b,&c);为使a值为1,b值为3,c值为2,从键盘输入数据的正确形式应当是____A、132<回车>B、a=1b=3c=2<回车>C、1<回车>3<回车>2<回车>D、a=1<回车>b=3<回车>c=2<回车>28、以下能正确定义整型变量x、y和z并为其赋初值5的语句是____A、int x=y=z=5;B、int x,y,z=5;C、int x=5,y=5,z=5;D、x=5,y=5,z=5;29、执行下面程序段后,x的值是____int x;printf("%d\n",(x=3*5,x+5));30、下面程序段的输出结果是____int a=023;printf("%d\n",--a);A、23B、17D、2431、已知ch是字符型变量,则不正确的赋值语句是____A、ch=5+9;B、ch='\0';C、ch='7'+'9';D、ch='a+b';32、设x,y是float型变量,则不正确的赋值语句是____A、++x;B、y=int(5);C、x*=y+1;D、x=y=0;33、设有说明:double b=0.5,c=1.5;int a=10;则正确使用了C语言库函数的赋值语句是____A、c=asin(c)+fabs(a);B、b=log10(b)+pow(b);C、c=sqrt(b-c);D、a=(int)(atan2((double)a,b)+exp(b-0.2));34、以下程序段的输出结果是____int i=1,j=4,k=2;float x=5.5,y=9.0,z;z=(i+j)/k+sqrt((double)y)*1.2/k+x;printf("%f\n",z);A、9.800000B、9.300000C、8.500000D、8.00000035、若a为int类型变量,则执行以下程序段后a的值为____a=5;a*=a/=a++;B、1C、40D、336、若a和b均为int型变量,则执行以下程序断后x的输出是____x=15;y=15;printf("%d\n",x%=(y%=2));A、0B、1C、6C、1237、若x为unsigned int类型变量,则执行以下程序段后x的值是____x=65535;printf("%d\n",x);A、65535B、1C、无定值D、-138、以下语句的执行结果是____printf("%d\n",NULL);A、1B、0C、-1无定值39、若x为int类型变量,则执行以下程序段后的输出结果是____x=0xDEF;printf("%4d,%4o,%4x\n",x,x,x);A、3567,6757,defB、3567,6757,xdefC、3567,06757,0xdefD、3567,6757,0def40、若a、b、c均为int型变量,则执行以下程序段后的输出结果为____b=(a=10,a+5,c=10);printf("a=%d,b=%d,c=%d\n",a,b,c);c=(a=10,b=5,a+b);printf("a=%d,b=%d,c=%d\n",a,b,c);A、a=10,b=15,c=10B、a=10,b=10,c=10a=10,b=5,c=10 a=10,b=5,c=10C、a=10,b=10,c=10D、a=10,b=10,c=10a=10,b=5,c=15a=10,b=5,c=541、若a1、a2、a3、a4均为char类型变量,则执行以下程序段后的输出结果为____a1='1';a2='2';a3='3';a4='4';printf("%1c\n",a1);printf("%2c\n",a2);printf("%3c\n",a3);printf("%4c\n",a4);A、1B、1C、1D、输出格式的描述符不正确2 2 023 3 0034 4 000442、执行语句printf("The program's name is c:\\tools\book.txt");后的输出是____B、The program's name is c:\tools book.txtC、The program's name is c:\\tools book.txtD、The program's name is c:\toolook.txt43、设a、b、c、d均是int类型变量,为了使以下程序段的输出为:1234+123+12+1,正确的输入形式应当是____scanf("%4d+%3d+%2d+%1d",&a,&b,&c,&d);printf("%4d+%3d+%2d+%1d",a, b, c, d);A、1234123121<回车>B、1234123412341234<回车>C、1234+1234+1234+1234<回车>D、1234+123+12+1<回车>44、设c1、c2均是char类型变量,则以下不正确的函数调用是____A、scanf("c1=%cc2=%c",&c1,&c2);B、getchar( )C、putchar(c2);D、putchar(c1,c2)45、逻辑运算符两侧运算对象的数据____A、只能是0或1B、只能是0或非0正数C、只能是整型或字符型数据D、可以是任何类型的数据46、判断char型变量c1是否为大写字母的正确表达式是____A、'A'<=c1<='Z'B、(c1>='A')&(c1<='Z')C、(c1>='A')&&(c1<='Z')D、('A'<=c1) AND ('Z'>=c1)47、执行以下程序段后的a值是___,b的值是___,c的值是___int a=5,b=6,c=1,x=2,y=3,z=4;A、0B、6C、1D、548、设i、j、和k是int型变量,且i=3,j=4,k=5,则以下值为0的表达式是_A、'i'&&'j'B、i<=jC、i||j+k&&j-kD、!((i<j)&&!k||1)< bdsfid="334" p=""></j)&&!k||1)<>49、设ch是char类型变量,其值是A,则以下表达式的值是____ch=(ch>='A'&&ch<='Z')?(ch+32):chA、ZB、AC、aD、z50、若希望当num的值为奇数时,表达式的值为“真”,num 的值为偶数时,表达式的值为“假”。
程序设计试题及答案(备注:试题难度评价采取五★级评价体系,分基础、容易、一般、稍难、难五个等级,其中的一、二、三★级都属于程序设计的基础试题级别,同学们稍加思考均有能力求得正确解答,对于四★级试题属于程序设计试题基础级别的思考题,五★级难度试题在此没有涉及,在程序设计高级试题中另行讲解。
对于基础和容易两个级别的程序设计试题,若能够给出语句分类(如If条件语句、条件语句嵌套、循环语句、多重循环语句等)的将尽量给出。
若属于13大类别的将尽量标注。
)程序设计试题几大分类:1、素数类问题(求素数的几种算法):2、数据排序问题(数据排序的几种方法):3、最大公约数和最小公倍数问题(几种算法):4、公式求解类问题(如求圆周率π、自然常数e、解方程等等):5、编号相反处理问题:6、约瑟夫问题(或猴子选大王问题、密码问题):7、回文数问题:8、高精度数值计算问题:9、数值计算问题:10、进制相互转换问题:11、字符串倒置问题:12、排列与组合类问题:13、因子、质因子(质因数)类相关问题:答案部分:(程序设计的源程序没有统一的标准答案,实现程序的算法也是多种多样,但结果是唯一的,算法也有优劣之分,一个程序的优劣,关键在于是否找到了好的算法,以下程序和算法不一定就是最佳算法和最佳程序,只能仅供参考,希望同学们能够对某些程序提出更好的算法来改进程序)(经常碰到的判断是否为素数、是否为回文数、求两个数的最大公约数、求两个数的最小公倍数等问题的子函数源程序,请务必记住!)①判断是否为素数,若是素数则返回true,若不是素数则返回false:function prime(x:longint):boolean;varj,y:longint;beginprime:=true;if x<2 then prime:=false; y:=trunc(sqrt(x)); for j:=2 to y doif (x mod j = 0) thenbegin prime:=false; exit; end; 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; varm,i,j:longint;a:array[1..10] of integer; beginif 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] thenbegin huiwen:=false; exit; end; end;③求最大公约数子函数,返回两个正整数的最大公约数,采用辗转相除法算法; function gcd(a,b:longint):longint; beginif b=0 then gcd:=aelse gcd:=gcd(b,a mod b); end;④求最小公倍数:lcm=a*b div gcd(a,b);(以下程序设计试题来自《奥赛经典(语言篇)》) 第2章 基本语句与程序结构例题部分:1、 求梯形的面积。
(梯形面积公式:1()2S h a b =+) (★,测试数据①2、 求一元二次方程ax 2+bx +C =0的两个实根。
(求根公式:1,22b x a-=(★,测试数据a =1,b =-5,c =6;答案:x 1=2、x 2=3)信息学奥林匹克竞赛辅导——程序设计试题答案部分 第3页3、 输入一个三位的自然数,然后把这个数的百位与个位对调,输出对调后的结果。
(★)4、 输入三个数a 、b 、c ,首先判断这三个数能否构成三角形,若能,则求出三角形的面积。
(提示:海伦公式S =2a b cd ++=,a 、b 、c 为边长) (★,If 条件语句,测试数据a =5,b =6,c =7;答案:14.7)5、 从键盘读入三个数,按从大到小的顺序把它们打印出来。
(★,If 条件语句)6、 输入三角形的三边,判断它是否是直角三角形。
(★,If 条件语句,测试数据①3、4、5;②4、5、6;答案①Yes ;②No )7、 编写一个根据用户键入的两个操作数和一个运算符,由计算机输出运算结果的程序。
(★★★) 8、 输入一个年号,判断它是否为闰年。
(★,If 条件语句,测试数据①1900;②2000;③2008;答案:①No ;②Yes ;③Yes ) 9、 编程计算S =1+2+3+…+100。
(★,循环语句, 答案:5050)相关练习:(1)111123100S =++++; (2)22212100S =+++;(3)246100S =++++;(4)14710100S =+++++;(相关练习答案:(1)5.19(保留2为小数);(2);(3)2550;(4)1717)10、根据公式22221111623n π=++++,计算圆周率的π值。
(★★,循环语句,测试数据n =10000;答案:3.) program e; vari:longint; s:real; beginwriteln; s:=0;for i:=1 to 10000 do s:=s+1/(i*i); writeln(sqrt(6*s)); end.11、计算n!。
(n!=1×2×3×…×n ,取n =10)(★★,循环语句,10!=)12、已知一对兔子,每个月可以生一对小兔,而小兔过一个月后也可生一对小兔。
即兔子的对数是:第一个月1对,第二个月2对,第三个月3对,第四个月5对,……,假设兔子的生育期是12个月,并且不死,问一年后,这对兔子有多少对活着的后代?(Fibonacci 数列问题)(★★,循环语句, 1、2、3、5、8、13、21、34、55、89、144、233;答案233)13、求两个整数a与b的最大公约数和最小公倍数。
(★,循环语句、If条件语句,测试数据16和24,最大公约数8,最小公倍数48)14、利用格利高公式求π。
11114357π=-+-+,直到最后一项的值小于10-6为止。
(★★★,循环语句)(答案:3.E+00)program e2_32;varn,fh:longint;s,t,p:real;beginwriteln; n:=1; s:=0; t:=1; fh:=1;while (abs(t)>=1e-6) dobegin t:=fh/n; s:=s+t; n:=n+2; fh:=-fh; end; p:=4*s;writeln('pi=',p);end.相关练习:利用公式11181357911π=+++⨯⨯⨯,求π。
(计算前10000项时,答案为3.)program e;vari,a,b:longint;x,s:real;beginwriteln; s:=0;for i:=1 to 10000 do begin a:=(4*i-3); b:=(4*i-1); s:=s+1/(a*b); end;writeln(8*s);end.15、求100~999中的水仙花数。
(若三位数ABC,ABC=A3+B3+C3,则称ABC为水仙花数。
例如153,13+53+33=153,则153是水仙花数。
)(★★,循环语句)(答案:153、370、371、407)program e12;vari,a,b,c:integer;beginwriteln;for i:=100 to 999 dobegina:=i div 100;b:=(i mod 100) div 10;c:=i mod 10;if i=a*a*a+b*b*b+c*c*c then write(i:8);end;end.16、试编写能够打印输出如下图形的程序。
(★★,循环语句)AAAAAAAAA信息学奥林匹克竞赛辅导——程序设计试题答案部分 第5页AAAAAAA AAAAA AAAAprogram e; const n=5; vari,j:integer; begin writeln;for i:=1 to n do beginwrite('':i);for j:=1 to (n-i)*2+1 do write('A'); writeln; end; end.17、四个学生上地理课,回答我国四大淡水湖大小时这样说:(★★★)甲:“最大洞庭湖,最小洪泽湖,鄱阳湖第三。
” 乙:“最大洪泽湖,最小洞庭湖,鄱阳湖第二,太湖第三。
” 丙:“最小洪泽湖,洞庭湖第三。
” 丁:“最大鄱阳湖,最小太湖,洪泽湖第二,洞庭湖第三。
”对于每个湖的大小,每个学生仅答对一个,请编程确定四个湖的大小。
习题部分:1、 已知三角形的两边a 、b 和夹角jc 的值,求第三边(已知条件由键盘输入)。
(★)(提示:余角公式2222cos c a b ab c =+-) (测试数据:输入a =3、b =4、jc =90;输出5)program e2_5; vara,b,c,jc:real; beginwriteln('input a,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、 编写程序把一个四位整数3581颠倒成1853。
(★)program e; const n=3581; vara,b,c,d:integer; begin writeln;a:=n mod 10;b:=(n div 10) mod 10; c:=(n div 100) mod 10;d:=n div 1000;writeln(a,b,c,d);end.相关练习:任意输入一个正整数,颠倒输出该数。
program e;varn:longint;beginwriteln; writeln('input a integer number:'); readln(n);repeatwrite(n mod 10); n:=n div 10;until n=0;end.3、输入a、b、c三个数,打印出最大者。