您好,欢迎访问三七文档
第一部分:程序入门一级一、选择结构(IF-ELSE-ENDIF)语句格式:IF〈条件〉〈语句序列1〉[ELSE〈语句序列2〉]ENDIF说明:IF和ENDIF必须配对使用,而ELSE可选。三个语句应各占一行。若省略ELSE子句,条件为真时,则执行〈语句序列1〉,然后再执行ENDIF后的语句;否则,若条件为假,即执行ENDIF后的语句。二、循环结构1、条件循环:语句格式:DOWHILE〈条件表达式〉〈语句序列1〉[LOOP]〈语句序列2〉[EXIT]〈语句序列3〉ENDDO说明:系统执行该语句时,先测试条件表达式的值,若为真,则执行循环体,在循环体中修改循环条件,直到条件为假时,脱离循环,执行循环体ENDDO后的语句。若遇到LOOP语句,则直接返回执行DO语句,测试条件以决定是否继续循环。若执行循环体时遇到EXIT语句,则不执行下面的语句,直接跳出循环,执行ENDDO后面的语句。注意:DOWHILE必须和ENDDO配合使用,两者缺一不可,DOWHILE语句前一定要有条件变量的初始值。2、计数循环FOR〈循环变量〉=〈循环初值〉TO〈循环终值〉[STEP〈步长〉]〈语句序列1〉[LOOP]〈语句序列2〉[EXIT]〈语句序列3〉ENDFOR/NEXT说明:使用和DOWHILE基本一致,注意步长和ENDFOR语句。三、程序举例:A.简单整除,求和求个数。Eg:求出[10,100]内所有能被2整除的整数的和(2530),个数(46)settalkoffclearn=0&&设置计数变量s=0&&设置求和变量fori=10to100ifmod(i,2)=0n=n+1&&满足条件计数变量加1s=s+i&&满足条件,求和变量增加endifendfor?n,ssettalkonreturnA1.求出[10,100]内所有能被7和9中至少一个数整除的整数的个数(22),和(1250).A2.求出[10,100]内所有能被7但不能被9整除的整数的个数(12),(665)A3.求出[10,100]内所有能被7和9中的一个且只有一个数整除的整数的个数(21),(1187)A4.编写程序,求出1~7000以内能被3或者7整除的数的个数(3000)。A5.编写程序,求[1,500]既能被6整除又能被7整除的数之和。(2772)A6.求前[1,100]内能被6或8整除的所有自然数的平方根的和(将第1位小数四舍五入,结果只保留整数)。(162)A8.将大于1000且能被3和5中至少一个数整除的所有整数按从小到大顺序排列后,求前面20个数之和。(20465)settalkoffcleark=1s=0&&设置求和变量x=1000dowhilek=20x=x+1ifmod(x,3)=0ormod(x,5)=0s=s+x&&满足条件,求和变量增加k=k+1endifenddo?ssettalkonreturnA9将小于2000且能被4和6中至少一个数整除的所有整数按从小到大顺序排列后,求最后20个数之和。(39390)B类:简单余数Eg:编写程序,求出100到500之间同时满足除5余4和除7余2条件的数的个数及和。(12)(3678)SettalkoffS=0N=0ForI=100to500Ifmod(I,5)=4andmod(I,7)=2S=s+IN=n+1EndifEndf?n,ssettalkonreturnB1、.编写程序,求在10~1000之间所有能被4除余2,被7除余3,被9除余5的数之和。2000B2.求出[200,800]内被除3余1并且被除5余3的整数的和。20020C类:退出控制Eg:编写程序,求出1到6000之间的能被5整除的前若干个偶数之和,当和值大于650时退出并输出和值。660SettalkoffS=0ForI=1to6000Ifmod(I,5)=0andmod(I,2)=0S=s+IEndifIfs650ExitEndifEndf?sC1:编写程序,求出1到5000之间的能被7整除的前若干个数之和,当和值大于等于1500时退出并输出和值。1617C2:编写程序,已知:S=2+4+8+16+32+…,求S不大于980的最大值。510SettalkoffS=0ForI=1to1000X=2**iS=s+x?x,sIfs980ExitEndifEndf?s-xC3:编写程序,已知:S=1+3+5+7+9+…,求S不大于1000的最大值。961C4:编写程序,已知:S=2+4+8+16+32+…,求S不大于9000的最大值。8190C5.已知数列:1,2,4,7,11,16,…,其规律是相邻两项之差依次是1,2,3,4,5,…。试求出此数列中大于5000的最小的项。5051C6.求出50以内最大的自然数n,使得从1开始的连续n个自然数的倒数之和小于3.5。(18)settalkoffclears=0forn=1to50s=s+1/n&&先求倒数再求和ifs=3.5exit&&退出循环endifendfor?n-1&&为什么?returnC7:求出50以内最小的自然数n,使得从1开始的连续n个自然数的倒数之和大于3.6(21)C8:求出50以内最小的自然数n,使得从1开始的连续n个自然数的立方和小于20000(16)C9.求出50以内最大的自然数n,使得从101开始的连续n个奇数之和小于2000。(17)settalkoffclears=0forn=1to50a=99+2*ns=s+aifs2000exitendifendfor?n-1returnC10.求出100以内使得算式1/(1*2)+1/(2*3)+…+1/(n*(n+1))的值小于0.952的最大的自然数n。19C11.某国在2000年时人口总数为1亿,若以每年3%的速度递增,试求出至少要到哪一年该国人口总数才会翻一翻。2024settalkoffclears=1forn=2001to2100s=s*1.03ifs=2&&应改为ifs=2loop&&应改为exitendifendfor?nsettalkonreturnC12.某国今年的人口总数为1亿,若以每年4%的速度递增,试求出至少要再过几年该国人口总数才会翻一翻。18C13.一球从100米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的3/4倍,试求出最小的自然数n,使得此球从开始下落至第n次着地时在垂直方向所经过的总路程超过678米。13settalkoffclearh=100s=0应改为:s=100forn=2to100h=h*3/4s=s+h应改为:s=s+2*hifs678exitendifendfor?nsettalkonreturnC14.一球从100米高处落至平地,并且连续多次再反弹再落下,假设每次反弹的高度都是前一高度的3/4倍,试求出最大的自然数n,使得此球从开始下落至第n次着地时在垂直方向所经过的总路程不超过590米。6第二部分:算法举例D类:多循环控制穷举法:穷举法就是将所有可能的方案都一一测试,找出其中符合指定要求的。Eg.把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问有多少种方案?(461)settalkoffclean=0foryi=1to100&&1分的最少1枚,最多100枚。forer=1to50forwu=1to20ifyi+er*2+wu*5=100n=n+1endifendforendforendfor?nsettalkonreturnd1.把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问兑换后硬币总数最多的与硬币总数最少的枚数之差是多少?(73)d2.把一张一元钞票,换成一分、二分和五分硬币,每种至少1枚,问兑换后其中二分的硬币恰有20枚的方案共有多少种?(11)d3.有60个学生一起买小吃,共花钱100元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生为0的)?19D4.有5羊4犬3鸡2兔值钱1496,4羊2犬6鸡3兔值钱1175,3羊1犬7鸡5兔值钱958,2羊3犬5鸡1兔值钱861,求兔值多少钱?(鸡13,兔29犬121,羊177)(修改并调试下列程序)settalkofffory=1to300forc=1to400forj=1to500fort=1to400if5*y+4*c+3*j+2*t=1496and4*y+2*c+6*j+3*t=1175;3*y+1*c+7*j+5*t=958and2*y+3*c+5*j+1*t=861?y,c,j,tendifendfendfendfendfsettalkonE类:简单位数运算Eg:编写程序,求三位数的奇数中,所有各位数字之和是15的倍数的数的和。19731SettalkoffS=0ForI=100to999A=int(I/100)B=int(mod(I,100)/10)C=mod(I,10)Ifmod(I,2)=1andmod(a+b+c,15)=0S=s+IEndifEndf?se1:编写程序,求三位数的奇数中,所有各位数字之和是12的倍数的数的个数。38e2:编写程序,求三位数的偶数中,所有各位数字之和是15的倍数的数的个数。34e3:编写程序,计算在0~50的范围内有多少个数,其每位数的乘积小于每位数的和。26e4:编写程序,计算1000以内有多少个这样的数,其个位数为6且该数能被9整除。11e5:编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数4e6:编写程序,求四位数的偶数中,所有各位数字之和是24的倍数的数的个数。187settalkoffn=0forI=1000to9999a=int(i/1000)b=int(mod(I,1000)/100)c=int(mod(I,100)/10)d=mod(I,10)ifmod(I,2)=0andmod(a+b+c+d,24)=0n=n+1endifendf?ne7:编写程序,求四位数的奇数中,所有各位数字之积(且不为0)是125的倍数的数的和。161095e8:编写程序,求在四位数的偶数中,所有各位数字之积(且不为0)是18的倍数的数的和。8638596e9:编写程序,计算100-10000以内个位上的数小于百位上的数的所有数之和。23314500(改错并调试下列程序)settalkoffclean=100fori=100to10000bw=mod(i,1000)gw=mod(i,10)ifgwbwn=n+1endifendfor?nreturnF类:回文数Eg:所谓回文数是从左至右与从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,求出100-200的范围内所有回文数的和。1460SettalkoffS=0ForI=100to200A=int(i/100)B=int(mod(I,100)/10)c=mod(I,10)Ifa=cS=s+iendifendf?sf1:所谓回文数是从左至右与从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,求在100-900的范围内所有能被3整除的回文数的个数。26f2:所谓回文数是从左至右或从右至左读起来都是一样的数字,如:121是一个回文数。编写程序,计算从1981年开始到3000年为止,共有多少个年号是回文数年号。11f3:求出[123,456]内恰好有两个数字相同的所有整数之和。26406(改正并调试下列程序)settalkoffclears=0forx=123to456a=int(x/100)b=int((x-a*100)/10)c=mod(x,1)ifa=banda!=cora!=banda=cs=s+xendifendfor?ssettalkonreturnG类:水仙花数Eg:“水仙花数”是指这样的数,其各位数字的立方和等于该数本身。编写程序求100至400的范围内有多少个水仙花数。3Settalkoffn=0ForI=100to
本文标题:VFP程序步骤
链接地址:https://www.777doc.com/doc-3369393 .html