C语言上机注意事项.doc
计算机二级VB上机考试部分注意点 VB上机考试部分注意点:程序调试题:只有一个Modify.bas模块文件,在进行调试的时候先添加一个窗体,通过窗体调用模块函数进行调试,例如:新建窗体后,添加一个命令按钮command1,在该命令按钮的click事件中写入:Private sub Command1_Click()Call Sort() /注意Sort为Modify.bas模块文件中的函数名End sub调试修改都在Modify.bas模块文件中进行,只能修改红色的标记部分运行时可能要指定启动窗体为新建的窗体Form1调试成功后对工程进行正确保存,保存位置题目里有提示,一般为考生文件夹下paper目录,切记一定要正确保存过Modify.bas。做完后关闭VB,返回系统;程序设计题:进入做题后会有个Design.exe文件供参考,看清题意,进行做题,特别注意窗体上的控件名要和题目上要求的一致。边做边保存,以防意外死机,注意保存的位置,保存的文件包括窗体文件(frm文件)和工程文件(vbp文件)做完后关闭VB,返回系统。全国计算机二级C语言上机编程题详细分析(1)请编一个函数fun,它的功能是:根据以下公式求的值(要求满足精度0.0005,即,某项小于0.0005时停止迭代):程序运行后,如果输入精度0.0005,则程序输出多少。注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。试题源程序如下:#include stdio.h#include math.hdouble fun(double eps)main() double x;printf("Input eps:");scanf("%lf",&x); printf("neps=%lf, PI=%lfn",x,fun(x);分析:(1)本题所用基本算法应为累加。假设累加值放在变量s中,累加项放在变量t中,累加操作由语句s=s+t;来实现。(2)若称 为第1累加项,则其前的1为第0累加项,其后的一项为第2累加项,按给定的公式可知,从第1累加项开始,后一项的累加项是前一项的值乘以 。所以当前的累加项应当是:t=t*n/(2.0*n+1.0)。表达式右边的t中是前一项的值,表达式左边的t为当前的每累加累加项。请注意,不要写成:t*n/(2*n+1)而进行整除。(3)若第0累加项的1作为s的初值,语句:s=s+t;执行n次,就把第1到第n项累加到了s中。每进行一次累加,n值增1。(4)把以上操作放在循环中。按本题规定,当某项小于eps(0.0005)时停止迭代,因此若用while循环,可用t=eps作为控制循环进行的条件:while( t=eps ) s+=t; n+; t=t*n/(2.0*n+1); (5)注意应给所用变量赋适当的初值。(6)退出循环后,函数的返回值应是:2*s。全国计算机二级C语言上机编程题详细分析(2)请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是:删除所有值为y的元素。已在主函数中给数组元素赋值,y的值由主函数通过键盘读入。注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。试题源程序如下:#include stdio.h#define M 20void fun(int bb,int *n, int y)main() int aaM=1,2,3,3,2,1,1,2,3,4,5,4,3,2,1, n=15, y, k;printf("The original data is: n");for(k=0; kn; k+ ) printf("=",aak);printf("nEnter a number to deleted: "); scanf("%d",&y);fun(aa, &n, y);printf("The data after deleted %d: n",y);for(k=0; kn; k+ ) printf("=",aak);printf("nn");分析:(1)本题的基本算法是查找和删除。(2)若循环控制变量是i,通过for循环逐个检查元素中的值,把数组元素中不等于y的值从头开始重新放入bb所指的数组中。用i作为下标,逐个引用数组元素;用i作为下标,把不等于y的元素中的值逐一重新放入bb所指的数组中。这一操作可用以下语句来实现:if(bbi!=y)bbj+=bbi;(3)因为已删除了与y值相等的元素,因此,数组中数据的个数已经改变;所以循环结束后,需要重新给n所指变量赋值。退出循环后,变量j中存放的是删除后数组中数据的个数,通过语句*n=j;把它赋给n所指变量即可。(4)主函数中输出aa数组中原有的数据,和删除后的数据。考生可以对照所编函数是否正确。 全国计算机二级C语言上机编程题详细分析(3)请编写一个函数void fun(char m,int k,int xx),该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17和5,则应输出:19,23,29,31,37。注意:部分源程序存在PROG1.C中,请勿改动主函数和其他函数中的内容,仅在函数fun的指定的部位填入你编写的若干语句。试题源程序如下:#include stdio.hvoid fun(int m, int k, int xx)main() int m, n, zz100;printf("nPlease enter two integers(m & n): ");scanf("%d%d",&m,&n);fun(m, n, zz);for(m=0; mn; m+) printf("%d ",zzm);printf("nn");分析:(1)本题的基本算法是求素数。假设有整数i,若i不能被2到i之间的任意一个数除尽,则i就是素数;若一旦能被某个数除尽就不是素数。(2)以下是求i是否为素数的基本算法:变量ok用作i是素数的标志,ok为1,则i是素数。ok=1;for(p=2; pi/2; p+)if( i%p=0) ok=0; break; if(ok)(3)本题要求把大于m的k个素数存入xx所指的数组中。所以,i的值应大于m;取大于m的值逐一进行判断,若是素数就放入xx所指数组中。把以上语句放入一个循环中:for( i=m+1,j=0; ? ; i+ ) ok=1;for(p=2; p=i/2; p+)if( i%p=0 ) ok=0; break; if (ok) xxj=i;j+; 此处,变量i统计存入数组中元素的个数,同时作为下标。(4)按本题的要求,外循环结束的条件应当是:jk(j的值从0到k-1)。只要求得了k个素数,就可退出循环。因此在?处应填入jk。 等级考试(笔试)虽然知识面比较广,但不是很深,基础知识考的是日常操作能力,程序设计考的是细心。辛辛苦苦准备了大半年,又经过2个小时的考场之战,交卷之后还很“自美”,成绩单上的“不及格”让你一时不敢相信自己的眼睛。 当对着答案细细“品味”时,你会N次的感叹原来“罪魁祸首”是“不细心”。 综观近年来的考题,对容易出错的典型题例作了汇总和分析,也好给以后参加二级C考试的考生增加点免疫力。 1)审题不清 (1)审题时的一字之差。 一定要搞清题意,题目让我们选择的是“正确”还是“不正确”的;“能”还是“不能”的;本来要求选出一个错误的答案,但题目中没有“错误”字样,而是说 “请选出不正确的一项”,一不小心你就可能会把选项中最前面一个“正确”的选为答案,因“正确”的有三个选项,当然觉得很容易,就这样,“错误”轻易地从你的笔尖溜走了。 (2)不注意文字部分的要求和说明。 很多时候,为了省时间,上来就去看程序,这样不仅不能省时间,还会走弯路、出错误。看看下面的两个例子吧! 例1:以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。 #include void f(char p10,int n) 略 main() char p10="abc","aabdfg","abbd","dcdbe","cd"int i; f(p,5); printf("%dn",strlen(p0); 程序运行后的输出结果是 (A)6 (B)4 (C)5 (D)3 (为了节省版面,把函数f的内容略去了。)看过文字说明,接着看主函数,就可以锁定这个字符串是“dcdbe”,而不用花时间去分析函数f。要注意的是:别把最长的一串当成最大的字符串,看上“aabdfg”可就错了,答案应为C。 例2: 以下程序中给指针p分配三个double型动态内存单元,请填空。 # include main ( ) double p; p=(double ) malloc( ); p0=1.5;p1=2.5;p2=3.5; printf("%f%f%fn",p0,p1,p2); 如果上来就看程序,就会忽略“给指针p分配三个double型动态内存单元”,这里要求“三个”,如果大笔一挥写出了sizeof(double)可就太冤枉了,其实应该是3sizeof(double)。 2)把“赋值”看成了“等于” 例:有以下程序段 int k=0 while(k=1)k+; while 循环执行的次数是: (A)无限次 (B)有语法错,不能执行 (C)一次也不执行 (D)执行1次 此题如果理解为k等于1时循环才执行,那么“k+”不被执行,k的值就始终为0,这时就把C选上了。其实,while循环的条件是一个赋值表达式,答案为A。 3)表达式的值与变量的值 例:有以下程序 int a=2; int f(int a) return (a)+; main( ) int s=0; int a=5; s+=f(&&a); s+=f(&&a); printf("%dn",s); 执行后输出结果是() (A)10 (B)9 (C)7 (D)8 答案是C。 此题有两个要点,1是局部变量与全局变量的作用范围,2是函数f(&&a)返回的是表达式 (a)+的值,而不是a的值。 4)把关系表达式有别于数学上的关系式 例:有以下程序 main() int a=5,b=4,c=3,d=2; if(a>b>c) printf("%dn",d); else if(c-1>=d)=1) printf("%dn",d+1); else printf("%dn",d+2); 执行后输出结果是 ( ) (A)2 (B)3 (C)4 (D)编译时有错,无结果 这道题的关键在(a>b>c),答案容易判断为A,5大于4也大于3,就把整个表达式判断为真值,其实,a>b已为真值,1>c则成了假值,所以答案为B。 5)字符串的拷贝,拷成了同一个字符 例:若有定义语句:char s100,d100; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式) while(i) dj= ;j+; dj=0; 这里容易只看到当前,忽略了还有其他字符,错填为si。答案为si+。全国计算机等级考试上机考试应试技巧掌握好上机考试的应试技巧,可以使考生的实际水平在考试时得到充分发挥,从而取得较为理想的成绩。历次考试均有考生因为忽略了这一点,加之较为紧张的考场气氛影响了水平的发挥,致使考试成绩大大低于实际水平。因此每个考生在应试前,都应有充分的准备。 下面是本人从历次考试实践中总结出来的几点经验,提供大家参考: 一熟悉考试场地及环境,尤其要熟悉考场的硬件情况和所使用的相关软件的情况。对考场的情况应充分熟悉,以免临场影响情绪(个别考生甚至出现手足无措的情况)。例如,考场使用的计算机你是否熟悉?如何开机,如何进入考试系统都是应该熟练掌握的。键盘的手感如何?如果键盘的手感不好,应想办法增加练习机会,尽可能使不舒适感减少。否则考试时不仅影响速度,更影响情绪。对考试系统所使用的汉字系统UCDOS你是否熟悉,如果不熟悉,应练习并熟悉之。你所习惯使用的汉字输入法是否加载了?如果没有加载,应与考场工作人员或负责人联系,由他们告诉加载方法。个别输入法可能还需考试工作人员加装相应软件,因此一定要在考试前准备好。你所考的语言考场是使用的什么版本,如何调用,也应考前就弄清楚并熟悉之。这方面考FoxBASE和QBASIC语言的一般问题不大,因为这两种语言考试系统的要求比较统一,各考场比较一致。而FORTRAN、C、Pascal语言随版本的高低有较大的区别。一般讲,低版本没有帮助系统(FORTRAN)或帮助系统过于简单,而高版本有较全面的帮助系统。因此,用惯了高版本的考生在使用低版本软件时,往往因为无法求助而困惑;而用惯了低版本软件的考生又往往不熟悉高版本软件的使用界面。如果考场所使用的软件是你所不熟悉的,一定要想办法迅速熟悉起来。补充:不要错过参加模拟考试的机会考点在正式考试前,会给考生提供一次模拟上机的机会,并且一般会有指导老师回答考生的疑问。模拟上机除考题只有一套,并且可以提问外,其他与正式考试完全一样。有些考生本来就准备不足,模拟上机又不到,结果实际考试时完全找不着北。模拟考试时重点不应放在把题做出来,而是放在熟悉考试环境,相应软件的使用方法,考试系统的使用技巧等方面。并应多向指导教师请教技巧。这些在正式考试时是没有机会的。二学会并习惯使用帮助系统QBASIC、turbo C 2.0、FoxBASE+2.1、vb、vf都有较全面的帮助系统。熟练掌握之,可以减少记忆量,解决解题中的疑难问题。比如,1998年下半年和2001年下半年的二级C语言的编程题都有这样一题:请编写一个函数 fun ( char *s ),函数的功能是把 s 串中的内容逆置。例如:s 串中原有的字符串为:abcdefg,则调用该函数后,s 串中的内容为:gfedcba。注意: 部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。fun ( char *s )如果你对字符串的逆置函数有点印象,就可通过帮助系统很快找到它。这样,这个程序只需添加一条语句 strrev(s) 就完成了,比自己编这个函数简单多了。当然,如果考场使用的是turbo C 2.0,那你就只好自己努力记忆了。顺便提一下,学会熟练使用帮助系统不仅对考试有好处,对实际使用各种软件都大有益处。现在的新软件层出不穷,而且功能复杂,使用时必须依靠强大的帮助功能才能迅速掌握并充分发挥其功能,不会使用帮助系统而要用好任意一款较大的软件几乎是不可想象的。三上机做题时应注意的事项上机考试的评分是以机评为主,人工复查为辅的。机评当然不存在公正性的问题,但却存在呆板的问题,有时还可能因为出题者考虑不周出现错评的情况。考生做题时不充分考虑到这些情况,也可能吃亏。下面以二级考试为主,按DOS题、程序修改题和编程题三部分分别讲一下应重点注意的问题。1DOS命令部分由于条件限制,不可能考很多内容。根据历次考试经验,不外乎如下几条:COPY (实际使用最多,也是最复杂的命令之一)MD (=MKDIR) 和 RD (=RMDIR)DEL (=ERASE)REN (=RENAME)ATTRIB (实际极少使用的命令之一)2000年以后的考试中增加了一条常用命令 DIR (由于该命令没有任何信息保存到磁盘上,因此考试时要求与一不常用的重定向命令 > 一起使用。重定向命令 > , < , >> 与管道命令 | 均属不常用的高级 DOS 命令。)估计以后的考试也可能略有变化,即逐渐增加使用命令的条数。由于该内容变化小,考生应当练习到纯熟的境地,在考试时用尽可能少的时间来做这部分内容,以使其他内容有更多的时间。六题能做出五题即可,有一题一时想不起,可以暂时先不做,做完其他题后如有时间可再回头做。这部分的时间不超过十分钟较好。2做程序修改题要特别注意严格按要求做。程序行的错误标志为“*found*”。有的题目明确指出错误紧跟在“*found*”下面的一行,而有的没有明确指出来。应重点注意“*found*”下面的第一条语句(有时候一条语句可以占几行)。同时应注意有时候几条语句(类似于文学中的排比句)错误雷同,是作为一个错误来处理的。改正错误语句时一定注意不可增减程序行。因为评分时机器死板地检查第X个“*found*”下面第N行(第X个错误语句应在的行)是否修改得和若干标准答案中的一个相同,相同则给分,否则不给分。行数不对,无论程序怎样正确,评分时一定算作错误来处理。程序修改题中还应注意考虑原程序作者的思路,所作改动应尽量小。因为出题者给出的答案数是有限的,考生的答案如果出了出题者所给的范围,正确也被当作错误来处理了。例(1999年上半年二级BASIC):'* 给定程序MODI1.BAS其功能是: 从键盘上每次输入两个100以下'* 的正数分别赋给Y和Z(如不符合此条件的, 则重新输入),累加到累'* 加器X中,直到X的值超过500为止。请找出程序中的错误,将程序调'* 试出所需结果。'* 注意: 不得增行或删行, 也不得更改程序的结构!X = 0DODOt = 0INPUT "Y,Z=" Y, ZIF 0 < Y AND Y < 100 AND 0 < Z AND Z < 100 THENt = 2ELSEPRINT "Out of Range! Input again"END IF'*found*LOOP WHILE t <> 1X = X + Y + Z'*found*'WHILE X <> 500PRINT "X=" XEND这里共有两个错误:第一个为条件错,第二个语句和条件均有错。因此第一个错误可只改动条件为 t<>2 或 t=0,整个语句为loop while t<>2 或者 loop while t=0第二个错误可改为LOOP WHILE X <= 500总之,这里的思路就是用 DO . LOOP WHILE <条件> 语句。如果使用 do . loop until <条件>,程序可以同样成立。比如第一个错误改为loop until t=2运行结果完全相同。但是由于改动较多,超出了出题者当时的考虑范围,自动评分系统会认为您“修改错误!”扣掉您应得的15分!做程序程序题部分的时间以不超过20分钟为好。来3大部分考生最为头痛的恐怕要算编程题了,上机通不过的考生多半是栽在编程题上面的。由于编程题占40分之多,且评分时只看结果不管过程,所以大部分人不是得满40分就是得0分,而如果编程题得0分,上机通过的可能性就很小了。对编程题只要在时间上留足,做题时不急不燥、认真审题,应该讲是问题不大的。当然,平常如能多做练习,有条件的多做实战演习,就更容易顺利通过了。我们考点有些考生在我这里做过很多的上机练习,实际考试时有不少人在半个小时内全部做完,最快的考生十多分钟即离开了机房(可不是不会做,而是全做对了)。几种语言中,QB的编程题相对较为简单,多数时候相当于填空;Fortran语言思路也较简单,但要求熟悉常用算法(其他语言在算法上都有提示),如果不知道算法,想破脑袋也做不出来。这两种语言没有什么可说的。Pascal和C难度接近,出题的方法与形式也接近。考生要注意的是在浏览整个程序时按子程序分别对待,如果想把程序的每一行都完全理解,完全是浪费时间。重点注意指定要编制的子程序中需使用和设置的变量,把它们的来龙去脉搞清楚就行了。至于输入输出子程序,则只要知道文件名、输入输出变量的情况就可以了。然后即可集中精力于编制子程序。注意在程序的编译、连接过程中可能有错误提示似乎指向不允许考生改动之处,这时千万不要被迷惑。只要把你的子程序编正确了,程序一定可以正确运行。FoxBASE的编程题难度相差极大,如果运气不好,抽到一道难的,可能好半天还不能看清题意(运气好,抽到简单的题,三两下就可搞定)。这时千万不可轻言放弃,即使你完全编不出程序也不要紧,把题中要求的数据库结构正确建立起来也能够得不少于10分(多数时候可得20分之多)。考FoxBASE没有把握的考生不投一下这个机,就太划不来了。补充:4怀疑题目有错要及时反映最后要特别说明一点,等级考试由于多方面的原因,出题时可能有错误。虽然这个错误在整体上占的比例是很小的,但具体到考生个人,影响就太大了。2001下半年的四级题中,有一题因错把一个“最大”字写成了“最小”,导致相当多抽到此题的考生上机不过。因此如果怀疑题目有错,特别是编程题,一定要及时向监考人员反映。得到监考人员认可后,可考虑申请参加下一场考试(重新抽题,将不是该套题目)。5考试结束不要急于离开为了切实保护考生利益,在每场考试结束后会立即评分(机评),并将得分为零分的考生名单予以公布。除非监考人员确定是考生完全不会做或故意得零分,多数考点会给得零分考生一次重考的机会。因此考试完毕(尤其是提前时间较多的考生),一定要耐心等待评分结果公布再离开。来源:考试大-计算机等级考试