资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
温故而知新,下笔如有神近几下半年程序员考试专题习题训练及答案-下午卷试题一【说明】求连续函数f(x)的根(方程f(x)=o的解)的最简单方法是二分法。为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与f(b)符号相反(ab),则在区间(a, b)中必然存在f(x)的根。因为当x从a变到b时,连续函数的值将从正变到负(或从负变到正),必然要经过0。区间(a,b)就是根的初始范围。取该区间的中点m,如果f(m)=0,则根就是m。如果f(a)与f(m)符号相反,则根一定在区间(a,m)中;如果f(m)与f(b)符号相反,则根一定在区间(m,b)中。因此,根的范围缩小了一半。依此类推,将区间一半一半地分下去,当区间的长度很小(达到根的精度要求,例如0.001)时,或者当区间中点处的函数值几乎接近于0 (即绝对值小于预先规定的微小量,例如0.001)时,近似计算就可以结束了。以下流程图描述了用二分法近似计算区间(a, b)中f(x)的根的过程。【流程图】(1) (a+b)/2(2) f(x),或f(a+b)/2)(3) |y|,或abs(y),其中y 可由f(x)或f(a+b)/2)代替(4) b本题描述了求函数根(0点)的二分法,题中还详细说明了二分法的原理。假设a和b是区间两端点值的变量。流程图中,一开始就将函数两端的值分别送y1和y2,接着判断yl与y2符号是否相反(同号时该算法不能往下进行)。若相反,则应将a与b的中点值(a+b)/2送x。此时的函数值f(x),即f(a+b)/2)应送y。因此,(1)处应填(a+b)/2,(2)处可填f(x)或f(a+b)/2)。接着需要判断新的函数值是否已经接近0,因此,(3)处应填丨y丨或abs(y)。如果这个新函数值已经接近0,则可以直接输出变量x的值(刚取的中点值)作为函数的近似根;如果该函数值尚未接近0,则需要将该区间进行二分,即需要判断选用左半区间还是右半区间,继续进行迭代计算。如果y*y1n?m:n”使得k取m和n中的较大者。此后,“for(;(k%m!=0)|(k%n!=0);k+);”使得k最后的取值正好能同时被m和n整除,因此,本函数的功能是求m和n的最小公倍数。9和6的最小公倍数是18。【问题2】请写出函数test_f2()的运行结果。9 41 4本题考查C程序中的数据定义和存储应用。对于定义char str=NewWorld,数组str由字符串NewWorld初始化后,其大小为9 (包括串为结束标志字符0),因此sizeof(str)的值为9。对于定义“char*p=str”,ptr指向“NewWorld”的第一个字符“N”(即数组str的起始地址对应存储单元处存放的字符),ptr是指针变量,因此sizeof(p)的值为4。对于定义“char i=0”, i是字符变量,其初始值为ASCII码值为0的字符,因此sizeof(i)的值为1。对于定义“void *ptr=malloc(50)”,ptr是指向50个字节存储区域的指针,因此sizeof(ptr)的值为4。【问题3】函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。缺陷:返回了局部数据(或变量,或数组)的指针(或地址)。 .修改方法:用malloc函数申请存储字符串的存储空间,令指针tstr指向该存储空间并返回tstr的值即可。本题考查C语言数据存储类型的基础知识及常见应用错误和处理知识。一般将内存划分为代码去、静态数据区、栈区和堆区,其中,栈区和堆区也称为动态数据区。C程序中的数据(大多以变量和数组表示)可存储在计算机系统内存区域的不同部分。全局变量(全局数组、外部变量等)和静态局部变量的存储单元在静态数据区分配,它们的生存期(即变量与其存储单元之间的绑定关系)较长,在程序运行期间始终存在。而局部变量(自动变量、局部数组等)的存储单元在栈区分配,它们的生存期较短,随着函数被调用而分配空间,函数调用结束后释放分配给它们的存储空间,这是由系统控制的。而堆区的存储空间由程序员根据需要用malloc函数申请,不用时用free函数释放,归还给系统。在函数test_f3中,数组tstr的空间在栈区分配,函数调用结束后该存储空间将由系统自动回收,随着程序的执行再进行分配,所以用“return tstr”返回该数组的首地址将可能使得需要用这个存储区中数据的地方出错。试题四【说明】函数del_substr(S,T)的功能是从头至尾扫描字符串S,删除其中与字符串T相同的所有子串,其处理过程为:首先从串S的第一个字符开始查找子串T,若找到,则将后面的字符向前移动将子串T覆盖掉,然后继续查找子串T;否则从串S的第二个字符开始查找,依此类推,重复该过程,直到串S的结尾为止。该函数中字符串的存储类型SString定义如下: (1)i-j+1,或其等价形式(2)j=T.length,或 j=T.length,或其等价形式(3)i-j,或i-T.length(4)k-T.length,或k-j,或其等价形式(5)S-length -T.length,或S-length-j本题考查c程序设计基本能力,包括指针、结构体类型的应用。根据题目部分的描述,首先要在字符串S中查找与T相同的子串,基本方法是逐个字符进行比对,其代码如下所示:显然,当S-chi与T.chj不相等时,i值需回退至本趟开始位置后再后移一个位置,从而为开始下一趟查找做准备。由于相同的字符个数为j个,因此i需回退至位置i-j+1,即空(1)处填入i-j+1。由于在串S中查找与1相同的子串是以“1length&jT.length”作为条件的,因此查找结束时,该条件必然为假。若在S中找到与T相同的子串,则“j chpS-chp+T.length-1中,则需要将S-chp+T.length移至S-chp,S-chp
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号