c语言ifi=1 2,全国计算机等级考试二级C语言上机答题技巧1.doc

全国计算机等级考试二级C语言上机答题技巧1.doc

全国计算机等级考试二级C语言上机答题技巧一、上机改错题的特点和注意事项 1上机改错的试题中通常包含两个或三个错误需要修改。2试题中用found/来提示在下一行或下面第二行有错。3错误的性质基本分语法错和逻辑错两种,也有些试题要求把语句添加在下划线处。4特别要注意的是只能在出错的行上进行修改,不要改动程序行的顺序,更不要自己另编程序。二、上机改错测试时,建议按以下步骤进行1首先仔细审题,了解试题的要求,看清楚试题给出的输入和输出例示,以便检验改错后程序运行的结果是否正确。2当在Visual C6.0环境下调出源程序后,审视所在函数,根据题义理解程序所采用的基本算法,做到心里有数。3先按CTRLF7对测试程序进行检查是否有语法错误。当编译提示有语法错时,可参考编译提示来查找并改正错误。4当不再出现语法错时,使用F7执行,看结果使用CTRLF5,按照试题的示例给出的数据进行试算,若试算的结果与给出的输出结果相同时,该题就做对了;若试算的结果与给出的输出结果不同,就应进一步检查程序中的逻辑错误。5当程序存在逻辑错误时,首先应当理解题意、读懂程序的算法,必要时可按步检查数据的流程,以便确定错误所在。例如,题目要求数据按由小到大排序,而结果数据是按由大到小进行了排序,问题可能出现在条件判断上。又如,输出的字符串比预期的短,就有可能字符串的结束标志放错了位置。再如做循环的时候数组上限下限错误了,基数是从0开始而不是1开始的。修改程序中的逻辑错时,要求考生认真读懂程序代码。6修改完成,得到正确结果后,一定不要忘记把修改后的程序存盘。三、上机编程题的特点和说明1在二级C程序设计上机考试中,要求完成一个独立的函数的编程。目前教育部考试中心已出版了上机考试习题集,这些有助于学习编程,但考生应当在学习过程中理解基本的算法,通过实际上机操作积累经验,才能掌握基本的编程能力。四、进行编程测试时,建议按以下步骤进行1首先仔细审题,了解试题的要求,记下试题给出的输入和输出例示,以便检验在完成指定的函数后程序运行的结果是否正确。2当在Visual C6.0环境下调出源程序后,应对照函数首部的形参,审视主函数中调用函数时的实参内容,以便明确在函数中需要处理的数据对象。3理解试题的要求,审视主函数中调用函数的方式,若在表达式中调用函数如把函数值赋给某个对象,则要求有函数值返回,需注意函数的类型,并在函数中用return语句返回函数值;若主函数中仅用语句形式调用函数,则需要通过形参间接地返回所得结果。4选择适当的算法进行编程,输入程序语句。不要忘记及时存盘5编译程序,直到没有语法错误。6调试程序,利用试题中给出的例示数据进行输入若要求输入的话,运行程序,用例示的输出数据检验输出结果,直到结果相同。1.书写标识符时,忽略了大小写字母的区别。mainint a5;printfd,A;编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。2.忽略了变量的类型,进行了不合法的运算。mainfloat a,b;printfd,ab;是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。3.将字符常量与字符串常量混淆。char c;ca和,而把它赋给一个字符变量是不行的。4.忽略了“”与“”的区别。在许多高级语言中,用“”符号作为关系运算符“等于”。如在BASIC程序中可以写if a3 then 但C语言中,“”是赋值运算符,“”是关系运算符。如if a3 ab;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a1b2编译时,编译程序在“a1”后面没发现分号,就把下一行“b2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。 zx y;tz/100;printff,t;对于复合语句来说,最后一个语句中最后的分号不能忽略不写。6.多加分号。对于一个复合语句,如 zx y;tz/100;printff,t复合语句的花括号后不应再加分号,否则将会画蛇添足。又如if a30;I ;本是如果3整除a,则I加1。但由于if a30后多加了分号,则if语句到此结束,程序将执行I 语句,不论3是否整除a,I都将自动加1。再如for I0;I5;I ;scanfd,x;printfd,x;本意是先后输入5个数,每输入一个数后再将它输出。由于for后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。7.输入变量时忘记加地址运算符“”。int a,b;scanfdd,a,b;这是不合法的。Scanf函数的作用是按照a、b在内存的地址将a、b的值存进去。“a”指a在内存中的地址。8.输入数据的方式与要求不符。scanfdd,a,b;输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法3,4输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。scanfd,d,a,b;C规定如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的3,4此时不用逗号而用空格或其它字符是不对的。3 4 34又如scanfad,bd,a,b;输入应如以下形式a3,b49.输入字符的格式与要求不一致。在用“c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。scanfccc,c1,c2,c3;如输入a b c字符“a”送给c1,字符“”送给c2,字符“b”送给c3,因为c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。10.输入输出的数据类型与所用格式说明符不一致。例如,a已定义为整型,b定义为实型a3;b4.5;printffdn,a,b;编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。11.输入数据时,企图规定精度。scanf7.2f,a;这样做是不合法的,输入数据时不能规定精度。12.switch语句中漏写break语句。例如根据考试成绩的等级打印出百分制数段。switchgrade case Aprintf85100n;case Bprintf7084n;case Cprintf6069n;case Dprintf60 ;defaultprintferror ;由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如case Aprintf85100 ;break;13在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。mainstatic int a101,2,3,4,5,6,7,8,9,10;printfd,a10;C语言规定定义时用a10,表示a数组有10个元素。其下标值由0开始,所以数组元素a10是不存在的。16.在不应加地址运算符的位置加了地址运算符。scanfs,str; C语言编译系统对数组名的处理是数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符。应改为scanfs,str;1、编一个函数funchar *s,函数的功能是把字符串中的内容逆置。例子如字符串中原有的内容为abcdefg,则调用该函数后,串中的内容为gfedcbafunchar *s int i0,t,nstrlens;for;s it*s i;*s i*s n-1-i;*s n-1-it;注该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次都进行两字符的位置对换,直到中间字符(用s i地址,因此要注意把它的内容取出再进行换位。即先进行取内容运算*)2、请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。例如,原来的字符串为CEAedca,排序后输出为CedcEAa。int funchar *s,int num int i,j,t;fori1;iforji 1;jifs ts;ssj;sjt;该题采用的排序法是选择法进行降序排序,算法是用外for循环从字符串的前端往后端走动,每走动一个字符都用内嵌的for)循环在该字符后找出最小的字符与该字符进行换位。直到外for循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即在最外层for循环中从1开始,只到num-2即可。3、请编写一个unsigned fununsigned w,w是一个大于10的无符号整数,若w是n(n2)位的整数,函数求出w的后n-1位的数作为函数值返回。例如w值为5923,则函数返回923;w值为923则函数返回23。unsigned fun unsigned w ifw10000 return w000;ifw1000 return w00;ifw100 return w0;return w; 注由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的用if语句。4、请编一函数void funint ttMN,int ppN,tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中,二维数组中的数已在主函数中赋予。define M 3define N 4void funint ttMN,int ppN int i, j;fori0;i pptt0;forj0;jifttj5、请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是删除所有值为y的元素。数组元素中的值和y的值由主函数通过健盘读入。试题程序。define M 20void fun int bb, int *n,int y int i,j0;for i0; i*n; i ifbby bbj bb;*nj;6、 请编写一个函数int funint x,它的功能是判断整数x是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数。x的值由主函数从健盘读入,要求不大于100。int fun int x int xxx * x;ifxxxxxxxx0 x return 1;else return 0;7、请编写函数fun,它的功能是求出ss所指字符串中、指定字符的个数,并返回此值。例如若输入字符串123412132,输入字符为1,则输出3。define M 81int funchar *ss,char cint num0;while*ss0if*ssc num ;ss ;returnnum;8、请编写函数fun,经的功能是求出1到1000之内能被7或11整除、但不能同时补7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。void funint *a,int *n int i,m0;fori1;i1000;i ifi70i0i70i0ami;m 1;*nm;10、要求程序的功能是把20个随机数存入一个数组,然后输出该数组中的最小值。其中确定最小值的下标的操作在fun函数中实现,请给出该函数的定义。试题程序。includeincludedefine VSIZE 20int vectorVSIZE;int funint list,int size int i,j0; fori1;isize;i iflistilistj ji; return j;/*注该题的算法是用一个变量(j来存储最小值元素的下标,在循环过程中让每个元素都与原最小值元素进行大小比较。改错题策略与技巧一般有23处错误,均在以“*found*”下按CtrlF7编译出现多个错误,由前向后修改。错误分两大类一. 语法错误 丢失分号,或误写成逗号关键字拼写错误,如小写变大写语句格式错误,如for句中多写或少写分号表达式声明错误,如少了()函数类型说明错误函数形参类型声明错误,如少*号运算符,书写错误,如写成二. 逻辑错误(语义错误) 变量初值错误循环次数不对下标越界运算类型不匹配编程题策略与技巧一认真阅读试题 题目所给出的限制条件一些术语解释题目提供的算法程序的执行结果二清晰地理解fun函数 函数的功能函数反回值类型参数传递方式运行结果三调试运行程序 先调试程序运行程序利用好VC调试工具

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值