


单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2011-09-14,#,2,级,C,语言上机考试例题讲解,2,级考试的上机题型有:,1,填空题(,30,分,,23,个),2,改错题(,30,分,,23,个),3,程序编写题(,40,分,一定记得调试运行,否则没分!,),1,、,2,题是按照每个考点的答案给分的,也就是说只有和标准答案一致的才是正确的虽然和标准答案不同也有可能运行正确,但是也不能得分不过不用担心这个,因为题目简单相应的正确答案的种类也少,所以运行正确就,OK,;,3,题要求最高、也最灵活,只要能写出符合题目要求功能的代码就可以得,40,分出现的问题是:有时最后那题就是编不出来,前面又错了一点 就得,50,分,目前,大家存在的问题:,1,函数编写不知从何下手;,2,字符数组的应用(在函数中);,3,二维数组的应用(在函数中);,4,指针的应用,5,结构体、链表等的应用,接下来,针对大家的问题和常考题型进行讲解:,一、,上机,填空题考点总结,程序填空题分值为,30,分,是在一个完整的程序中挖出,24,个空让考生填写,所考查的内容一般是,C,语言中最基础的内容。
1.,基本语句方面的知识点,如,printf(),函数和,Scanf(),函数的相关知识点2.,变量等的初始化,以作为累加器或累乘器3.,选择结构或循环结构语句的考查4.,函数的相关知识,如函数类型的定义、形参的定义,以及确定函数的返回值等5.,数组、指针、结构体等的应用二、,上机改错题考点,总结,1,、,if,或,while,语句,若错误行是,if,或者,while,语句,则要注意以下点:,1),首先判断是否正确书写,if,或,while,关键字,;,2),然后看有没有用小括号把整个表达式括起来,若没有则加上小括号,;,3),若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符,*;,4),若,if,条件表达式中只有一个等于号即数学等号,(=),,则要改写成两个等于号即逻辑等号,(=),2,、,for,语句,若错误行是,for,语句,则要注意以下几点:,1),首先判断,for,有没有书写正确,;,2),然后看,for,中的表达式是不是用分号,(;),隔开,若不是则改为分号记住是分号,(;),,不是逗号,(,)!,3),再者,分析,for,中的三个表达式,是否符合题意,;,第一个表达式表示起始条件,,第二个表达式表示终止条件,,第三个表达式表示循环变量的变化。
3,、,return,语句,若错误行为,return,语句,则要注意以下几点:,1),首先看是不是正确书写,return,关键字,;,2),然后看是不是缺少分号,若是则加上分号即可,;,3),再者判断,return,后的变量或表达式是否正确,;,这种错误需要根据题意来分析,分析返回变量或表达式的值和类型,4,、表达式错误问题,若错误行中有整数,1,除以某个表达式或变量时,必须把整数,1,改为,1.0;,若变量或表达式是整型时,则只能进行强制类型转换5,、字符串类问题,若错误行中有字符串结束符,则特别要注意结束符有没有写错注意要区分字符,o,和数字,0,6,、指针类问题,若错误行中有指针变量,并且该变量名之前没有指针运算符,则一般都是加上指针运算符,;,7,、函数首部类问题,若错误行是函数首部,则要注意:,1),首先看该行最后有没有分号,若有则删掉分号,;,若中间有分号则要改为逗号,;,2),形参和实参类型不一致问题,若实参是个地址或数组名或指针变量名,则对应的形参肯定是指针或数组,;,若实参是二维数组名,则对应的形参应该是指针数组或是二维数组,;,若后面用到某形参的时候有指针运算符,则该形参比为指针类型,;,若形参是二维数组或指向,M,个元素的指针变量,则该二维的长度必须与,main,中对于数组的第二维的长度相同。
3),函数类型不一致问题,三、,上机编程题考点,总结,二级,C,语言上机编程题在二级上机考试中属于较难题型,因此很多同学都害怕通过不了综合往年的考试,结合考试大纲,,每年考试的编程题都有一定的规律和方法,只要同学们认真、,熟练掌握做题的方法和技巧,通过考试是没有问题的下面介绍常考题型,类型,一,:数学问题,公式类型,例,1,:求小于,n,能同时被,3,和,7,同时整除的所有自然数之和的平方根这在,2,级考试中算是较容易的题了!,如果,写成,fun(),函数又该怎样进行表述?,再,如:,例,2,:,编写函数,fun,函数的功能是,:,根据以下公式计算,s,计算结果,作为函数值返回,;n,通过形参传入s=1+1/(1+2)+1/(1+2+3)+.+1/(1+2+3+4+.+n),例如,:,若,n,的值为,11,时,函数的值为,1.833333,float,fun(int n),int i,sum=1;double s=1.0;,for(i=2;i=n;i+)sum=sum+i;s=s+1.0/sum;,return s;,通过上面问题的探讨,大家自己来解决以下两个问题,:,1.,编写函数,fun,它的功能是,:,计算并输出下列级数和,S=1/1*2+1/2*3+.+1/n*(n+1),例如,当,n=10,时,函数值为,0.909091,。
2,下面,pi,函数的功能是:根据一下公式返回满足某个精度要求的,的值/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+,double,fun(int n),int i;double s=0;,for(i=1;ieps;i+)s=s+t;t=i*t/(2*i+1);,return 2*s;,类型,二,:,字符串操作,1,统计字符串出现的频率,转换字符串,例,3,:,请编写函数,fun,它的功能是,:,求出,ss,所指字符串中指定字符的,个数,并返回此值例如,若输入字符串,123412132,输入字符,1,则输出,3.,int fun(char*ss,char c),int num;,while(*ss!=0),if(*ss=c)num+;ss+;,return num;,例,4,:,请编写一个函数,fun,它的功能是,:,将,ss,所指字符串中所有,下标为奇数位置上的字母转换为大写,(,若该位置上不是字母,则,不转换,),例如,若输入,abc4Efg,则应输出,aBc4EFg,void fun(char*ss),int i;,for(i=0;ssi!=0;i+),if(i%2=1)&(ssi=a&ssi=z),ssi=ssi-32;,2,。
删除字符串,例,5,:,规定输入的字符串中只包含字母和,*号请编写函数,fun,它的功能是,:,将字符串中的前导*号全部删除,中间和尾部的*号不删除例如,若字符串中的内容为*,A*BC*DEF*G*,删除后,字符串中的内容则应当是,A*BC*DEF*G*,void fun(char*a),char*p=a;,while(*p=*)p+;,for(;*p!=0;p+,a+),*a=*p;*a=0;,练习:,fun,函数的功能是:在一个字符串中,删除指定下标的字符,余下的形成一个新串,比如,串,a,为“,world,”,n=3,则输出的字符串为“,word,”,.,void fun(char a,charb,int n),int i,k=0;,for(i=0;ai!=0;i+),if(i!=n)bk=ai;k+;,bk=0;,3,移动字符串,例,6,:,请编写函数,fun,该函数的功能是,:,移动字符串中的内容,移动的,规则如下,:,把第,1,到第,m,个字符,平移到字符串的最后,把第,m+1,到最后,的字符移到字符串的前部例如,字符串中原有的内容为,ABCDEFGHIJK,m,的值为,3,移动后,字符串中的内容,应该是,DEFGHIJKABC,。
void fun(char*w,int m),int i,j;char t;,for(i=1;i=m;i+),t=w0;,for(j=1;wj!=0;j+)wj-1=wj;,wj-1=t;,例,7,:,请编写函数,fun,该函数的功能是,:,移动一维数组中的内容,;,若数组中有,n,个整数,要求把下标从,0,到,p(p,小于等于,n-1),的数组元素平移到数组的最后例如,一维数组中的原始内容为,1,2,3,4,5,6,7,8,9,10;p,的值为,3,移动后,一维数组中的内容应为,5,6,7,8,9,10,1,2,3,4,void fun(int*w,int p,int n),字符串平移的另一种方法,int i,k=0,bN;for(i=p+1;in;i+)bk+=wi;for(i=0;i=p;i+)bk+=wi;for(i=0;in;i+)wi=bi;,3,合并字符串,例,8,:,编写一个函数,fun,它的功能是,:,实现两个字符串的连接,(,不使用,库函数,strcat),即把,p2,所指的字符串连接到,p1,所指的字符串后例如,分别输入下面两个字符串,:beijing,、,shanghai,,,则程序输出,:beijingshanghai,void fun(char p1,char p2),int i,j;for(i=0;p1i!=0;i+);for(j=0;p2j!=0;j+)p1i+=p2j;p1i=0;,练习:,请编写函数,fun,其功能是,:,将两个两位数的正整数,a,、,b,合并成,一个整数放在,c,中。
合并的方式是,:,将,a,数的十位和个位数依次放,在,c,数的十位和千位上,b,数的十位和个位数依次放在,c,数的个位,和百位上例如,当,a=45,b=12,调用该函数后,c=5241,void fun(int a,int b,long*c),这个函数的编写留给大家自己去完成!,*c=a/10*10+a%10*1000+b/10+b%10*100;,类型,三,:,二维数组的相关类型题目,1,将二维数组的数据存放到一个一维数组中,例,9,:,请编写函数,fun,该函数的功能是,:,将,M,行,N,列的二维数组,中的数据,按行的顺序依次放到一维数组中,一维数组中数据的,个数存放在形参,n,所指的存储单元中void fun(int(*s)10,int*b,int*n,int mm,int nn),int i,j,k=0;,for(i=0;imm;i+),for(j=0;jnn;j+),bk+=sij;,*n=k;,通过上例的讲解,接下来大家自己完成下列程序编写练习:,请编写函数,fun,该函数的功能是,:,将,M,行,N,列的二维数组中的,字符数据,按列的顺序依次放到一个字符串中void fun(char(*s)N,char*b),int i,j,k=0;,for(i=0;iN;i+),for(j=0;jM;j+)bk+=sji;,bk=0;,2,。
找出数组中最大与最小值的小标,【,例,10】,请编写一个函数,fun,它的功能是,:,求出,个,2M,整型,二维数组中最大元素的值,并将此值返回调用函数fun(int aM ),int i,j,max=a00;,for(i=0;i2;i+),for(j=0;jM;j+),if(maxaij)max=aij;,return max;,【,例,11】,:,请编写一个函数,int fun(int*s,int t,int*k),用来求出数组的最大元素在数组中的下标并存放在,k,所指的存储单元中例如,输入如下整数,:876 675 896 101 301 401 980 431 451 777,则输出结果为,:6,980,int fun(int*s,int t,int*k),int i,max;,max=s0;,for(i=0;imax)max=si;*k=i;,练习:,请编写一个函数。