您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > 2012年上半年全国计算机等级考试二级C语言考前复习资料(机试)
内部资料版权所有翻印必究第1页共31页2012年上半年全国计算机等级考试二级C语言考前复习资料(机试)机试做题技巧概述一、程序填空题【解析】该类型主要考察学员对一个C程序的整体把握能力。首先须通读整个源程序,了解程序的功能后试着边填空边调试,分析输出结果,以找到正确答案。因此,不像程序修改题那么简单。【程序填空题的特点和注意事项】(1)程序填空的试题中通常包含三个空需要填写。(2)试题中用******found******/来提示在下一行或下二行注明填空的位置及编号,如___1___。(3)程序填空考核对程序的整体把握,出题点可能是:for循环语句的初始化或条件判断、函数返回值、if语句的条件判断、链表中指针如何移动、文件操作相关函数的参数等。(4)特别要注意的是:只能在填空的位置填写语句或表达式,不要增行或删行,不要改动程序行的顺序,更不要改动程序的结构。【建议答题步骤】(1)首先仔细审题,了解试题的要求,看清题目给出的输入和输出例示,以便检验程序运行的结果是否正确。(2)审视/******found******/所在函数,根据题义理解程序所采用的基本算法,做到心里有数。(3)填好空后对测试程序进行检查是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。(4)当不再出现语法错时,执行程序,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。(5)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。二、程序修改题【解析】该类型主要考察学员对C程序部分结构或算法的分析和理解能力。因此,对学员的知识把握能力要求不高,通常可以借助计算机帮我们改错(仅限语法错误)。若非语法错误,则需对程序边调试边找错,分析输出结果,找出错误所在并改正。【程序填空题的特点和注意事项】(1)上机改错的试题中通常包含两个(或三个)错误需要修改。(2)试题中用******found******/来提示在下一行(或下面第二行)有错。(3)错误的性质基本分语法错误和逻辑错误两种,也有些试题要求把语句添加在下划线处。(4)特别注意:只能在出错的行上进行修改,不要改动程序行的顺序,更不要自己另编程序。【建议答题步骤】(1)首先仔细审题,了解试题的要求,看清楚试题给出的输入和输出例示,以便检验改错后程序运行的结果是否正确。(2)审视/******found******/所在函数,根据题义理解程序所采用的基本算法,做到心里有数。(3)先对测试程序进行检查是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。(4)当不再出现语法错时,执行程序,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。内部资料版权所有翻印必究第2页共31页(5)当程序存在逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。例如,题目要求数据按由小到大排序,而结果数据是按由大到小进行了排序,问题可能出现在条件判断上。又如,输出的字符串比预期的短,就有可能字符串的结束标志放错了位置。再如做循环的时候数组上限下限错误了,下标是从0开始而不是1开始的。修改程序中的逻辑错时,要求考生认真读懂程序代码。(6)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。三、程序设计题【解析】主要考察学员对C语言综合理解能力和上机实践能力,能够对所给问题,运用所学知识,按照程序设计的步骤独立编写出一段程序,学会用计算机语言描述日常生活中所见到的现象和拟题,通过实际上机操作积累经验,锻炼用C语言描述问题的逻辑思维能力。【建议答题步骤】(1)首先仔细审题,了解试题的要求,记下试题给出的输入和输出例示,以便检验在完成指定的函数后程序运行的结果是否正确。(2)调出源程序后,应对照函数首部的形参,审视主函数中调用函数时的实参内容,以便明确在函数中需要处理的数据对象。(3)理解试题的要求,审视主函数中调用函数的方式,若在表达式中调用函数(如把函数值赋给某个对象),则要求有函数值返回,需注意函数的类型,并在函数中用return语句返回函数值;若主函数中仅用语句形式调用函数,则需要通过形参间接地返回所得结果。(4)选择适当的算法进行编程,输入程序语句。不要忘记及时存盘!(5)编译程序,直到没有语法错误。(6)调试程序,利用试题中给出的例示数据进行输入(若要求输入的话),运行程序,用示例的输出数据检验输出结果,直到结果相同。特别要注意:程序设计题要求完全设计正确才会给分,因此,要么是40分,要么是0分,不会给中间分。那么想通过机试,程序填空题和程序修改题通常来说必须全部正确才能容易通过,否则不容易通过。上机改错题重点题型归类分析内部资料版权所有翻印必究第3页共31页分类一:简单语法错误题型一:符号遗漏1、下列程序的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数:2310,则应输出:2、3、5、7、11。请改正程序中的语法错误,使程序能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include“conio.h”#include“stdio.h”/**************found**************/IsPrime(intn);{inti,m;m=1;for(i=2;in/i++)/**************found**************/if!(n%i){m=0;break;}return(m);}main(){intj,k;clrscr();printf(“nPeaseenteranintegernumberbetween2and10000:”);scanf(“%d”,&k);printf(“nnTheprimefactor(s)of%dis(are):”,k);for(j=2;j=k;j++)if((!k%j))&&(IsPrime(j))}printf(〃n%4d〃,j);printf(〃n〃);}【参考答案】(1)IsPrime(intn)(2)if(!(n%i))【解题技巧】常见的符号遗漏问题包括以下两种:内部资料版权所有翻印必究第4页共31页(1)分号问题遗漏分号:k++——k++;break——break;returnsum——returnsum;分号多余:if(k1);{}——if(k1){}while(k1);{}——while(k1){}switch();{}——switch(){}(2)遗漏括号ifk1——if(k1)if!(n%i)——if(!(n%i))whilek1——while(k1)题型二:符号出错2、给定程序MODI1.C中函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:π111┄┄≈1-┄┄+┄┄-┄┄+...4357例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includemath.h#includestdio.hfloatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/**************found**************/while(t=num){pi=pi+t;n=n+2;s=-s;/**************found**************/t=s%n;}pi=pi*4;returnpi;}main(){floatn1,n2;printf(Enterafloatnumber:);scanf(%f,&n1);n2=fun(n1);printf(%6.4f\n,n2);}【参考答案】(1)while((fabs(t))=num)(2)t=s/n3、下列给定程序中,函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,一次构成一个新数放在t中。例如,当s中的数为7654321时,t是的数为642。请改正程序中的错误,使程序能得出正确的结果。注意,不要改多main函数,不得增行或删行,也不得更改程序的结构!#includeconio.h#includestdio.h/************found************/voidfun(longs,longt){longsl=10;s/=10;*t=s%10;/************found************/while(s0){s=s/100;*t=s%10*sl+*t;sl=sl*10;内部资料版权所有翻印必究第5页共31页}}main(){longs,t;clrscr();printf(nPleaseenters:);scanf(%ld,&s);fun(s,&t);printf(Theresultis:%ldn,t);}【参考答案】(1)voidfun(longs,long*t)(2)while(s0)【解题技巧】符号出错会表现在以下七个方面:(1)“%”和除号“/”混淆,如inti=j/k;——inti=j%k;有时候反过来考,将“%”改为“/”(2)赋值号“=”和等号“==”混淆如if(i=j)——if(i==j)while(i=j)——while(i==j)(3)复合赋值出错,如:i\=10——i/=10,除号是左下的斜线(4)强制转换出错,如inti=int(f)——inti=(int)f强制转化是在类型上加括号(5)大小写问题,如IF(){}—if(){}或For(){}—for(){}注:所有的关键字都是小写字母(6)条件判断时的符号问题(要根据具体题意来修改)如if(fabs(n-m)0.0001)——if(fabs(n-m)0.0001)if(*s*p)——if(*s*p)for(;j=n;)——for(;jn;)int*a[10]——int(*a)[10](7)浮点数不能比较大小,只能用绝对值来比较题型三:变量定义出错4、程序的功能更是求方程2x3-4x2+3x-6=0的一个根,求要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#includestdio.h#includemath.hdoublefunx(doublex){return(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen){/************found************/intr;r=(m+n)/2;/************found************/while(fabs(n-m)0.001){if(funx(r)*funx(n)0)m=r;elsen=r;r=(m+n)/2;}returnr;}main(){doublem,n,root;printf(Entermn:\n);scanf(%lf%lf,&m,&n);root=fun(m,n);printf(root=%6.3f\n,root);}【参考答案】:(1)doubler;(2)while(fabs(m-n)0.001)【解题技巧】变量定义可能会出现以下三种错误:(1)变量定义时没有初始化,或者初始化的值不对,如ints=1——ints=0,一般在累加求和时容易出现此类错误(2)变量定义出错,如intsum=0.0——doublesum=0.0或者是使用变量前并没有定义(3)变
本文标题:2012年上半年全国计算机等级考试二级C语言考前复习资料(机试)
链接地址:https://www.777doc.com/doc-3032705 .html