刘永逸,阙清贤,赵巧梅
(湖南人文科技学院 计算机科学技术系,湖南 娄底417000)
在Excel中求解程序设计题的探讨
刘永逸,阙清贤,赵巧梅
(湖南人文科技学院 计算机科学技术系,湖南 娄底417000)
计算机程序设计是大学计算机基础教学中的核心课程。学生在Excel中求解程序设计题时对程序设计思想的理解,以及对程序设计的学习仍然感到有许多困难。Excel具有强大而又灵活的运算和数据处理功能,在Excel中求解一些程序设计题,对提高学生的计算机应用能力、分析问题和解决问题的能力,以及对程序设计的学习兴趣都有很好的帮助。通过在Excel求解一些典型的程序设计题,做一些研究和探讨,可以帮助学生提高在程序设计中如何与Excel有机结合的能力。
程序设计;Excel;教学方法;HNCRE
2009年6月27日,清华大学出版社在北京举行“《C程序设计》发行1 000万册纪念会”和“C程序设计教学与教材建设研讨会”,对谭浩强教授在我国计算机教育与普及方面取得的成就和所做出的贡献给予了高度评价。刘瑞挺等著名专家教授在《计算机教育》上撰文,对谭浩强教授的创作思想和科学精神进行了高度概括和赞扬[1,2]。
刘瑞挺教授对谭浩强教授的重要创作思想进行了高度概括,包括:“作者心中永远装着读者”、“按照学生的认知规律组织教材内容”、“要善于把复杂问题简单化和不把简单问题复杂化”、“计算机教材的核心价值在于能培养学生的计算机应用能力”、“不要迷信权威和不要盲目服从”等,这些创作思想对计算机教学也有着极其重要的指导意义。在教学中,教师心中也要永远装着学生,明确学生的要求,有的放矢,准确定位;除了使用“提出概念—解释概念—举例说明”的传统三部曲进行教学外,计算机教学中更要善于使用“提出问题—解决问题—归纳分析”新的三部曲,使学生明白为什么要引出有关内容、有什么用,使学生学起来目的性更明确、兴趣更浓。
计算机程序设计是大学计算机基础教学中的核心课程。学生对程序设计思想和算法较难理解,这在很大程度上影响了学生对程序设计的学习兴趣,因而也影响到计算机程序设计的教学效果。Excel电子表格软件,具有强大而又灵活的运算和数据处理功能,将一些程序设计题在Excel中求解,不仅能很快得出结果,而且学生也能够很容易理解。一方面,起到验证结果的作用,另一方面,也扩展Excel的应用,同时也能培养学生分析问题和解决问题的能力。所以,在Excel中求解计算机程序设计题,对提高学生的计算机应用能力和培养学生对程序设计的学习兴趣都有很好的帮助。
下面就湖南省计算机等级考试(HNCRE)程序设计题中的几类问题,在Excel中求解进行一些有益的探讨[3]。
2.1有通项公式的数列求和问题
基本思路有通项公式的数列,可记为an=f(n),n=1,2,…。在Excel中,可在某列中产生自然数列作为n的值,而在另一列中,使用公式“=f(n)”(其中n在Excel中以对应的单元格地址名表示)来计算出an。然后,通过求和功能,可以很容易地计算出数列的所有项或一部分项的和。
问题1 求1~108所有整数的平方和.
分析列出自然数1,2,…,108,并计算出它们的平方1,4,9,…,然后求出这些平方数之和。
解答(操作步骤) 在单元格A1中输入1,按住Ctrl键不松,将A1向下填充到A108(这样在A列中产生自然数列1,2,…,108);在B1中分别输入公式“=A1*A1”,将单元格B1向下填充到B108(这样在B列中产生数列1,4,9,…)。单击列标B,在状态行上可见“求和=425754”,即得1~108所有整数的平方和的结果为425754。
归纳已知某数列的通项公式f(n),要求此数列的前n项之和。在Excel中求解时,参照上面的操作步骤,只需将B1中的公式改为“=f(A1)”即可。
举一反三试在Excel中求解下列问题:
(1) 求1~100所有整数的立方和
(2) 求1~135所有整数的平方根的和.(提示:A1的平方根可表示为A1^0.5或SQRT(A1)等)
(3) 求使S(n)=2/1+3/2+4/3+…+(n+1)/n不超过50的最大值
(4) 求使S(n)=1*2+2*3+3*4+4*5+…+n*(n+1)大于2000001时n的最小值
2.2求数列和的累加和问题
基本思路记数列an=f(n),n=1,2,…,其前n项之和记为sn= a1+…+ an,n=1,2,…。对于求sn的各个值的问题,可改述为:s1= a1,sn= sn-1+an,n=1,2,…,经过这样的处理,其计算在Excel中很容易实现。
问题2 试计算下列各式的值:
(1) 1+2+…+100
(2) 1+(1+2)+…+(1+2+…+100)
(3) 1+1/(1+2)+…+1/(1+2+…+100)
分析列出自然数1,2,…,100,并计算出1,(1+2),…(1+2+…+100),以及1,1/(1+2),…,1/(1+2+…+100),最后求和。
解答(操作步骤) 在单元格A1 、B1和C1中都输入1;在A2、 B2和C2中分别输入公式“=A1+1”、“=B1+A2”和“=1/B2”;选定单元格A2 、B2和C2,将其公式向下填充到第100行。依次单击列标A、B、C,在状态行上可见“求和=5050”、“求和=171700”、“求和=1.98019802”,即得(1)、(2)、(3)的结果分别为5050、171700、1.98019802,如图1所示。
图1 问题2的求解结果
归纳已知某数列的通项公式f(n),记前n项的和为S(n),要求S=S(1)+S(2)+…+S(n),以及T=1/S(1)+1/S(2)+…+1/S(n)。在Excel中求解时,在A列和B列之间插入一列,计算出f(1),f(2),…,f(n) 其余操作参照上面的操作步骤即可。
举一反三试在Excel中求解下列问题:
(1) 10!(即1×2×…×10)
(2) 1+2!+3!+…+10!
(3) 1+1/2!+1/3!+…+1/10!
(提示:以上三题,仿照问题2的操作步骤,在B2输入公式“=B1*A2”,单元格B10中的数值就是10!)
(4) 求使S=2+4+8+16+32+…大于9000时的值
(5) 求S=1+(1+3)+(1+3+5)+…+(1+3+5+…+39)的值
(6) 已知S1=1, S2=1+2, S3=1+2+4, S4=1+2+4+8…求S=S1+S2+S3+S4+S5+…+S20的值。
(7) 求S=1+(1+2^0.5)+…+(1+2^0.5+…+20^0.5)的值。
2.3递推数列有关问题
基本思路递推数列的特点是,已知数列的第一项或前几项,而后续各项均可由其前一项或前几项计算出来。递推数列通常有计算公式,例如Fibonacci数列:fn=1,f2=1,fn=fn-2+fn-1,n=3,4, …。这样的计算,在Excel中极易实现。
问题3 已知Fibonacci数列{f(i)}:1,1,2,3,5,8,……,(前二项是1,1,其后每一项都是其前两项之和),计算:(1) 第45项;(2) 前50项中偶数项之和;(3) 和式1/2+3/5+8/13+…前30项之和.
分析综合考虑可知,主要解决的问题是:首先列出数列的前61项,然后抄出前50项中的偶数项,最后计算出30个分数:1/2、3/5、8/13、…。
解答(操作步骤) (1)在单元格F1和F2中都输入1,在F3中输入公式“=F1+F2”,将F3向下填充到F61(这样在F列中产生数列的前61项),在单元格F45中可得数列的第45项为1134903170。(2)在G2中输入公式“=F2”,选定G1:G2,将其向下填充到第50行(在G列中显示了前50项中所有偶数项),单击列G,在状态行上可见“求和=20365011073”。(3) 在H3中输入公式“=F2/F3”,选定H2:H3,将其向下填充到第61行(在H列中显示了30个分数的值),单击列H,在状态行上可见“求和=18.40184928”。相关数据如图2所示。
图2 问题3的计算结果
归纳湖南省计算机等级考试题中,有关递推数列的问题,基本上都可类似求解。
举一反三试在Excel中求解下列问题:
(1) 求Fibonacci数列的前50项之和、第21项至第40项之和、前50项中奇数项之和,和式1/2+2/3+3/5+5/8+… 前30项之和
(2) 已知数列:f(0)=f(1)=1,f(2)=0,f(n)=f(n-1)-2f(n-2)+f(n-3),(ngt;2)。求f(0)到f(50)中的最小值。【提示:求列出数列后,再使用MIN函数求出其最小值】
(3) 已知数列:f(1)=1,f(n)=1/(1+f(n-1)),(ngt;1),求f(50)。
2.4整数因数有关问题
基本思路有些问题,需要求出一个整数的所有因子(或称为约数)。设X=A*B,即A和B都是X的因子。假设Alt;B,那么A一定不超过X的算术平方根。例如,若Xlt;10000,则Alt;100,要求出A,可以计算X除以100以内整数的结果,在整除的情况下,就能得出一对A和B,也就求得了X的两个因子。
问题4 已知正整数A,B(假定Alt;B),满足A*B=5432,求S=A+B的最小值。
分析列出A所有可能的取值1~73(5432的平方根以内的整数),计算出所有B=5432/A和A+B的值,B为整数时A+B的最小值就是答案。
解答(操作步骤) 在单元格A1:A73中输入1~73,在B1和C1中分别输入公式“=5432/A1”和“=A1+B1”,将单元格B1:C1向下填充到第73行。从第56行可知A+B的最小值为153(A为56,B为97).
归纳某些与整数因数相关的问题,可在Excel中求解。
举一反三试在Excel中求解下列问题:
(1) 求满足A*B=718368,使A+B最小,且A,B(Alt;B)为正整数的A的值。
(2) 已知C=12345,正整数A、B(Alt;B),使A*B=C,且S=A+B的值最小,求S。
(3) 已知Alt;B,且A,B为正整数, 求满足条件A*B=716699且A+B最小的B值。
(4) 求10001、10003和10007中质数的个数。【提示:质数在其平方根内的因数只有1】
2.5数制转换有关问题
基本思路数制转换是指二进制、八进制、十进制和十六进制等不同进制之间数的转换,涉及整数之间和小数之间的转换,整数之间转换需要的计算是求整数相除的商和余数,小数之间转换需要的计算是求整数乘小数后结果中的整数部分和小数部分的数值,这些计算都是简单的算术计算,在Excel中通过使用取整函数INT(X)和求余函数MOD(X,Y)即可实现。
问题5 求出与十进制整数98765432等值的二进制数中数字1的个数。
分析根据“2除取余法”将十进制整数转换成二进制整数。
解答(操作步骤) 在单元格A1中输入98765432,在A2和B2中分别输入公式“=INT(A1/2)”和“=MOD(A1,2)”,将单元格A2:B2向下填充,直到A列出现0为止,单击列B,在状态行上显示“求和=13”。得结果为13.
归纳十进制整数转换成八进制和十六进制等其它进制,方法类似。
举一反三试在Excel中求解下列问题:
(1) 求出与十进制整数87654321等值的二进制数中数字0的个数.
(2) 求出与十进制整数87654321等值的四进制数中数字1的个数.
问题6 求出将十进制小数0.987654321等值转换为二进制形式表示后前25位小数中数字1的个数。
分析根据“2乘取整法”将十进制纯小数转换成二进制。
解答(操作步骤) 在单元格B1中输入0.987654321,在A2和B2中分别输入公式“=INT(2*B1)”和“=2*B1-A2”,将单元格A2:B2向下填充到第26行。单击列B,在状态行上显示“求和=17”。得结果为17.
归纳十进制纯小数转换成八进制和十六进制等其它进制,方法类似。
举一反三试在Excel中求解下列问题:
(1) 求出将十进制小数0.987654321等值转换为二进制形式表示后前100位小数中数字1的个数。
(2) 求出将十进制小数0.56789等值转换为八进制形式的表示中前18位小数中数字3的个数。
误差分析及改进方法按照问题6的操作方法求解题(1)时,发现后面的几十行数据全为0,这显然是有问题的。仔细分析得知,错误结果是由于计算机中实数运算的误差造成的。为了避免误差,本类题可改用整数运算来求解。改进方法:在单元格B1中输入987654321(九位整数),在A2和B2中分别输入公式“=INT(2*B1/1000000000)”和“=2*B1-A2*1000000000”,将单元格A2:B2向下填充到第101行。单击列B,在状态行上显示“求和=52”。得结果为52.
在Excel中求解计算机程序设计题,一方面,扩充了Excel的应用,这样的训练可提高学生的分析问题、解决问题的能力,以及计算机应用能力。另一方面,由于Excel中求解计算机程序设计题的局限性,更能体现出用计算机程序设计语言编程求解的优越性,这可激发学生对程序设计语言的学习兴趣。本文中的例题,可用于Excel操作的综合性和创新性实验项目,这对学生创新能力的培养也有一定的作用。
[1]刘瑞挺.祝贺《C程序设计》发行1000万册——谭浩强教授的创作思想[J].计算机教育,2009(12):5-7.
[2]李江涛.新时期图书出版应大力弘扬科学精神和培养科学思维[J].计算机教育,2009(12):15-16.
[3]戴经国,羊四清,刘永逸,等.大学计算机基础实验指导[M].北京:科学出版社,2010:89-116.
(责任编校:光明)
DiscussiononSolvingProgramDesignQuestioninExcel
LIUYong-yi,QUEQing-xian,ZHAOQiao-mei
(Department of Computer Science and Technology, Hunan Institute of Humanities, Science and Technology, Loudi 417000, China)
Computer program design is a core subject in college computer basic courses teaching .Students feel that there are many difficulties in understanding programming idea and studying program design .Excel has strong and flexible function of operation and data processing .So it’s very helpful for improving the students’ abilities of computer application and analyzing and solving problems and the student’s interest of studying program design. By using Excel to solve some classic program design questions, how to organically integrate the program design teaching and the Excel is researched and discussed .
program design; Excel; teaching method; HNCRE
2011-08-20.
湖南人文科技学院教学改革研究项目(RKJGY1048).
刘永逸(1965— ),男,湖南人文科技学院计算机科学技术系副教授,硕士,CCF高级会员,研究方向:网络与多媒体;阙清贤(1973— ),男,湖南人文科技学院计算机科学技术系副教授,硕士,研究方向:网络存储与嵌入式系统;赵巧梅(1980— ),女,湖南人文科技学院计算机科学技术系讲师,硕士,研究方向:无线传感器网络。
G642
A
1673-0712(2011)05-0125-04