全国计算机等级考试二级C语言资料机试.docx
- 文档编号:27554406
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:68
- 大小:112.56KB
全国计算机等级考试二级C语言资料机试.docx
《全国计算机等级考试二级C语言资料机试.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言资料机试.docx(68页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C语言资料机试
全国计算机等级考试
二级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)当不再出现语法错时,执行程序,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。
(5)当程序存在逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。
例如,题目要求数据按由小到大排序,而结果数据是按由大到小进行了排序,问题可能出现在条件判断上。
又如,输出的字符串比预期的短,就有可能字符串的结束标志放错了位置。
再如做循环的时候数组上限下限错误了,下标是从0开始而不是1开始的。
修改程序中的逻辑错时,要求考生认真读懂程序代码。
(6)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。
三、程序设计题
【解析】主要考察学员对C语言综合理解能力和上机实践能力,能够对所给问题,运用所学知识,按照程序设计的步骤独立编写出一段程序,学会用计算机语言描述日常生活中所见到的现象和拟题,通过实际上机操作积累经验,锻炼用C语言描述问题的逻辑思维能力。
【建议答题步骤】
(1)首先仔细审题,了解试题的要求,记下试题给出的输入和输出例示,以便检验在完成指定的函数后程序运行的结果是否正确。
(2)调出源程序后,应对照函数首部的形参,审视主函数中调用函数时的实参内容,以便明确在函数中需要处理的数据对象。
(3)理解试题的要求,审视主函数中调用函数的方式,若在表达式中调用函数(如把函数值赋给某个对象),则要求有函数值返回,需注意函数的类型,并在函数中用return语句返回函数值;若主函数中仅用语句形式调用函数,则需要通过形参间接地返回所得结果。
(4)选择适当的算法进行编程,输入程序语句。
不要忘记及时存盘!
(5)编译程序,直到没有语法错误。
(6)调试程序,利用试题中给出的例示数据进行输入(若要求输入的话),运行程序,用示例的输出数据检验输出结果,直到结果相同。
特别要注意:
程序设计题要求完全设计正确才会给分,因此,要么是40分,要么是0分,不会给中间分。
那么想通过机试,程序填空题和程序修改题通常来说必须全部正确才能容易通过,否则不容易通过。
上机改错题重点题型归类分析
分类一:
简单语法错误
◆题型一:
符号遗漏
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;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)) 【解题技巧】常见的符号遗漏问题包括以下两种: (1)分号问题 ●遗漏分号: k++——>k++;break——>break;returnsum——>returnsum; ●分号多余: if(k>1);{}——>if(k>1){} while(k>1);{}——>while(k>1){} switch();{}——>switch(){} (2)遗漏括号 ifk>1——>if(k>1)if! (n%i)——>if(! (n%i)) whilek>1——>while(k>1) ◆题型二: 符号出错 2、给定程序MODI1.C中函数fun的功能是: 用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止: π111 ┄┄≈1-┄┄+┄┄-┄┄+... 4357 例如,程序运行后,输入0.0001,则程序输出3.1414。 请改正程序中的错误,使它能输出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include #include floatfun(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/n 3、下列给定程序中,函数fun的功能是: 从低位开始取出长整型变量s中偶数位上的数,一次构成一个新数放在t中。 例如,当s中的数为7654321时,t是的数为642。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! #include #include /************found************/ voidfun(longs,longt) {longsl=10; s/=10; *t=s%10; /************found************/ while(s<0) {s=s/100; *t=s%10*sl+*t; sl=sl*10; } } main() {longs,t; clrscr(); printf("nPleaseenters: ");scanf("%ld",&s); fun(s,&t); printf("Theresultis: %ldn",t); } 【参考答案】 (1)voidfun(longs,long*t) (2)while(s>0) 【解题技巧】符号出错会表现在以下七个方面: (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(;j (7)浮点数不能比较大小,只能用绝对值来比较 ◆题型三: 变量定义出错 4、程序的功能更是求方程2x3-4x2+3x-6=0的一个根,求要求绝对误差不超过0.001。 例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。 请改正程序中的错误,使它能得出正确结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include #include doublefunx(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)变量定义的类型和程序中使用的类型不匹配,如intr——>doubler; ◆题型四: 赋值出错 5、给定程序MODI1.C中函数fun的功能是: 将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。 高位仍在高位,低位仍在低位。 例如,当s中的数为: 87653142时,t中的数为: 7531。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include voidfun(longs,long*t) {intd;longsl=1; /************found************/ t=0; while(s>0) {d=s%10; /************found************/ if(d%2==0) {*t=d*sl+*t; sl*=10; } s/=10; } } main() {longs,t; printf("\nPleaseenters: ");scanf("%ld",&s); fun(s,&t); printf("Theresultis: %ld\n",t); } 【参考答案】: (1)*t=0; (2)if(d%2! =0) 6、下列给定程序中,函数fun的功能是: 实现两个整数的交换。 例如给a和b分别输入60和65,输出为: a=65b=60 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! #include #include /**************found**************/ voidfun(inta,b) {intt; /**************found**************/ t=b;b=a;a=t; } main() {inta,b; clrscr(); printf("Entera,b: ");scanf("%d%d",&a,&b); fun(&a,&b); printf("a=%db=%dn",a,b); } 【参考答案】 (1)voidfun(int*a,int*b) (2)t=*b;*b=*a;*a=t; 【解题技巧】在解题时,要注意以下几种常见的错误: (1)赋值时类型不匹配。 如char*r,*p;if(r==p)——>if(*r==*p),*r,*p才是内容 charch="\0";——>charch='\0';字符是用单引号括起来 charch='0'——>charch='\0';此时是将字符0赋给ch变量,而不是\0 ——>charch=0;'\0'的ASCII码就是0,可直接用0进行赋值 (2)指针类赋值出错(左右两边类型不一致) 如: int*a;intx=10,t=20;a=&x; a=t;——>a=&t;指针只能存放变量的地址 a=t;——>*a=t;将变量赋给指针所指向的变量 (3)实现交换时赋值出错 如: if(aif(a 错误形式正确形式 分类二: 固定语法格式搭配错误 ◆题型一: 输入输出格式出错 1、给定程序MODI1.C中,fun函数的功能是: 先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线元素之积。 请改正程序中的错误,或在横线处填上适当的内容并把横线删除,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include intfun() { inta[3][3],sum,i,j; *********************************** _____; for(i=0;i<3;i++) {for(j=0;j<3;j++) ***************************************** scanf(“%d”,a[i][j]); } for(i=0;i<3;i++) sum=sum*a[i][i]; printf(“Sum=%dn”,sum); } main() {fun();} 【参考答案】 (1)sum=1; (2)scanf("%d",&a[i][j]); 2、给定程序MODI1.C中函数fun的功能是: 输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include #defineM5 /************found************/ intfun(intn,intxx[][]) {inti,j,sum=0; printf("\nThe%dx%dmatrix: \n",M,M); for(i=0;i {for(j=0;j /************found************/ printf("%f",xx[i][j]); printf("\n"); } for(i=0;i sum+=xx[i][i]+xx[i][n-i-1]; return(sum); } main() {intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; printf("\nThesumofallelementson2diagnalsis%d.",fun(M,aa)); } 【参考答案】 (1)intfun(intn,intxx[][M]) (2)printf("%d",xx[i][j]); 【解题技巧】注意输入输出的正确格式,关注容易出错的地方,如下图 正确形式错误形式 如: scanf(“%d”,a[i][j])——>scanf(“%d”,&a[i][j]) inti,*p=&i;scanf(“%d”,&p)——>scanf(“%d”,p); inti=10;printf(“%f”,i);——>printf(“%d”,i); printf(“%d”,“string”);——>printf(“%s”,“string”); ◆题型二: 选择结构中的基本格式问题 3、给定程序MODI1.C中函数fun的功能是: 用递归算法计算斐波拉契数列中第n项的值。 从第1项起,斐波拉契数列为: 1、1、2、3、5、8、13、21、…… 例如,若给n输入7,该项的斐波拉契数值为: 13。 请改正程序中的错误,使它能得出正确结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构。 #include longfun(intg) { /**********found**********/ switch(g); {case0: return0; /**********found**********/ case1;case2: return1; } return(fun(g-1)+fun(g-2)); } main() {longfib;intn; printf("Inputn: ");scanf("%d",&n);printf("n=%d\n",n); fib=fun(n); printf("fib=%d\n\n",fib); } 【参考答案】: (1)switch(g) (2)case1: return1;case2: return1; 【解题技巧】注意选择结构的正确语法格式,关注容易出错的地方,如下图 正确形式错误形式 ◆题型三: 循环结构中的基本格式问题 4、给定程序MODI1.C中函数fun的功能是: 根据整型形参m的值,计算如下公式的值。 111 t=1-------------……------ 2*23*3m*m 例如,若m中的值为: 5,则应输出: 0.536389。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动main函数,不得增行或删行,也不得更改程序的结构! #include doublefun(intm) {doubley=1.0; inti; /**************found**************/ for(i=2;i /**************found**************/ y-=1/(i*i); return(y); } main() {intn=5; printf("\nTheresultis%lf\n",fun(n)); } 【参考答案】: (1)for(i=2;i<=m;i++) (2)y-=1.0/i/i; 【解题技巧】注意选择结构的正确语法格式,关注容易出错的地方,如下图 正确形式错误形式 分类三: 函数类错误(考试重点、难点,出现的频率非常高) ◆题型一: 函数定义时出错 1、给定程序MODI1.C中函数fun的功能是: 根据形参m的值(2≤m≤9〕,在m行m列的二维数组中存放如下所示规律的数据
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 计算机等级考试 二级 语言 资料