全国计算机等级考试二级C语言资料机试.docx

上传人:b****4 文档编号:3772146 上传时间:2022-11-25 格式:DOCX 页数:57 大小:121.50KB
下载 相关 举报
全国计算机等级考试二级C语言资料机试.docx_第1页
第1页 / 共57页
全国计算机等级考试二级C语言资料机试.docx_第2页
第2页 / 共57页
全国计算机等级考试二级C语言资料机试.docx_第3页
第3页 / 共57页
全国计算机等级考试二级C语言资料机试.docx_第4页
第4页 / 共57页
全国计算机等级考试二级C语言资料机试.docx_第5页
第5页 / 共57页
点击查看更多>>
下载资源
资源描述

全国计算机等级考试二级C语言资料机试.docx

《全国计算机等级考试二级C语言资料机试.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言资料机试.docx(57页珍藏版)》请在冰豆网上搜索。

全国计算机等级考试二级C语言资料机试.docx

全国计算机等级考试二级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(;jint(*a)[10]

(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列的二维数组中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1