版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二级语言强化班上机培训优选二级语言强化班上机培训讲义31、考生开考前30前钟进入候考室,交验准考证和身份证。2、开考之前,先运行一下VC和看一下输入法是否符合自己的习惯。3、记得保存一份试题目录中的所有文件,以免出错或去掉注释符后自己都不知道自己改了什么。4、调试程序的时候,可以在调试窗口设变量显示中间值看正不正确。5、如果调试运行时死循环,可以按Ctrl+Break中断死循环,不需要重新启动机器。6、出现异常应该举手报告监考老师,他们有各种密码,包括抽题密码、重抽密码和延时密码。
上机考试注意事项4考生文件夹是放置题目提供的源程序、考生存放答题结果的唯一位置。考生做完题目后必须将结果存放在考生文件夹中,否则结果必然是零分。考生文件夹的命名是系统默认的,一般为准考证号的前四位和后四位。单机版路径为“C:\WEXAM\准考证号前四位+后四位”;而网络版的路径为“K:\用户目录文件夹\准考证号前四位+后四位”。考生文件夹5最好控制在60分钟内完成上机题类型18分18分24分填空题改错题编程题6改错题目的错误之处的前一行都有*****found******标志!其实,评分程序就是根据这个标志,从考生的modi.*(扩展名随程序语言的不同而有所不同)文件中抽取它的下一行(或第二行)信息,和标准答案进行比较。通常,标准答案会有多种,只要考生的答案和其中一个对应上了即可得到相应的分数。结论:A、即使你的改错程序能够正确执行,也未必可以得分!!B、改错程序修改完毕后,无所谓运行与否,这与得分无关!上机题打分方法7对于题空题,评分程序先是读取考生文件夹下的BLAN.C文件,再找到其中需要填空的代码所在的行数,然后将考生填写的答案和题库中的事先给出答案进行对比,正确就得分,不正确就不得分;但是存在这样一个问题,如果一个题有多个答案,题库中不可能把所有答案都列举得出来,所以考生最好用最常见的一个,确保正确;需要提醒考生注意的是,填空题和改错题的要求中明确声明:不得删减或增加程序行,就是这个道理;8对于编程题,评分程序先是读取考生文件夹下的扩展名为.DAT的文件,再其中的数据与评分程序中的提供的数据进行对比,因此,考生在编程后,一定要运行程序,以生成扩展名为.DAT的输出文件!!评分程序是按照最终生成的文件给分的!且:只要考生能生成最终答案文件,均可得分!很多最终答案文件只有少数若干行数据,分数由正确答案的行数决定!例如,真考题库中有这样一道题,要求计算cos(x)-x=0的一个近似根,其答案是0.739085,最终要求生成的文件OUT.DAT中只有一行数据。有这个文件,并且该文件只有一行数据0.739085的话,就可以得到100分!当然,有多行答案的文件的格式是由程序中的输出部分决定的(而这个部分是不允许考生修改的!),考生必须能够看懂输出程序段的输出格式,否则会适得其反!9第1章程序改错题改错题解题技巧常见错误分类典型改错题举例10改错题解题技巧做题方法:(1)首先仔细审题,了解试题的要求,看清楚试题给出的输入和输出例示,以便检验改错后程序运行的结果是否正确。(2)当在VC环境下调出源程序后,审视"/******found******/“所在函数,根据题义理解程序所采用的基本算法,做到心里有数。(3)对测试程序进行编译,看是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。11(4)当不再出现语法错时,使用执行程序,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。(5)当程序存在逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。(6)修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。12改错题的特点和注意事项求分数和的时候请注意整除问题。如2-2循环的初值、条件、和终值问题。如3-2注意关键词:如NULL与Null的区别,如9-2;“\0”与’\0’的区别,如8-2。大小写问题:For与for,Int与int,如8-2、14-2。形态相似字符:小写字符l与数字1的区别如1-2,字符o与数字0的区别。符号问题:(1)“\”与“/”的区别,如4-2,5-2;(2)“=”与“==”的区别,如4-2。加漏符号(*或;)问题:如6-2,7-2,9-2,10-2,11-2,12-2,13-2,15-2,19-213注意比较值时,指针(位置)与指针值(内容)的问题。如1-2,19-2注意理解题意,如:14-2参数或变量类型不一致的问题,参数及函数名前面的类型一般不可以省。如指针与普通变量。如2-2,6-2,9-2,10-2,19-2两个数相互交换应该借助临时变量来实现,而不能直接赋值。如x与y互换,借助t,则:t=x;x=y;y=t;带参宏定义的时候展开的时候有括号就有括号,没括号不要画蛇添足。反过来,如果展开的时候必需要有括号,那个在定义的时候请加上括号。IF语句的条件加括号。如10-214变量有没有定义及赋初值。如5-2如s为指针变量,请注意s与*s的区别及用法。如10-2,15-2C语言的结束标志为分号(;),写在同一行上的一段代码,如果是尾于不同的语句应用分号隔开。如inta,b,floatc;应改为:inta,b;floatc;是否漏写了C语言的结束标志为分号(;),如10-2是否多写C语言的结束标志为分号(;),如12-2如:"switch(a);",应改为"switch(a)""intf(intn);",应改为"intf(intn)""for(i=1;i<=5;i++;)",应改为"for(i=1;i<=5;i++)"15赋值运算符左右类型不一致如:实型变量"x=1/i",应改为"x=1.0/i"字符变量"c="\0"",应改为"c='\0'"指针变量"p=10",应改为"*p=10"
表达式格式错误或次序错误如:"if!(x>y)",应改为"if(!(x>y))"
变量1=变量2,如:"p=q",应改为"q=p"交换两个变量的值,如:"t=x,y=x,y=t",应改为"t=x,x=y,y=t“变量初值或类型错误如:"intx=1",应改为"doublex=0"16函数类型或形参类型说明错误"intf(inta)",应改为"doublef(inta)"
实参是地址(数组名),形参应是指针或数组名"intf(intp)",应改为"intf(int*p)"或者改为"intf(intp[])";其他错误如:"a=c-'o'",应改为"a=c-'0'""scanf("%f",i)",应改为"scanf("%d",&i)""case0;",应改为"case0:"17例1:给定程序MODI1.C中函数fun的功能是:用冒泡法对6个字符串按由小到大的顺序进行排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#defineMAXLINE20fun(char*pstr[6]){inti,j;char*p;for(i=0;i<5;i++){/**************found**************/for(j=i+1,j<6,j++){if(strcmp(*(pstr+i),*(pstr+j))>0){p=*(pstr+i);/**************found**************/*(pstr+i)=pstr+j;*(pstr+j)=p;}}}}main(){inti;char*pstr[6],str[6][MAXLINE];for(i=0;i<6;i++)pstr[i]=str[i];printf("\nEnter6string(1stringateachline):\n");for(i=0;i<6;i++)scanf("%s",pstr[i]);fun(pstr);printf("Thestringsaftersorting:\n");for(i=0;i<6;i++)printf("%s\n",pstr[i]);}18例2:给定程序MODI1.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#defineN20voidfun(int*a,intn){inti,m,t,k;for(i=0;i<2;i++){/**********found**********/m=0;for(k=i+1;k<n;k++)/**********found**********/if(a[k]>a[m])k=m;t=a[i];a[i]=a[m];a[m]=t;}}main(){intb[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;for(i=0;i<n;i++)printf("%d",b[i]);printf("\n");fun(b,n);for(i=0;i<n;i++)printf("%d",b[i]);printf("\n");}19常见错误分类上机改错题通常有两个(或三个)错误需要修改。试题中用“/******found******/”来提示在下一行(或下面第二行)有错。错误的性质基本分为语法错误和逻辑错误两种,也有些试题要求把语句添加在下划线处。特别要注意的是:只能在出错的行上进行修改,不要添行、删行、合并或分解行,不要改动程序的顺序,更不要自己另编程序。20若错误行是函数首部,可分为以下几种情况:A、该行最后若有分号则删除,中间若有分号则改成逗号B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return后变量的类型一致。1、函数首部21若错误行是if或者while语句,则要注意以下点:1)首先判断是否正确书写if或while关键字;2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号;3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符*;4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(==)。2、if或while语句22若错误行是for语句,则要注意以下几点:1)首先判断for有没有书写正确;2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。记住是分号(;),不是逗号(,)!3)再者,分析for中的三个表达式,是否符合题意;第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化3、for语句23若错误行为return语句,则要注意以下几点:1)首先看是不是正确书写return关键字;2)然后看是不是缺少分号,若是则加上分号即可;3)再者判断return后的变量或表达式是否正确;这种错误需要根据题意来分析,分析返回变量或表达式的值和类型5、return语句24若错误行为return语句,则要注意以下几点:1)首先看是不是正确书写return关键字;2)然后看是不是缺少分号,若是则加上分号即可;3)再者判断return后的变量或表达式是否正确;这种错误需要根据题意来分析,分析返回变量或表达式的值和类型4、return语句255、语法错误A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。B、大小写不对,若错误行中有大写字母则一般都改成小写字母。C、变量未定义D、变量类型不匹配E、字符常量与字符串常量混淆266、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符7、若错误行中见到整型1除以某个表达式时,一概改成1.0。但若是整型变量或表达式则只能用强制转换8、复合运算符写错279、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,注意要区分字符‘o’和数字’0’。但第11题例外,因为该题是要将数字字符转换成对应的数字。10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。11、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改)28常见语法错误1.关键字出错:在二级C语言考试中仅仅考查学生对基本的关键字掌握情况,比如:整型就是int不是Int,知识点简单。(1)6题第二个空:If应该改为if;(2)12题第二个空:If应该改为if;(3)23题第一空:dounle应该改为double;(4)35题第二空:If应该改为if;(5)36题第二空:Double应该改为double。(6)2题第二空:wihle应该改为while。292.格式出错:在考试中主要考查学生细心的程度,最喜欢考简单的知识点。(1)少分号:2题第一空、28题第一空、29题第一空、34题第二空、37题第二空、48题第二空。考查的知识点:分号是语句结束的标志。(2)for语句的格式:for(;;)中间用分号隔开不是用逗号隔开。3题第二空、6题第一空、14题第二空都是出现了for语句格式出错的问题。(3)if语句的格式:if(表达式),if后面必须加上小括号。37题第一空if后面必须加上小括号。(4)命令行格式出错:17题第一空中include命令少了#,正确的形式应该是#include“stdio.h”;30(5)常用函数格式:A22题第一空中n=strlen[aa]应该改为n=strlen(aa),记住函数名后面一定是花括号,不能是方括号,方括号只有在数组下标中用到。B49题第一空intj,c,floatxa=0.0;应该改为intj,c;floatxa=0.0;记住:要同时定义两种以上不同的数据类型的时候必须在不同类型的数据中间加上分号。C41题第二空scanf(“%d”,a[i][j]);应该改为scanf(“%d”,&a[i][j])。考查Scanf输入函数的格式。31(6)数组:所有老师讲到数组时候必须统一将此知识点给学生回顾一遍!A数组下标引用时候只能用反括号。28题第二空t(k)=b(j)应该改为t[k]=b[j]。B二维数组中的列下标不能省略。46题第一空必须将数组列下标补充完整。32(7)常用符号出错:AC语言中大于等于符号是“>=”,但是在考试的时候可能出现将它写为“=>”,49题第二空就是这样的错误。B当题目中需要比较某个字符是否是大写字母或是小写字母、数字时,必须将“与”、“或”、“非”记住。33判断某个字符是否是大写字母:charch;if(ch>=’A’&&ch<=’Z’)printf(“%c”,ch);判断某个字符是否是小写字母:charch;if(ch>=’a’&&ch<=’z’)printf(“%c”,ch);判断某个字符是否是数字:charch;if(ch>=’0’&&ch<=’9’)printf(“%c”,ch);判断某个数字是否能同时被5和7整除:inti=35;if(i%5==0&&i%7==0)printf(“%d”,i);判断某个数字是否能被5或7整除:inti=35;if(i%5==0||i%7==0)printf(“%d”,i);判断某个数字是否是偶数或奇数:inti=35;if(i%2==0)printf(“%d是一个偶数”,i);elseprintf(“%d是一个奇数”,i);341.使用了没有定义过的变量:这种题目可以通过编译查找出出错的地方并改之。(1)0(零)和o(字母欧)的区别:19题第一空、23题第二空、43题第二空。(2)P(大)和p(小)的区别:33题第一空。(3)普通变量大小写的区别:A定义和使用时的字母大小写不一致;如:"I",应改为"i"B大小写没有出错,程序中直接使用了没有定义过的变量,要求学生更加细心的读题目。45题第二空使用到了i这个变量,但是我们在定义行中没有找到i的定义,因此在做题时候要上下结合来分析题目。22题第二空c=aa[j]中的c没有定义过,参看定义的语句不能发现应该是ch=aa[j]。常见逻辑错误352.运算符号出错:"a\=10",应改为"a/=10""a=b/10",应改为"a=b%10""a=b",应改为"a+=b""if(a=b)",应改为"if(a==b)""if(a>0||b>0)",应改为"if(a>0&&b>0)""a<10",应改为"a<=10"363.表达式的取值范围出错:当遇到计算表达式的累加或是累减时,一定用到循环来完成相应的操作。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-….-1/m*m这个表达式,在这个题目中第一空有这样的for语句for(i=2;i<m;i++)y-=1/(i*i);从题目中不难发现i是一个变量,它的取值范围从整数2开始到m-1结束,最终计算的结果为y=1-1/2*2-1/3*3-….-1/(m-1)*(m-1)和题目要求的不符,因此将i<m改为i<=m。做这样的题目看两点:一看题目中的表达式,二看for语句中变量的取值范围。31题第二空同样的考点。374.C语言中的除法运算:这个考点同样考查表达式的相关知识。例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-….-1/m*m这个表达式,在这个题目中第一空有这样的for语句for(i=2;i<m;i++)y-=1/(i*i);刚才我们将了表达式的范围,现在我们考虑y-=1/(i*i);是否正确?赋值号左边问题不大,我们看看右边1/(i*i),其中i是整数,那么i*i也是整数,在C语言中1除以比它大的数时值为零。这样和题目的要求就不相符。记住:1/2的值为零,只有1.0/2或是1.0/2.0的值为0.5。39题第一空也同样是这种错误。385.找最大值和排序问题:遇到这种题目在改错题中最容易考查的是大于(>)、小于(<)等符号的变化,当你查找出错的地方没有语法错误,也没有使用了未定义的变量时,记住这个口诀:将大于改为小于,将小于改为大于!11题第二空、12题第一空和13题第二空、4题第二空都可以用这样的方法。396.函数的返回值及其参数:重点函数调用、函数的返回值和return中数据类型不一致,例如:1.1、3.1、16.1、19.2、34.1、36.1、40.1、48.1都死这样的错误;return后面的表达式及其类型:19.2、30.2、39.2形参和实参类型不一致,例如:5.1、13.1、17.2、20.1、25.2依据刚刚讲的方法很快就能找出出错点。赋值号的左右两边的类型不一致,例如:5.2、5.3、20.2、24.2、35.1、44.1一定特别注意!407.数组:(1)数组下标的初始值:数组下标从零开始,到长度减一结束。考试技巧:当出错行在定义部分时,先检查该定义语句有没有语法错误,再看定义语句中的变量有没有赋初始值,最后看变量赋的初始值有没有正确。定义初始值有窍门,遇到累加时,用来存放累加和的变量一般赋值为零,遇到求阶乘时,用来存放阶乘值的变量一般赋值为一。8.1中的变量k赋值为1,但是我们说了数组的下标只能从0开始,因此将1改为0就行了。41(2)数组和字符串长度减一:当使用数组中的元素时,最大值只能到数组长度减一。字符串以’\0’作为字符串的结束标志,因此取值最大也只能到字符串长度减一。25.2中输出printf(“%d”,aa[i]);分析程序知道i在此时就是数组的长度,我们要输出数组中的元素,最大就只能到aa[i-1],因此改为printf(“%d”,aa[i-1]);就行了。4.1和38.2中考查的是字符串长度减一的问题。42(3)数组下标往后走:当题目要求将一个数组中的元素直接赋值或是以某种方式复制到另一个数组中时,接受数据的数组中的下标要自增。9.1中s[j]=s[i];将s[i]中的值复制给s[j],联系上下函数段发现i是一个变量被for语句控制,从0开始直到遇到’\0’结束。i一直在加。但是j没有变化,因此改为s[j++]=s[i];即可。类似的题目有:25.2、26.2、32.1、50.2。43(4)字符数组复制操作:若程序中的循环中有s[j++]=s[i];循环后面一般应有语句s[j]=‘\0’;常见的错误时题目[]内写的是i而不是j;s[j]=‘\0’在填空题中也常被作为备选项让大家填。448.特例:部分题目的解答很特殊,需要根据上下文中的内容来解答题目;例如10.1,在此题目中,定义了变量t=0;根据下面程序中的循环,s=0.0,首先加的是变量t的值,即s的值是从0.0开始的,s得到的值是:s=0.0+0.0+1.0/3+……,观察表达式的值,这个少加了第一项1.0的值,所以变量t的初值不能是0.0,只能是1.0,或者是1;类似的题目有:21.2,33.2、40.2、43.1、47.1、50.1459.链表链表的题目分为带头结点的和不带头结点的链表;1、带头结点的链表带头结点的链表的第一个空的改为:p=h->next;第二个空改为:p=p->next;.2、不带头结点的链表不带头结点的链表的第一个空的改为:p=h;第二个空改为:p=p->next;.4610.其它循环语句、if语句、复合语句的花括号后多加了分号赋值号与等号混淆引号或括号不对称(只有一边)复合语句少了“{}”变量的初值不正确或未赋初值47利用scanf()函数给变量赋值时忘记加地址运算符“&”输入输出的数据类型与所用格式说明符不一致输入数据时,企图规定精度,如:scanf("%7.2f",&a);switch语句中漏写break语句在引用数组元素时,将定义数组时的下标值作为数组最后一个元素的下标使用scanf()函数时,输入数值型数据的方式与要求不符,或输入字符格式与要求不一致(此类错误虽不方便出改错题,但对任何C程序设计的学习者来说却是必须注意的地方)48#include<stdio.h>voidfun(char*s){inti,j;for(i=j=0;s[i]!=‘\0’;i++)if(s[i]!=‘c’)/**********found*********/s[j]=s[i];/**********found*********/s[i]=‘\0’;}
main(){chars[80];printf(“enterastring:”);gets(s);
printf(“Theoriginalstring:”);put(s);fun(s);
printf(“Thestringafterdeleted:”);puts(s);printf(“\n”);}s[j]=‘\0’这是前移问题,请注意赋值号左右两端的数组下标(或指针)都得往后移,同时注意字符串的末尾手动加一个结束标志‘\0’。例3.在给定的程序中,函数fun的功能是:从s所指字符串中删除所有小写字母c。49例4:下列给定程序的功能是:读入一个整数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<n;i++)/********found********/if!(n%i)
{m=0;break;}
return(m);}(1)去掉;(2)if后加括号main(){intj,k;
clrscr();
printf(“\nPleaseenteranintegernumberbetween2and10000:”);
scanf(“%d”,&k);
printf(“\n\nTheprimefactor(s)of%dis(are):”,
k);
for(j=2;j<=k;j++)
if((!(k%j))&&(IsPrime(j)))
printf(“\n%4d”,j);
printf(”\n”);50例6:下列给定程序中,函数fun的功能是:将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的字符放在c的尾部,如:a=“abcdefg”,b=“1234”,则c="a1b2c3d4efg"#include<conio.h>#include<stdio.h>#include<string.h>/**********found********/fun(chara,charb,charc){while(*a&&*b){*c=*a;c++;a++;*c=*b;c++;b++;}if(*a=='\0')/*********found*********/while(*b)*c=*b;c++;b++;}else/*********found*********/while(*a)*c=*a;c++;a++;}*c='\0';}main(){chars1[100],s2[100],t[200];clrscr();printf("\nEnters1string:);scanf("%s",s1);printf("\nEnters2string:);scanf("%s",s2);fun(s1,s2,t);printf("\nresultis:%s\n",t);}改正方法:voidfun(char*a,char*b,char*c)while(*b){*c=*b;c++;b++;}while(*a){*c=*a;c++;a++;}51例6:下列给定程序中,函数fun的功能是:根据形参m(9=>m>=2)的值,在mXm的二维数组中存放如下所示的数据,由main()函数输出例如:若输入2若输入4
则输出12则输出1234
242468
36912
481216请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!52#include<stdio.h>#include<conio.h>#defineM10inta[M][M]={0};/********found*******/fun(int**a,intm){intj,k;for(j=0;j<m;j++)for(k=0;k<m;k++)/********found*******/a[j][k]=k*j;}main(){inti,j,n;clrscr();printf("Entern:");scanf("%d",&n);fun(a,n);for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%4d",a[i][j]);printf("\n");}}voidfun(inta[M][M],intm)a[j][k]=(k+1)*(j+1);二级C应试辅导53例7:下列给定程序中,函数fun的功能是:删除数列中值为x的元素,n中存放的是数列元素的个数。请改正程序中的错误,使它能得出正确的结果。#include<stdio.h>#defineN20fun(int*a,intn,intx){intp=0,i;a[n]=x;while(x!=a[p])p=p+1;/********found*******/if(P==n)return-1;else{for(i=p;i<n;i++)/********found******/a[i+1]=a[i];returnn-1;}}54#include<stdio.h>#defineN20fun(int*a,intn,intx){intp=0,i;a[n]=x;while(x!=a[p])p=p+1;/********found*******/if(P==n)return-1;else{for(i=p;i<n;i++)/********found******/a[i+1]=a[i];returnn-1;}}main(){intw[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;n=10;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\nInputx(todelete):");scanf("%d",&x);printf("Delete:%d\n",x);n=fun(w,n,x);if(n==-1)printf("***Notbefound!***\n\n");else{printf("Thedataafterdeleted:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\n\n");}}if(p==n)return-1;a[i]=a[i+1];55第2章程序填空题填空题是计算机等级考试中的难点,占有的分值为20分。填空题答题技巧:若需要填的空出现在程序前面部分,多数是定义变量,此时需要观察后续那个变量尚未定义;若出现在中间部分,则赋值号左边填的内容和该语句之后的语句相关;赋值号右边填的内容和该语句之前的语句相关;若出现在打印语句之前,则填空内容和打印项相关;若出现在打印语句中,则填空内容和该语句前面最后一条可执行语句中赋值号左边的变量相关。56填空题上机填空题一般包含三个空。试题中用“/******found******/”来提示在下一行在有填空。要填空的位置用1、2、3表示。考生在考试时应删除标识1、2、3及下划线并填入相应的代码。特别要注意的是:只能在要填空的位置上进行修改,不要添行、删行、合并或分解行,不要改动程序的顺序,不要自己另编程序。
注意事项1.填写参数时注意主调函数与被调函数类型一致。数组名作形参可以不指定大小。如:1-1,2-1,10-12.根据题目意思,再从函数中找出对应的变量填写表达式。如:3-1,4-1,5-1,6-1,7-1,8-1,9-1,11-1,12-1,13-1,14-13.可以根据上下文的函数形式找出相应填写内容。如:5-1,6-1,7-1,8-1,9-1,10-1,16-158填空题解题步骤Step1:仔细阅读题目要求和功能,尤其是题目给出的输入和输出示例,以便检验填空后程序运行结果是否正确。Step2:在VC++6.0环境下调出源程序,读懂程序代码,根据“(数字)”出现的位置和题目要求填写空白内容。Step3:按F7键编译源程序,若发现有语法错误,重新检查或调整答题思路。Step4:按Ctrl+F5执行程序,按照试题示例中给出的数据进行测试,如果结果与给出的输出结果相同,该题就完成了;如果测试的结果与给出的结果不同,就需要进一步检查程序的逻辑错误。Step5:最后得到正确结果后,一定保存程序,否则不得分。59填空题分类(一)、数学题目例如:6、13、25、29、36、37、38、44、461.如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0或者是0.0;如果以后用到的是乘除运算,则赋初值为1或者是1.0;2.循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i<=m或者是i<=n;603.循环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。如果没有则一般填的是i++;4.看表达式中的每一项的运算规则,按照运算的规则把每一项中的n值替换为i,特殊情况例外。如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。61(二)字符串题目例如:8、10、11、12、14、18、19、21、35、45、48、491、循环的条件是判断该字符是否和结束符相等,如果相等,循环结束,否则继续循环。2、把一个数字字符转变成对应的数值的格式:ch=ch-‘0’;把大写字母转变为小写字母的格式:ch=ch+32;把小写字母转变为大写字母的格式:ch=ch-32;623、区分好字符数组中的指针和指针所指的值的关系。在循环语句中,当指针往后走一个位置的时候,用的是指针的自加,而不是指针所指的值的自加。4、掌握字符数组中的函数的使用的格式。即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是和指针。5、字符数组结束时都有一个结束符:‘\0’;在字符数组中的题目中的结束后要加上一个结束符。63(三)结构体题目例如:2、3、16、22、23、331、看清题目的意思。2、定义结构体变量时的格式。3、结构体中成员的调用格式。结构题体中的成员分为多种类型,调用结构体重的成员,使用的是“.”或者是“—>”运算符。如16.2。得到结构体中学生分数,a—>score[i]。4、如果返回的是结构体的话,函数的返回类型必须是结构体类型。调用函数的格式中,调用的若是结构体数组,则只用写结构体数组名。23.364(四)函数题目1、271、看函数的返回类型,函数的返回类型必须和return语句返回的表达式的类型一致。2、函数的调用的情况,函数调用时只用写函数的名称,以及函数的参数。如:第一题中的第二和第三空的内容就是调用函数,填写时只用填写函数的名称和参数,故填f1(x)和f2(x,y);3、函数指针的调用格式,类型名(*f)();27题中第一空。4、函数参数的传递时的调用的格式,如果函数传递的是二维数组,则在函数的传递过程中形式参数必须使用的是由m个元素组成一行的指针变量。第10题中的第一个答案:(*ss)[M]。65(五)链表题目:15、42、43、501、首先看清楚题目要求和意思。看清楚链表有没有带头结点,如果带有头结点,第一空填的内容是p=h—>next;如果是不带有头结点,则第一个空填写的是p=h;2、如果第二个空是在循环语句while的括号中的时候里面的内容填写的是p或者是q,以最近出现的为主;如果是在循环语句的里面的时候,填写的是q=p—>next;3、如果是排序的时候,从小到大的时候是大于号,从大到小的时候是小于号。如果出现了r,则在后面的空中填的是r。66(六)文件类型的填空28、30、32、471、文件类型的题目,看清楚题目意思,定义一个文件的指针,第一个位置出现fp的时候要填FILE*;2、掌握文件中fopen、fprintf、fscanf、fputs、fputc、fgets、fgetc、fseek、fwrite、fread、rewind函数的使用的格式。fopen(“文件名”,“打开方式”);fclose(文件指针);fscanf(文件指针,格式控制字符串,输入列表项)fprintf(文件指针,格式控制字符串,输出列表项)67fwrite(存入数据的指针,每一个数据占有的字节,输入数据的个数,文件指针);fread(读出数据的指针,每一个数据占有的字节,输出数据的个数,文件指针);3、文件打开之后要注意关闭文件,关闭文件的函数fclose(文件指针);4、在循环语句中如果使用到的是while(!feof())空格中填写的文件指针,表明判断的是文件指针是否已经指到了文件的末尾。备注:如果文件指针指到了文件的末尾,则feof返回的是非零值,如果没有指在文件的末尾,返回的是0值。68(七)、数组题目例如:3、4、7、17、20、24、26、31、34、39、40、41数组填空题在C语言考试中出现的频率很高,数组分为一维数组和二维数组。一维数组较二维数组来说简单一些。一维数组中存在这样一些类型:3、17、20、24、31、411、求一个数值数组中的所有值的平均值和把大于或者小于平均值的数辅导例外一个数组中。在计算机平均值时,首先定义一个变量来存放平均分,平均分一般用av变量来代替,如果av已经定义但是没有赋初值,那么这个空填写的内容的为:av=0;692、求算平均值值时有两种方法:第一种是算出总的分数,最后再除以总的个数即可,如算1到6之间的数的平均值,首先算出1到6的和,其次用综合除以总的个数6,即可以得到平均值;第二种方法是用每一个数除以6再把所有的和加起来。即1/6+2/6+3/6+4/6+5/6+6/6;所以在执行的一维数组中算平均值时也是存在来中情况,如果在for语句的后面有av=av/N;则第二个空一般的填写时av+=s[i];如果说没有av=av/N;则填写的是:av+=s[i]/N;703、在后面的一个空的填写的时候要注意变量的使用情况,如果变量使用了j和i,那么这一个空的填写的内容为:j++;4、如果一维数组中求的是把大于或者是小于平均值的数移动到数组的首部的时候,这种题目的解答时这样的,第一个空一般填写的内容为:j++;第二个空填写的内容是-1;5、对数组进行排序时:如果是从大到小的排序的时候,用的是小于符号,如果是从小到大排序时使用的是大于符号。71二维数组中的题目类型以及解决的技巧:例如:4、7、26、34、39、401、二维数组的题目,填空的时候一般是填在函数调用,函数在调用时候写的应该是而为数组的名字;在定义函数的时候使用的是函数的类型和由m各元素组成一行的指针变量,假设二维数组的名字是ss,那么填写的内容是:(*ss)[M];如果调用的是普通变量则填写的内容为:intn;2、二维数组遍历时,使用的是两个循环,使用的是循环的嵌套使用,第二个循环的使用的时候填写的内容为:j=0;(特殊的特殊处理)723、交换两个变量的值的使用的格式为:t=a;a=b;b=t;记住交换变量的格式和顺序。4、如果二维数组是字符串的题目的时候,要记住字符串中函数的使用的格式;即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。注意里面的格式中使用的都是和指针。5、特殊的特殊处理。第7题的填空的内容记住。73例1:给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:m=30请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdlib.h>#include<stdio.h>#defineN10doublefun(doublex[],double*av){inti,j;doubled,s;s=0;for(i=0;i<N;i++)s=s+x[i];/**********found**********/__1__=s/N;d=32767;for(i=0;i<N;i++)if(x[i]<*av&&*av-x[i]<=d){/**********found**********/d=*av-x[i];j=__2__;}/**********found**********/return__3__;}main(){inti;doublex[N]={46,30,32,40,6,17,45,15,48,26};doubleav,m;for(i=0;i<N;i++)printf("%4.0f",x[i]);printf("\n");m=fun(x,&av);printf("\nTheaverageis:%f\n",av);printf("m=%5.0f",m);printf("\n");}1:*av2.i3.a[j]74例2:给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/**********found**********/__1__fp;charstr[100],str1[100],str2[100];inta1;doublef1;fp=fopen("file1.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);/**********found**********/__2__;fp=fopen("file1.t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《儿童慢性病居家误吸预防专科护理》
- 茶叶零售店创业计划书
- 湖口县2025-2026学年数学四下期末质量跟踪监视模拟试题(含解析)
- 科学防范灾害共建平安校园一年级主题班会课件
- 关于2026年新员工入职确认回函8篇范文
- 湖南省长沙市岳麓区2025届数学三下期中学业水平测试试题含答案解析
- 传媒行业数字媒体内容创新方案
- 2026年项目合同评审结果通知函(5篇范文)
- 关于合作模式创新的讨论与建议函3篇范文
- 智慧教育平台设计与运营作业指导书
- 电力系统继电保护期末复习题及参考答案
- 2026年《继电保护》期末练习题库(完整版)附答案详解
- 成都市2022级(2025届)高中毕业班摸底测试(零诊)英语试卷(含答案)
- 办公家具投标方案(技术标)
- 航天器仪器舱结构设计放热设计教学课件
- 地理教育测量与评价
- 小学体育-单手肩上投篮教学设计学情分析教材分析课后反思
- 精神发育迟滞的护理常规
- 框剪结构18层住宅楼工程施工组织设计方案范本
- 招标投标法及招标实务
- 手术室毒麻药品管理培训课件
评论
0/150
提交评论