《湖南省计算机等级考试辅导课件.ppt》由会员分享,可在线阅读,更多相关《湖南省计算机等级考试辅导课件.ppt(90页珍藏版)》请在三一办公上搜索。
1、1,湖南省计算机等级考试辅导,计算机系xx,2,内容提要,概括性指导重点结构、常用标准函数、自定义函数、基本处理、逻辑表达式常用算法:穷举法、递推分类练习十多种常见类型,3,FoxPro程序的基本结构,顺序结构选择(分支)结构IF.ELSE.ENDIF多选择(分支)结构DO CASE.ENDCASE,4,循环结构DO WHILE.ENDDOFOR.ENDFOR/NEXT嵌套分支与分支循环与循环循环与分支,5,程序中可省代码,set talk onclear&此句一般保留set talk offreturn,6,FoxPro程序设计重点结构,给出两种常用结构可作“模板”使用学会填空!,7,FOR
2、.ENDFOR|NEXT 结构 for i=to step if(loop、exit)endif endfor 计数循环!,8,DO WHILE.ENDDO结构 s=.i=.do while enddo?.一般的当型循环!,9,FoxPro程序中常用函数,系统内部标准函数取整:int(x)求余数:mod(a,b)求平方根:sqrt(x)绝对值:abs(x)其它.,10,用户自定义函数逻辑函数判定:prime(x)外部函数的方法(不讲)内部函数的方法(程序的一部分)见:有关素数程序设计部分注:二级必备!,11,程序中最基本的处理,计数初值:n=0 或.循环处理:n=n+1连加初值:s=0 或.循
3、环处理:s=s+i 或.,12,连乘初值:t=1 或.循环处理:t=t*i 或.,13,最常用的判断,a被b整除(倍数、因子)mod(a,b)=0 a是整数int(a)=a应用:求不定方程的整数解,14,多条件组合为逻辑表达式,x能被3整除但不能被4整除mod(x,3)=0 and mod(x,4)#0 x是能被3或5整除的偶数mod(x,2)=0 and(or),15,精确与非精确编程思路,精确编程:只输出所需结果。非精确编程:输出相关的数据,从中容易得出所需要的结果。,16,例:设s=2+4+6+,求s的最大值,使s=1000。#992(下两页有程序),17,精确编程(不细讲),clear
4、n=0s=0do while s1000 n=n+2 s=s+n*?n,senddo?s-n,18,非精确编程,clears=0for n=2 to 100 step 2 s=s+n?n,sendfor,19,1、简单的求和问题,数列求和ai=f(n),求 sn=a1+an,是数列循环处理:a=f(i),s=s+a 或 s=s+f(i)一定条件下的求和,20,求1108所有整数的平方和。#425754求s=1*2+2*3+100*101求s=1*3+3*5+99*101可在Excel中求解,21,求1135的平方根的和。#1051.31基本算法:循环、连加可在Excel中求解求1135的和的平
5、方根。,22,求351,432之间所有既不能被3整除,又不能被8整除的整数的和。#18413求1到1000之内能被7或11整除,但不能同时被7和11整除的所有整数的个数。#208,23,2、等比数列及求和,求2+4+8+16+32+,当累加数大于9000时,则终止计算并输出结果。#16382,24,已知S1=1,S2=1+2,S3=1+2+4,,求S=S1+S2+S3+S4+S20的值。#2097130,25,一球从100米高处落至平地并连续反弹、落下。设每次反弹高度按4/5倍递减,试求出最小的自然数n,使得此球从开始下落至第n次着地时在垂直方向所经过的总路程超过800米。基本算法:循环、(连
6、乘、)连加,26,3、递推问题(Excel可解),设有用26个表达式:a=1,b=1/(a+1),c=1/(b+2),z=1/(y+25),试求出z的值。#0.04基本算法:循环、单项递推f(1)=1,f(n)=1/(f(n-1)+n-1),27,斐波那契数列f(i):1,1,2,3,5,8,试输出前20项。基本算法:循环、递推f(1)=1,f(2)=1,f(n)=f(n-2)+f(n-1),28,基本算法(使用数组)定义数组:dimension f(50)循环初值:f(1)=1,f(2)=1;循环处理:f(n)=f(n-2)+f(n-1),29,cleardime f(20)f(1)=1f(
7、2)=1?f(1),f(2)for n=3 to 20 f(n)=f(n-2)+f(n-1)?f(n)endfor,30,斐波那契数列f(i):1,1,2,3,5,8,求F(45)值。#1134903170求F(1)+F(2)+F(50)#32951280098求F(1)+F(3)+F(49)#12586269025 求10000000内最大的#9227465 求10000000内的个数#35,31,斐波那契数列相关问题(例1),求S=1/2+2/3+3/5+5/8+的前30项的和。#18.46f(n):1,2,3,5,8,,31项S=1/2S=S+f(n-1)/f(n),n=3,4,.,31
8、,32,斐波那契数列相关问题(例2),求S=1/2+3/5+8/13+21/34+的前30项的和。#18.40f(n):1,2,3,5,8,,60项S=1/2S=S+f(n-1)/f(n),n=4,6,8,.,60,33,三项递推的数列,一个数列,它的头三个数为0,0,1,以后的每个数都是其前三个数的和,求此数列的前30项之和。#18947744,34,4、常见数字问题的处理,水仙花数:三位数,等于其各位数字之立方和。记住10000以内:153、370、371、407考试中,有四位水仙花数之说。看清题意!,35,水仙花数的算法是数字问题之根本!算法一:单循环(x:100999)由数x得出数字a
9、 b c?熟练掌握一种从数中取数字的方法算法二:三重循环(a:19 b,c:09)由数字a、b、c组成数x(100999),36,设x是一个四位数,千位到个位分别是a、b、c、d,则:a=int(x/1000)b=int(x-1000*a)/100)c=int(x-1000*a-100*b)/10)d=mod(x,10)(或见下页),37,b=mod(int(x/100),10)c=mod(int(x/10),10)或b=int(mod(x,1000)/100)c=int(mod(x,100)/10),38,clear&水仙花程序1n=0for x=100 to 999 a=int(x/100
10、)b=int(x-a*100)/10)c=mod(x,10)if x=a*a*a+b*b*b+c*c*c n=n+1?n,x endifendfor,39,clear&水仙花程序2n=0for a=1 to 9for b=0 to 9for c=0 to 9 x=100*a+10*b+c if x=a*a*a+b*b*b+c*c*c?x n=n+1 endifendforendforendfor?n,40,求在100,999内所有不含数字0且各位数字之积被96整除的数之和。#26640a*b*c0 and mod(a*b*c,96)=0,41,求123,4321内回文数的个数。#120都看作四
11、位数abcd,两种情况处理:a=0 and b=da0 and a=d and b=c,42,clear&回文数程序1n=0for x=123 to 4321 a=int(x/1000)b=int(x-a*1000)/100)c=int(x-a*1000-b*100)/10)d=mod(x,10)if(a=0 and b=d)or(a0 and a=d and b=c)n=n+1?x endifendfor?n,43,clear&回文数程序2n=0for a=0 to 4for b=0 to 9for c=0 to 9for d=0 to 9 x=1000*a+100*b+10*c+d if
12、x=123 and x0 and a=d and b=c)?x n=n+1 endifendforendforendforendfor?n,44,5、因子问题-因子个数、和,问100,200之间有奇数个不同因子的整数共有多少个?#5 基本算法:二重循环外循环:for x=100 to 200 穷举!内循环模块一:求x之因子个数内循环模块二:判断处理,45,clearn=0for x=100 to 200 k=0 for i=1 to x if mod(x,i)=0 k=k+1 endif endfor if mod(k,2)=1?x n=n+1 endifendfor?n,46,完数,求在10
13、,1000之间的所有完数之和。各真因子之和(不包括自身)等于其本身的正整数称为完数。例如:6=1+2+3,6是完数。#524,47,set talk offcleark=0for n=10 to 1000 s=0 for i=1 to n/2 if mod(n,i)=0 s=s+i endif endfor if s=n k=k+n endifendfor?kset talk onreturn,48,完备数,已知24有8个正整数因子(即:1,2,3,4,6,8,12,24),而24正好能被其因子数8整除,求 10,100之间有多少个正整数能被其因子的个数整除。#12,49,多因子完备数的概念,
14、若某整数N的所有因子之和等于N的倍数,则N称为多因子完备数,如数28,其因子1、2、4、7、14、28之和是56=2*28,28是多因子完备数。,50,求1,200之间有多少个多因子完备数。#4 基本算法:二重循环外循环:for x=1 to 200 穷举!内循环功能一:求x的因子之和内循环功能二:判断处理,51,最大公约数,求出583573和559399的最大公约数。#79 基本算法:单循环求出所有因子,52,最小公倍数,求出9269和8671的最小公倍数。#268801a和b最大公约数d与最小公倍数k具有关系:a*b=d*k,53,6、组合问题:不定方程求解,大、中、小学生共36人消费,每
15、大4元,每中2元,每小1元,共120元,问大、中、小学生人数组合有多少种可能?(每类学生学生的人数均不为0。)基本算法:三重(或二重循环),54,程序(三重循环),clearn=0for x=1 to 36 for y=1 to 36 for z=1 to 36 if x+y+z=36 and 4*x+2*y+z=120 n=n+1?x,y,z endif endfor endforendfor?n,55,求方程3x-7y=1在条件|x|100且|y|40下的整数解的个数。#26基本算法:二重或单循环,56,已知正整数A,B(假定AB),满足A*B=5432,求S=A+B的最小值。#153 数
16、学结论:A与B相差小其和就小基本算法:二重或单循环求因子,57,(勾、股、)弦数,勾、股、弦(正整数)a2+b2=c2(求组数:abc)基本算法(多重循环)(1)c:(有固定值或循环给出)(2)b:2c-1(3)a:1b-1,58,求121,140 之间的弦数的个数。(如5是弦数:32+42=52)#8,59,clearfor c=121 to 140 for b=2 to c-1 for a=1 to b-1 if a*a+b*b=c*c?a,b,c endif endf endfendf,60,一个特殊考题,今有5羊4犬3鸡2兔值钱1496,4羊2犬6鸡3兔值钱1175,3羊1犬7鸡5兔值
17、钱958,,2羊3犬5鸡1兔值钱861。求羊价。#177(、121、23、29)5x+4y+3z+2w=14964x+2y+6z+3w=11753x+y+7z+5w=9582x+3y+5z+w=861,61,7、高精度计算除法,令a=113,b=355,不考虑四舍五入,求a/b的结果中:(1)小数点后第30位数字是几?(2)小数点后前30位数字之和是多少?答案:(1)4(2)160(算法见下页)计算器可得32位小数!,62,由a、b求q、r使10*a=b*q+r,基本算法循环:for i=1 to 30基本处理:模拟手工计算方法每做一次除法,得一位商和余数a=a*10q=int(a/10)a=
18、mod(a,b)r就是下一次的a,63,程序,a=113b=355s=0for i=1 to 30 a=a*10 q=int(a/b),*?str(q,1)s=s+q a=mod(a,b)endfor?q,sreturn,64,8、同构数,所谓“同构数”:一个数,它出现在它的平方数的右侧。记住10000以内的:1、5、6、25、76、376、625、9376特点:mod(x*x,m)=x m=10、100、1000,65,clearn=0for x=1 to 9999 do case case x10 m=10 case x100 m=100 case x1000 m=1000 case x1
19、0000 m=10000 endcase if mod(x*x,m)=x?x,x*x n=n+1 endifendfor?n,66,9、完全平方数,完全平方数x(如144=122)y=int(sqrt(x)满足条件:x=y*y1,4,9,25,求1000以内完全平方数个数。1,4,9,16,961,67,clearn=0for x=1 to 1000 y=int(sqrt(x)if x=y*y?x n=n+1 endifendfor?n,68,10、数制转换,求出将十进制整数98765432等值转换为二进制形式表示后,其中数字1的个数。#13 算法提示:单循环(2除取余法,直到余数为0)循环处
20、理:r=x%2,x=int(x/2)计算器!,69,程序,clearx=98765432p=2n=0do while x0 r=mod(x,p)if r=1 n=n+1 endif?p,x,r x=int(x/p)enddo?str(x,20)?n,70,求出将十进制小数0.5432等值转换为二进制形式表示后,其中小数点后第15位数字。#1 算法提示:单循环(2乘取整法)循环处理:r=int(2*x),x=x-r计算器:0.5432*215二进制,71,程序,clearx=0.5432p=2?xfor n=1 to 15 y=p*x?y z=int(y)x=y-zendfor?z,72,11、
21、素数(质数)问题,一般算法(略)使用自定义函数,73,使用自定义内部逻辑函数prime(x),function primeparameters xprivate iif x2 return.f.endif,for i=2 to x-1 if mod(x,i)=0 return.f.endifendforreturn.t.,牢记在心,74,举例,求100以内素数个数。#25 求100,999内素数和。#75067 求500,2500内第25个素数#659 求3,1000内最大的五个素数之和。#4919(题1的程序见下页),75,clearn=0for x=1 to 100 if prime(x)
22、?x n=n+1 endifendfor?nreturnfunction primeparameters xprivate iif x2 return.f.endiffor i=2 to x-1 if mod(x,i)=0 return.f.endifendforreturn.t.,76,哥德巴赫猜测,德国数学家哥德巴赫曾猜测:任何大于4的偶数都可以分解成两个奇素数的和。有些偶数有多个分解式,如:10=3+7,10=5+5。,77,试求6744可以分解成多少个不同的分解式:6744=A+B(A=B)#144基本算法:主程序用单循环,78,解答,c=6744n=0for a=3 to c/2 s
23、tep 2 b=c-a if prime(a)and prime(b)n=n+1 endifendfor?n&后接函数,79,双胞胎素数,若两个素数之差为2,则称此两数为双胞胎数。求出200,1000之间的最大一对双胞胎数的和。#1764基本算法:主程序用单循环for a=200 to 1000-2,80,for a=200 to 1000-2 if prime(a)and prime(a+2)s=2*a+2?a,a+2,s endifnext?s&后接函数,81,友素数,若两个连续的自然数的乘积减1后是素数,则称此两数为友数对,该素数称为友素数。例如,由于 8*9-1=71,因此,8与9是友
24、数对,71是友素数。求100,200之间的友数对的数目。#40,82,k=0for n=100 to 200-1 if prime(n*(n+1)-1)k=k+1 endifnext?k&后接函数,83,第一类超级素数,(不含0的)素数,且去掉前面一位或多位后仍是素数。如1223基本算法:单循环循环处理:求有关数、判断素数对三位数x:y=x-int(x/100)*100对四位数x:y=x-int(x/1000)*1000,84,求100,9999内第一类超级素数个数。可分别求出100,999和1000,9999的个数下面求1000,9999内的个数。#99。,85,程序,clearn=0for
25、 x=1000 to 9999 y=x-int(x/1000)*1000 z=x-int(x/100)*100 w=x-int(x/10)*10 if not(0$str(x)and prime(x)and prime(y)and prime(z)and prime(w)?x n=n+1 endifendf?n&后接函数,86,第二类超级素数,(不含0的)素数,且去掉后面一位或多位后仍是素数。如2333基本算法:单循环循环处理:求有关数、判断素数y=int(x/10)z=mod(y/10),87,求100,9999内第二类超级素数个数。可分别求出100,999和1000,9999的个数下面求1000,9999内的个数。#16,88,程序,clearn=0for x=1000 to 9999 y=int(x/10)z=int(y/10)w=int(z/10)if not(0$str(x)and prime(x)and prime(y)and prime(z)and prime(w)?x n=n+1 endifendf?n&后接函数,89,12、猴子选大王,教材上例题(可耐心点,手工求)n个人围坐一圈,并顺序编号1n,从1号开始数,每数到m个就让其出局,重复.。求最后出局者的编号。当n=50,m=3时,答案为11,90,谢谢!,祝考试顺利!,