1.编程大题—数码管显示
在电梯、家用电器中,随处可见数码管显示的应用。一般是7个发光管组成8字形的排列,可以显示0-9的数字。我们可以给这7个发光管编号,以便区分它们:
我们给出了一个用于模拟这个显示过程的程序,并提供了源代码。输入数字,可以在控制台示意这些数字的对应数码管显示的效果,亮的管显示为“@”, 不亮的管显示为“.”。
程序的主要用途是:决定哪个数字由哪些点亮的数码管组成。因为不能控制真的数码管,所以采用了一个字符缓冲区来模拟效果。
运行ShowDigit.exe文件,可以看到最终的效果。
我们给出的源代码含有若干错误或缺陷(对照ShowDigit.exe的效果),请考生予以指出并完善。
1.指出错误的原因、位置,并改正。
2.未完成的功能(按比率放大)需要选手完成。提交源代码和简要注释。
2.编程大题—点阵汉字
我们看到屏幕上显示的汉字的字型有两种表达方式:一种称为矢量方式,一种称为点阵方式。其中的点阵方式较为简单,其原理就是好比:铺地砖。有的铺为白色,有的铺为黑色,只要精心安排,就会组成我们希望的图案,当然也可以是汉字。
瓷砖越多,铺出的图案效果越细腻,这就是点阵的规模。
16点阵十分常用,是把一个汉字用16 x 16 = 256个像素点来描绘。
每个bit代表1个像素点,16点阵的字模需要256个像素点信息,故需32字节
字节的排列与16点阵像素的对应关系如下表:
第0字节 第1字节
第2字节 第3字节
.......
.......
第14字节 第15字节
也就是说:每1行的16个点由2个字节提供。顺序是:从上到下,从左到右。
当我们需要记录一个汉字信息的时候,当然不是存储汉字的字型,而是存储它的编码。汉字可以有多种编码的规则,其中GB2312的编码规则是:一个汉字用两个字节表示,前一个字节表示区号,后一个表示区中的偏移序号。
每个区有94个汉字。区号和序号的编码都是从 0xA1开始(为了避免和西文冲突)
已知某个汉字的gb2312编码,就可以计算出它在字模文件中所在的绝对位置。
我们给出了一个用于理解这个原理的程序,输入一个汉字(实际上得到的是它的GB2312编码),就可以从字模文件(HZK16.DAT)中读出字型信息。再设法取出对应位的信息,把“瓷砖”铺到屏幕上。
程序的执行文件是完整的,可以动手测试它。
程序的源代码是残缺的,其中最重要的向屏幕输出函数等待考生完成。
3.编程大题—摩尔斯码
程序描述:
虽然摩尔斯发明了电报,但他缺乏相关的专门技术。他与艾尔菲德·维尔签定了一个协议,让他帮自己制造更加实用的设备。艾尔菲德·维尔构思了一个方案,通过点、划和中间的停顿,可以让每个字元和标点符号彼此地发送出去。他们达成一致,同意把这种标识不同符号的方案放到摩尔斯的专利中。这就是现在我们所熟知的美式摩尔斯电码,它被用来传送了世界上第一条电报。
国际摩尔斯码表示数字的方案是:
0:————— 1:·———— 2:··——— 3:···—— 4:····— 5:····· 6:—···· 7:——··· 8:———·· 9:————·
每个“划线”发送一个长音,“点”发送一个短音。如果再加入一些空白规则,可以进一步把数字组合代表某个汉字。
假设我们收到了长音、短音、停顿(空白)构成的电报信息,为了方便模拟,我们这里用一个文本文件a.txt记录了这些信息。观察这个文件会发现,它只由点、划、空格组成。
我们规定:每个数字发送一个空格,每组数字间空3个空格。
请编写程序,把一串数字编码为摩尔斯码,并写入到b.txt中,再读入a.txt文件,模拟把摩尔斯码还原为多个数字组的过程。
可以参看【原型】文件夹中的原型程序输出的效果。注意:程序应该通过控制台窗口来执行( windows开始菜单运行:cmd.exe )。
考试系统注意:
不同于本科组,考生文件夹中的所有内容都是开放的,不需要屏蔽。
4.编程大题—控制台菜单
程序描述:
菜单是程序中获得用户输入的有效手段。在控制台环境中菜单也能发挥重要作用。本程序的目的是要实现一个动态菜单,即:菜单的级次、内容不是固定的,而是定义在a.txt文件中。程序读入该文件,在内存中动态构建菜单项间的关系,然后运行该菜单。
考生可以参看【原型】中提供的可执行文件的效果来理解程序的要求。
注意:a.txt中的空白是Tab(制表符),不是空格。
5.编程大题—扑克牌发牌
程序描述:
一副纸牌有52张,4种花色,每种花色13张。我们能用一个整数m就表示出所有的52种情况,规则是:
m / 13: =0: 红心,=1: 方块,=2: 梅花,=3: 黑桃
m % 13: =0:2,=1:3,=2:4 .... =8:10,=9:J,=10:Q,=11: K,=12:A
比如:m = 15 就表示:方块4 m=38表示:梅花A
我们希望用程序模拟1副扑克牌随机抽取13张,发给某人的过程。
发牌后需要排序:规则是:先按花色,再按点数。花色的大小顺序是:梅花、方块、红心、黑桃。点数的顺序是:2、3、4、…. 10、J、Q、K、A。
然后,挑选出最大的连续牌型。规则是:连续张数多的大。张数相等的则花色大的大(此时与点数无关)。
可以参看【原型】文件夹中的原型程序输出的效果。注意:程序应该通过控制台窗口来执行( windows开始菜单运行:cmd.exe )。
考试系统注意:
不同于本科组,考生文件夹中的所有内容都是开放的,不需要屏蔽。
6.编程大题—计算24
程序描述:
许多人小的时候可能都玩过计算24的游戏。从一副扑克牌中任意取出4张,根据点数用加、减、乘、除计算出24。花色不计,点数:A、J、Q、K都算1,其它牌算本身的牌点。
用计算机搜索算法的解法有很多。一般是用穷举法罗列每一种情况。本程序打算用一种不同寻常的算法:随机地交换牌的位置,随机地产生运算符,看看是符合要求,大量重复这个过程,看看能否碰上运气。实验表明,当试验次数很大的时候,“运气”的概率是很高的。
请考生参看【原型】的效果,理解程序的目的。先是随机地抽取4张牌,然后用随机试探的方法求解。只要找到一个解就可以了。
需要考虑计算结果为分数的情况:( 3 + (3 / 7) ) * 7
完成TestResolve函数()。