危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2306 浏览20582719

二级C语言设计题的探讨

看了文章的题目后,我相信很多朋友都已经知道我接下来要说什么了吧,是的,我们就来谈谈C二级考试的机考题中的最后一题。参加过计算机二级考试的朋友应该都有感触,在整个考试中机考部分是最棘手的,而机考中的程序设计题又是最费神,但分值也是最重的,当然这最后一题也体现了一个人的c语言功底,所以很多朋友都会说:"二级不好考!"

其实不然,大家都知道机考题是计算机评分的,前两题就是评分系统和代码一个个的比较,相同就得分,不同就是0分,但是程序设计题就不行了,因为程序很灵活,根本无法判断出,所以就特地的设计出了一个结果比较法。什么叫结果比较法呢?大家请先看下面这段代码:

很熟悉吧,这是我从机上模拟软件中随机贴上来的一道程序设计题,大家注意看我代码后面的星号部分,可能有的朋友还没有看懂,我来解释一下注释部分的作用。

整个程序就是以写的方式打开out.dat这个文件,没有的话就创建一个,然后调用题目让我们写的fun()函数,并将结果写入至out.dat这个文件中。那什么是结果比较法呢?就是刚才说的将评分系统里的结果和out.dat里面的数据进行比较,如果一样那40分就是你的了。讲到这儿应该很明显了吧,只要我们把正确的结果贴到out.dat中就万事大吉了。

第一,我们要让代码正常编译执行并生成这个out.dat文件,学过C语言的朋友都知道,fun函数前面的数据类型代表的是返回值的类型,如果是void的话就表示没有返回值,也就是不用写"return(返回值)",因为上面的代码中是"void fun(int m,int k,int xx[])",所以我们什么也不用做直接编译就可以了。大家注意如果是缺省的,是其它的类型,那么在fun函数体里面加上一句"return 0;"就可以正常的编译执行了。Out.dat-程序上的结果是不是一模一样啊!这说明了我的想法是正确的,呵呵。我们把out.dat改一下直接把结果贴上去。

可以看到在我改了out.dat后,真正的fun函数确实是空的,我什么也没有写,但是40分确实也拿到手了。呵呵,看到这里大家是不是都有些兴奋啊,可别高兴的太早了,在修改的时候还有很多需要注意的地方。

除了结果要一一对应外,还有就是其输出到out.datr+的格式,比如是左对齐,还是右对齐,是占几个宽度还是写一个就空几格、要不要回车换行等等。这个大家都要有充分的把握,不然程序对比的时候有一个不一样那可就是0分了。就比如上例,只要输出一个数之后再加上一个空格就可以了。当然了,通过我们不断的阅读源代码以及练习,再加上细心的修改应该没有问题的。

刚才讲的是最简单的一种,但是最近我在研究的时候却发现了另一种判断方法,这种方法更加的严格和复杂,其实原理还是和上面的一样,是一个一个对比的,但是在难度上加大了,大家请看我下面这段代码:

其fun()函数我已经给出了正解,并能正常运行,可以看到在NONO()函数中打开了两个文件,其中就有我们的bc5.out,这个文件就是系统用来判断结果的文件。那么bc5.in是千吗的呢?在其中的for循环中我们可以看出,它先读取bc5.in中的一个数据,然后在调用fun()函数,fun()函数处理完后就将结果输入到bc5.out中。细心的朋友已经注意到了,它输出的格式后面是""%u\n"",即输出一个无符号整数外还换了一行,循环是从O到19,也就是20次,所以这个bc5.in文件中一定放的是测试其fun()函数功能的测试数据。是我将正确的答案写上后并正确的编译运行后分别打开out文件和int文件里的内容,大家结合源代码就可以看出规律了吧。

当bc5.in的第一个数是1234的时候,out文件就写入一个234,接着输入一个回车换行再继续,当in文件中是6456的时候,out文件就会在刚才换行的位置上接着写入456,就这样一直把in文件中的数据读完,也就是20次。

这类的判断方法极大的挑战了我们的耐心和细心的程度,如果你有一个没输入正确,那可就是前功尽弃了。还是那句话,多多练习和阅读程序代码就能行的。我把的fun()函数的解删除掉,自己单独写了一个out文件,并交卷。可以发现c++中的fun()函数只有"rerum O;",我只是让它正确的执行并生成了out文件。而out文件只要按照它程序的意思,也就是格式,一个一个的写入就可以得满分了,到这里文章就结束了,我写这篇文章的目的并不是让大家都去破解它,过二级之类的。我只是希望把这个问题提出来给大家去研究,去实践,在不断的积累中去提高自己的C语言编程能力,而不是一味的投机取巧,就算那些人过了又有啥用,照样不会。

相关推荐