二级C语言冲刺复习指导
一、命题原则
全国计算机等级考试大纲明确规定:二级C语言考试由“二级公共基础知识”和“二级C语言程序设计”两大部分组成,考试内容严格按照“宽口径、厚基础”的原则设计,主要考核我们对该学科的基础理论、基本知识和基本技能的掌握程度,以及运用所学理论和知识解决实际问题的能力。
二、考试要求
根据命题原则,大纲对我们如何复习应试也提出了相应的要求。主要强调了两个方面:
1.学好基础知识
这里所说的基础知识是指C语言中基本概念、基本原理和规定关键字、基本结构等基本知识点。二级C语言考试中,概念性的知识点比较多。
这部分的考试题目一版都比较简单,如“标识符”、 15)以下选项中能表示合法常量的是(20xx.9)
A)整数:1,200
B)实数:1.5E2.0
C )字符斜杠:‘\’
D)字符串:"\007" (字符常量)
(16)表达式a+=a-=a=9的值是(20xx.9)
A)9
B)_9 C)18
D)0
(17)以下是if语句的基本形式:(20xx.3)
if(表达式)
语句
其中“表达式”
A)必须是逻辑表达式
B)必须是关系表达式
C)必须是逻辑表达式或关系表达式
D)可以是任意合法的表达式
(17)若变量已正确定义,在if (W)printf(“%d\n,k”);中,以下不可替代W的是(20xx.9)
A)a<>b+c
B)ch=getchar()
C)a==b+c
D)a++
(21)有以下程序 (基本结构) #include<stdio.h> main() {int y=10; while(y--); printf(”Y=%d\n”,Y); } 程序执行后的输出结果是 A)y=0 B)y= -1 C)y=1 D)while构成无限循环 28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是 A)int a[5]=﹛0﹜; B)int b[]={0,0,0,0,0}; C)int c[2+3]; D)int i=5,d[i];
公共基础中的中基本概念、基本原理等
5)软件生命周期是指
A)软件产品从提出、实现、使用维护到停止使用退役的过程
B)软件从需求分析、设计、实现到测试完成的过程
C)软件的开发过程
D)软件的运行维护过程
(3)某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是
A)10 B)8 C)6 D)4
2.掌握操作技能和综合运用能力
二级C语言考试注重对程序设计实际操作能力的考察,要求我们运用所学理论知识和操作技能解决实际问题。二级C语言考试考核的主要内容就是程序设计的基本操作和把所学理论知识和操作技能综合起来,并能在实际应用中加强对这些知识的熟练掌握。
(18)有以下程序 (20xx.9)
#include <stdio.h>
main()
{int x;
scanf(“%d”,&x);
if(x<=3); else
if(x!=10)
printf(“%d\n”,x);
}
程序运行时,输入的值在哪个范围才会有输出结果
A)不等于10的整数
B)大于3且不等于10的整数
C)大于3或等于10的整数
D)小于3的整数
三、应试对策
我们在备考时,要针对考试大纲和考试要求进行复习,主要应注意以下几个方面:
1.牢固、清晰地掌握基本知识
二级C语言考试的重点是基本知识的掌握情况和实际编程应用,但其前提条件是对基本知识点的掌握。因此,我们正确地理解、熟记基本概念和原理是通过考试的前提条件。那么我们要如何才能做到这一点呢?我们可以通过以下3方面来实现:
① 在考前冲刺阶段要注意“比较总结”学习成果,特别是对一些关系复杂的知识点,通过比较、总结更容易理解、牢记。“比较总结”是一个好的学习方法,同时也是一个好的增强记忆方法,在C语言中有些问题只有通过综合比较、总结才容易在脑海中留下牢固的印烙;
② 理解概念要准确,尤其是一些容易混淆、重要的概念,一定要在考前冲刺阶段准确地掌握它们之间在操作步骤和实现功能上的细微区别,一定不能忽视;
③ 通过联想记忆各考点,在C语言中有一部分考点不是孤立的,而是相互联系的,我们要能通过一个考点联想到与他相关的考点、这样就能扩大记忆了。
[NextPage]
2.选择的习题要有针对性,切不可进行“题海战术”
现在关于二级C语言考试的习题很多,搞题海战术肯定是不行的。我们应根据考试大纲,在考前冲刺阶段适当地做一些与二级C语言考试题型相同的题,我们可以做些试卷和历年试题(最近2~3年即可)。研究历年考试题型、分析现在考试形式是通过考试的一个重要法宝,这做可使我们较快地掌握考试题型,从而在最短的时间内达到最大的学习效果。
注意:根据分析这些年来考试的情况,每年都会有少数新的考点出现,所以在研究历年考题时,不要忽视了一些以往没有考过的知识点,应适当理解记忆。
3.上机实践笔试中程序设计类题目
学习笔试中程序设计类的题目最佳方法是上机操作,验证自己的解题思路和做题结果。通过在计算机上验证这类题,可以发现错误和纠正解题思路,加深我们的记忆。
四、题型分析与解题技巧
1.笔试试卷分析
笔试试卷由选择题和填空题组成。选择题和填空题一般对基本知识和基本操作进行考查,它主要是测试我们对相关概念的掌握是否全面、理解是否准确、思路是否清晰。
(1)选择题分析
选择题为单选题,是客观题,每道题的分值为2分,试题覆盖面广,一般情况下我们不可能做到对每个题目都有把握答对。考试时就需要我们学会放弃,对于不确定的题目不要在上面花费太多的时间,先记住,然后作答其他题目。等最后有空余的时间再回过头来仔细考虑这些题目。二级C语言笔试题目众多,分值分散,我们一定要有全局观,合理地安排考试时间。
选择题一般分为:正面试题和反面试题。设问是正确观点的题称为正面试题,绝大多数选择题为正面试题;设问是是错误观点的题称为反面试题。我们在解答选择题时可以如下几个答题方法来答题,这样可以提高答题速度和准确率。
① 顺选法:如果对题中的4个选项,一看就能肯定其中的1个是正确的,就可以直接得出答案。对于一些比较容易看出正确选项的题,可以使用排除错误选项。
② 排除法:排除法是将错误答案一一排除的方法。对题中的4个选项逐个去掉错误的选项。对于一些比较容易看出错误选项的题,可以使用排除错误选项。
③ 比较法:这种办法是没有办法的办法,如果有些题实在是没有把握,那么就只有比较四个选项中那个更接近题目要求了(这也称之为“蒙猜法”)。
(2)填空题分析
填空填一般难度都比较大,一般需要我们准确地填入字符,往往需要非常精确,错一个字也不得分。在分值方面,每题也是2分。在作答填空题时要注意以几点:
① 答案要写得简洁明了,尽量使用专业术语。
② 认真填写答案,字迹要工整、清楚,格式要规范、正确,在把答案往答题卡上填写后尽量不要涂改。
③ 注意,在答题卡上填写答案时,一定要注意题目的序号,不要弄错位置。
④ 对于有两种答案的情况,只需填一种即可,多填并不多给分。
[NextPage]
2.上机试题分析
一个C语言源程序总是在一定的硬件和软件环境支持下进行编辑、编译、连接和运行的,而这其中的每一步都直接影响程序调试的效率。所以初学者必须了解所使用的计算机系统的基本操作方法,学会使用该系统,了解在该系统上如何编辑、编译、连接和运行一个C语言程序。
上机考试重点考察我们综合运用基础的操作能力和程序编写能力,要求我们具有综合运用基础知识进行实际操作的能力。上机试题综合性强、难度较大。上机考试的评分是以机评为主,人工复查为辅的。机评不存在公正性的问题,却存在呆板的问题,有时还可能因为出题者考虑不周出现错评的情况。这就要求我们做题时要充分考虑到各种情况,尽可能的按规范编写
程序,否则有可能答对不得分。
掌握好上机考试的考试技巧,可以使我们的实际水平在考试时得到充分发挥,从而取得较为理想的成绩。历次考试均有考生因为忽略了考试技巧,加之较为紧张的考场气氛影响了水平的发挥,致使考试成绩大大低于实际水平。因此我们在考试前,要有充分的准备。总结起来有以下几点供我们在复习和考试时借鉴:
(1)上机考试训练时,一定不要死记硬背。以往有部分考生能够顺利通过笔试,却不能通过上机考试,主要原因就是她们在平时训练时死记硬背,而没有真正的理解知识应用,到考试时,题目稍有变动就变的束手无策。所以我们一定要在熟记基本知识点的基础上,加强上机训练,做到真正理解、掌握解题方法和思路。
(2)一定要重视考试模拟软件的使用。应使用考试模拟软件进行实际的上机操作练习,尤其要做一些具有针对性的上机模拟题,以便熟悉考试题型,体验真实的上机环境,减轻考试时的紧张程度。
(3)学会并习惯使用编程软件的帮助系统。C语言编程软件有非常全面的帮助系统,熟练掌握、使用帮助系统,可以使我们减少记忆量,解决解题中的陌生、疑难问题。
(4)熟悉考试场地及环境,尤其是要熟悉考场的硬件情况和所使用的相关软件的情况。一般在正式考试前,考点会给我们提供一次模拟上机的机会,应尽可能地去参加。模拟考试时,不要把重点放在做题上,而应放在熟悉考试环境,相应软件的使用方法,考试系统的使用等方面。
(5)在考试时不要急燥、慌张,而是要认真、冷静地看清题目要求,在做完题后一定要保存文件,并运行程序检测运行结果是否符合题目要求。在考完交卷前先关闭掉C语言编程软件和其他打开的文件,再交卷,确保交卷过程中不出错误。
[NextPage]
五、综合应试技巧
(1)认真审题,先分析,后下笔。试题的考核是有针对性的,因此在答题时也要有针对性。解答前,除了要看清问题外,还要弄清楚题目考核的意图。明白了问在那里后,就可以开始考虑好如何答题了,然后依思路从容做答。
(2)对于十分了解或熟悉的问题,切忌粗心大意、得意忘形,一定要认真看题、分析,避免掉入陷阱,确定后再写出答案。
(3)对于偶尔碰到或是虽然在复习中见过但已记不清的题目,也不要泄气,将自己的判断同书本知识联系起来做答;对于完全陌生的问题,实在不知如何根据书本知识进行解答时,可以采用“蒙猜法”,用自己的思考和逻辑推断作答。由于这这方法作出来的题没有多大把握得分,因此不要花费太多时间去研究它。
总之,考试要取得好成绩,取决于我们对C语言知识掌握的扎实程度。否则,即使有再好的
技巧也无济于事,只能碰运气,这是不可能考出好成绩的。当然,在有扎实的基础上运用一些应试的技巧,能使考试起到事半功倍的效果。
第二篇:二级C语言上机试题
二级C语言上机试题
2、 编写函数double fun,它的功能是:根据以下公式计算s,计算结果通过形参指针sn传回;n通过形参传入。
1 1 1 1 1
S = ── - ── + ── - ── + … ─────
1 3 5 7 2n+1
int i,j=1;double s=0;
for(i=0;i<=n;i++)
{s=s+1.0/(2*i+1)*j;j=-j;}
*sn=s;
3、 编写函数double fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n 为两个正整数且要求m > n。
m!
P = ─────
n!(m-n)!
double i=1,x=1,y=1,z=1,p=0;
for(i=1;i<=m;i++) x=x*i;
for(i=1;i<=n;i++) y=y*i;
for(i=1;i<=(m-n);i++) z=z*i;
p=x/(y*z);
return p;
4、编写函数fun,它的功能是计算: s = [ln(1)+ln(2)+ ln(3)+...+ln(m)] 0.5
在C语言中可调用log ( n )函数求ln (n)。 log函数的引用说明是: double log(double x) ; double i,s=0;
for(i=1;i<=m;i++) s=s+log(i);
return sqrt(s);
5、 编写函数double fun(double h),它的功能是:四舍五入并保留两位小数
long int i,j=1;
if(h<0) {j=-1;h=-h;}
h=h*100+0.5;
i=h;
h=i/100.0;
return h*j;
6、编写函数fun,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2)
例如:当t = 1000时,函数值为:1597。
int i,f0=0,f1=1,f2=f0+f1;
while(f2<=t)
{f0=f1;f1=f2;f2=f0+f1;}
return f2;
7、编写函数fun,它的功能是:求出1000以内能被7或11整除,但不能同时被7和11整除的数,存放到数组xx中,通过函数名返回个数。
int i,j=0;
for(i=1;i<1000;i++)
if((i%7==0||i%11==0)&&i%77!=0) xx[j++]=i;
return j;
8、 fun的功能是:将s所指字符串中的内容从小到大重新排列
int i,j;char t;
for(i=0;i<strlen(s);i++)
for(j=i;j<strlen(s);j++)
if(s[j]<s[i]) {t=s[i];s[i]=s[j];s[j]=t;}
9、 fun(int s[],int n)的功能是:将s数组中的n个数从大到小重新排列
int i,j,t;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
if(s[j]>s[i]) {t=s[i];s[i]=s[j];s[j]=t;}
10、 函数fun的功能是:将s所指字符串中内容倒序
int i,j=strlen(s);char t;
for(i=0;i<j/2;i++)
{t=s[i];s[i]=s[j-1-i];s[j-1-i]=t;}
11、 编写程序, 实现矩阵s(N行N列)的转置(即行列互换)
int i,j,t;
for(i=0;i<N;i++)
for(j=0;j<i;j++)
{t=s[i][j];s[i][j]=s[j][i];s[j][i]=t;}
12、 请编写一个函数,用来删除字符串s中的所有空格。
int i,j;
for(i=0;i<strlen(s);i++)
if(s[i]==’ ‘)
{for(j=i;j<strlen(s);j++) s[j]=s[j+1];
i--;}
13、 函数fun(int a[],int *n,int y)的功能是: 删除数组a中值为y的元素,*n为个数。 int i,j;
for(i=0;i<*n;i++)
if(a[i]==y)
{for(j=i;j<*n;j++) a[j]=a[j+1];
i--; (*n)--;}
14、函数fun的功能是:把a数组中的n个数,和b数组中逆序的n个数一一对应相乘、求平方,结果存在c数组中。
int i,j=n-1;
for(i=0;i<n;i++,j--)
c[i]=a[i]*b[j];
15、函数fun的功能是:把a数组中的n个数和b数组中逆序的n个数一一对应相加、求平方,结果存放在c数组中。例如:若a数组中的值是:1、3、5、7、8 b数组中的值是:2、3、4、5、8
调用该函数后,c中存放的数据是81、64、81、100、100
int i,j=n-1;
for(i=0;i<n;i++,j--)
c[i]=(a[i]+b[j])*(a[i]+b[j]);
16、函数fun的功能是:对a数组中n种商品价格进行分段统计,商品各段价格的数目存到b数组中; 其中:价格为100元以下的个数存到b[0]中,价格为100元到199元的个数存到b[1],价格为200元到299元的个数存到b[2],价格为300元到399元的个数存到b[3],价格为400元到499元的个数存到b[4],价格为500元以上的个数存到b[5]中。
int i; 或者 int i;
for(i=0;i<6;i++) b[i]=0; for(i=0;i<6;i++) b[i]=0;
for(i=0;i<strlen(a);i++) for(i=0;i<strlen(a);i++)
switch(a[i]/100) if(a[i]/100<5) b[a[i]/100]++;
{case 0: b[0]++;break; else b[5]++;
case 1: b[1]++;break;
case 2: b[2]++;break;
case 3: b[3]++;break;
case 4: b[4]++;break;
default: b[5]++;}
17、函数fun的功能是:对指定字符在字符串a中出现的次数进行统计,统计的数据存到b数组中。其中:字符'a'出现的次数存放到b[0]中, 字符'b'出现的次数存放到b[1] 中,字符'c'出现的次数存放到b[2]中,字符'd'出现的次数存放到b[3]中,字符'e'出现的次数存放到b[4]中,其它字符出现的次数存到b[5]中。
int i; 或者 int i;
for(i=0;i<6;i++) b[i]=0; for(i=0;i<6;i++) b[i]=0;
for(i=0;i<strlen(a);i++) for(i=0;i<strlen(a);i++)
switch(a[i]) if(a[i]>=’a’&&a[i]<=’z’)
{case ‘a’: b[0]++;break; b[a[i]-‘a’]++;
case ‘b’: b[1]++;break; else b[5]++;
case ‘c’: b[2]++;break;
case ‘d’: b[3]++;break;
case ‘e’: b[4]++;break;
default: b[5]++;}
18、程序定义了M×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N], int n),函数的功能是:①使数组下半三角元素中的值乘以n;②使数组上半三角元素中的值乘以n
① int i,j; ② int i,j;
for(i=0;i<M;i++) for(i=0;i<M;i++)
for(j=0;j<=i;j++) for(j=i;j<N;j++)
a[i][j]=a[i][j]*n; a[i][j]=a[i][j]*n;
19、序定义了M×N的二维数组,并在主函数中自动赋值。请编写函数 fun,函数的功能是: ① 给数组周边元素置0值; ② 求周边元素之和。
① int i,j; ② int i,j,s=0;
for(i=0;i<M;i++) for(i=0;i<M;i++)
for(j=0;j<N;j++) for(j=0;j<N;j++)
if(i==0||j==0||i==M-1||j==N-1) if(i==0||j==0||i==M-1||j==N-1)
a[i][j]=0; s=s+a[i][j]; return s;
20、请编写一个函数fun,其首部为: fun( int m, int *k, int xx[])
该函数的功能是: ①将所有大于1小于整数m的非素数存入数组xx,非素数的个数由k传回; ②将所有大于1小于整数m的素数存入数组xx,素数的个数由k传回。
① int i,j,l=0; ② int i,j,l=0;
for(i=2;i<m;i++) for(i=2;i<m;i++)
{for(j=2;j<i;j++) {for(j=2;j<i;j++)
if(i%j==0) break; if(i%j==0) break;
if(j<i) xx[l++]=i;} if(j>=i) xx[l++]=i;}
*k=l; *k=l;
21、请编写一个函数 fun (char *s),函数的功能是把 s 串中所有的字母改写成该字母的下一个字母,字母z改写成字母 a。大写字母仍为大写字母,小写字母仍为小写字母,其它的字符不变。
int i,j;
for(i=0;i<strlen(s);i++)
if((s[i]>=’a’&&s[i]<’z’)||(s[i]>=’A’&&s[i]<’Z’)) s[i]=s[i]+1;
else if(s[i]==’z’||s[i]==’Z’) s[i]=s[i]-25;
22、函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值也为偶数的字符删除, s中剩余的字符形成一个新串放在t所指的数组中。
int i,j=0;
for(i=0;i<strlen(s);i++)
if(!(i%2==0&&s[i]%2==0)) t[j++]=s[i];
t[j]=’\0’;
23、函数fun的功能是:将s所指字符串中ASCII值为偶数的字符删除,s中剩余的字符形
成一个新串放在t所指的数组中。
int i,j=0;
for(i=0;i<strlen(s);i++) if(!(s[i]%2==0)) t[j++]=s[i];
t[j]=’\0’;
24、请编写一个函数 void fun ( int tt[M][N], int pp[① M ② N ] ),tt 是一个 M 行 N 列的二维数组,求出每①行(②列)中最小元素,并依次放入 pp 数组中。tt 数组中的数由主函数从键盘读入。
① int i,j; ② int i,j;
for(i=0;i<M;i++) for(i=0;i<N;i++)
{pp[i]=tt[i][0]; {pp[i]=tt[0][i];
for(j=0;j<N;j++) for(j=0;j<M;j++)
if(pp[i]>tt[i][j]) pp[i]=tt[i][j];} if(pp[i]>tt[j][i]) pp[i]=tt[j][i];}
25、请编写一个函数 unsigned fun ( unsigned w ),w 是一个大于10的无符号整数,若 w 是 n (n ≥ 2)位的整数,函数求出w的后 n-1位的数作为函数值返回。
例如:w 值为 5923,则函数返回 923; w 值为 923 则函数返回 23。
unsigned i,j=1,k=w;
while(k>=10){k=k/10;j=j*10;}
return w%j;
26、编写一个函数 void fun(char p1[], char p2[]), 它的功能是: 实现两个字符串的连接(不使用库函数strcat)。
int i,j=strlen(p1);
for(i=0;i<strlen(p2);i++) p1[i+j]=p2[i];
p1[i+j]=’\0’;
27、请编写函数 int fun(int score[], int m, int below[]),它的功能是:计算 score 中 m 个人的平均成绩 aver, 将低于aver的成绩放在 below 中, 通过函数名返回人数。
int i,aver,j=0,s=0;
for(i=0;i<m;i++) s=s+score[i];
aver=s/m;
for(i=0;i<m;i++)
if(score(i)<aver) below[j++]=score[i];
return j;
28、编写一个函数,用该函数可以统计一个长度为2的子字符串sub在另一个字符串str中出现的次数。
int i,j=0;
for(i=0;i<strlen(str)-1;i++)
if(str[i]=sub[0]&&str[i+1]=sub[1]) j++;
return j;
29、编写函数fun(int s[],int *k,int n),找出n个数据中最小的一个,通过形参传回。
int i,j=0;
for(i=0;i<n;i++) if(s[i]<s[j]) j=i;
*k=s[j];
30、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数。 已给出函数的首部fun( STU a[], STU *s ),请完成该函数。
结构体的定义如下: typedef struct ss
{ char num[10]; int s; } STU;
程序如下: int i,j=0;
for(i=0;i<N;i++)
if(a[i].s<a[j].s) j=i;
*s=a[j];
31、程序定义了M×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),函数的功能是:①数组中第一行与最后一行对调,第二行与倒数第二行对调……②数组中第一列与最后一列对调,第二列与倒数第二列对调……
int i,j,t;
①for(j=0;j<N;j++) for(i=0;i<M/2;i++) {t=a[i][j];a[i][j]=a[M-i-1][j];a[M-i-1][j]=t;}
②for(i=0;i<M;i++) for(j=0;j<N/2;j++) {t=a[i][j];a[i][j]=a[i][N-j-1];a[i][N-j-i]=t;}