当前位置:文档之家› 程序改错示例

程序改错示例

程序改错:在修改程序时,不允许修改程序的总体框架和算法,不允许增加或减少语句数目。

练习1:下列程序是将“China”编成密码,规律是:如是大写字母,用原字母后面第4个字母代替原字母,例字母“A”后面第4个字母是“E”,用“E”代替“A”;小写字母用原字母后面第2个字母代替原字母,例如字母“a”后面第2个字母是“c”,用“c”代替“a”。

因此,“China”密码为“Gjkpc”。

SET COLLATE TO "MACHINE"LOCAL mSting,cString,chmString=SPACE(0)cString="China"FOR i=1 TO VAL(cString) ***FOR i=1 TO Len(cString)ch=SUBSTR(cString, 1, i) ***ch=SUBSTR(cString, i,1)IF BETWEEN(ch,"a","z")mString=mString+CHR(ASC(ch)+2)ELSEmString=mString+CHR(ASC(ch)+4)ENDIFENDFORWAIT WINDOW cString+"密码为"+mString练习2:下列程序中的过程(过程名为ren)用来产生n个a~b之间的随机整数,然后将它们以从大到小的顺序存储在数组X中,并分别输出n=10、a=5、b=25和n=20、a=50、b=80时数组X的值。

=ren(10,5,25)=ren(20,50,80)PROC renPARA a,b,n ***PARA n,a,bDIME x(n)x = 0FOR i = 1 TO nx(i) = INT((b-a)*RAND() + a)ENDFORFOR j = 1 TO n-1FOR k = j+1 TO nIF x(k) > x(j)t = x(j)x(k) = x(j) ***x(j) = x(k)x(k) = tENDIFENDFORENDFORFOR i = 1 TO nx(i)ENDFORENDPROC练习3:下列程序用来产生10个30~50之间的随机整数,并将它以从大到小的顺序存储在数组X中。

DIMENSION X(10)x = 0FOR i = 1 TO 10x(i) = INT((50-30)*RAND()+20) **x(i) = INT((50-30)*RAND()+30) ENDFORFOR j = 1 TO 9FOR k = j+1 TO 10IF x(k) > x(j)t = x(j)x(j) = x(k)x(k) = tENDIFENDFORENDIF **ENDFORCLEARFOR i = 1 TO 10x(i)ENDFOR练习4:数组A中存放着n个互不相同的整数,且按从小到大的顺序排列,要求在A数组中插入一个给定整数x(x不等于n个数中任何一个),插入以后A数组仍然是有序的。

假定这n个整数分别为10、20、30、40、50、60、70、80、90和100,X=55。

n=10DIMENSION a(n+1)x = 55FOR i = 1 TO na( i ) = i*nENDFORFOR j=1 TO n-1IF a(j)>xFOR k = n+1 TO j+1 STEP -1a(k) = a(j+1) ***a(k) = a(k-1)ENDFORa(j) = xLOOP ***EXITENDIFa(n+1)=IIF(j=n-1,x,a(n+1))ENDFORDISPLAY MEMORY LIKE A*练习5:数组A中存放着n个互不相同的数据,且按从小到大的顺序排列,要求从A数组中删除与给定数x相同的那个数,后面数依次前移一个位置。

假定这n个数为10、20、30、40、50、60、70、80、90和100,x=60。

要求:n=10DIMENSION A(n)x = 60FOR i = 1 TO nA(i) = i*nENDFORm = INT((n+1)/2)IF A(m) > xt1 = 1t2 = mENDIF ***ELSEt1 = mt2 = nENDIFFOR j = t1 TO t2IF A(j) = xFOR k = j TO n-1A(k) = A(j+1) ** A(k) = A(K+1)ENDFORA(n) = .F.EXITENDIFENDFORDISPLAY MEMORY LIKE A*练习6:找出1~2000之内所有的阿姆斯特朗数(Armstrong number)。

一个数如果等于其每一位数字立方之和,则此数称为阿姆斯特朗数。

例如407就是一个阿姆斯特朗数,因为:407 = 43 + 03 + 73。

要求:"1~2000之内的阿姆斯特朗数为:"nCount=0FOR i = 1 TO 2000n = LEN(ALLT(STR(i)))m = 0FOR j = 1 TO nm = m + VAL(RIGHT(ALLT(STR(i)), j, 1))^3*** m = m + VAL(substr(ALLT(STR(i)), j, 1))^3ENDFORIF i = n **IF i=mnCount= nCount+1iENDIFENDFOR”共计”+ALLT(STR(nCount))+”个”练习7:下列程序用来找出1000以内同时满足以下条件的数:1)个位数字与十位数字之和除以10所得的余数是百位数;2)该数是素数(仅能被1和本身整除的数称为“素数”)。

例如211、239、367等。

CLEARFOR i = 1 TO 1000yn = .T.FOR j = 3 TO i-1IF MOD(i,j) = 0yn = .F.EXITENDIFENDFORIF yns = ALLT(STR(i))s1 = RIGHT(s,1)s2 = LEFT(RIGHT(s,2),1)s3 = LEFT(RIGHT(s,3),1)IF MOD(s1+ s2,10) = s3 ** IF MOD(VAL(s1)+ VAL(s2),10) = VAL(s3) iENDIFENDIFENDIF ***ENDFOR练习8:下列程序用来计算1!+(1!+3!)+(1!+3!+5!)+…+(1!+3!+5!+…+11!)。

CLEARm = 0FOR i = 1 TO 6FOR j = i TO 2*i -1 STEP 2m = m + jc(j)ENDFORENDFOR‘1!+(1!+3!)+(1!+3!+5!)+…+(1!+3!+5!+…+11!)的值为:’+STR(m) FUNCTION jcPARAMETERS ns =1FOR k = 1 TO ns = s*kNEXT ****ENDFORRETURN ****RETURN S练习9:下列程序的功能是找出1000之内所有的完数,并统计它们的个数(完数是指这样一个数,该数的各因子之和正好等于该数本身。

例如,6的因子是1,2,3,而1+2+3=6,所以6是完数)。

要求:CLEARnCount=0FOR n1 = 1 TO 1000m=0FOR n2 = 1 TO n1-1IF n1/n2 = MOD(n1,n2)*** IF n1/n2 = INT(n1,n2)m = m + n2ENDIFENDIF ***ENFFORIF n1 = mn1nCount = nCount + 1ENDIFENDFORWAIT WINDOWS '"完数的个数为"' + STR(nCount)练习10:下列程序的功能是找出1000之内所有完数的个数(完数是指这样一个数,该数的各因子之和正好等于该数本身。

例如,6的因子是1,2,3,而1+2+3=6,所以6是完数)。

要求:CLEARn1 = 1nCount = 0DO WHILE n1<=1000m=0FOR n2 = INT(n1/n2) TO 1 STEP -1 *** n2=int(n1/2) IF n1/n2 = INT(n1/n2)m = m + n2ENDIFENDFORIF n1 = mnCount = nCount + 1n1ENDDO***ENDIFn1 = n1 + 1ENDDOWAIT WINDOWS '"完数的个数为"' + STR(nCount)练习11:下列程序的功能是找出两个正整数的最大公约数。

可以用辗转相除法来求最大公约数。

例如27和6,先用27除以6,余数为3,由于余数不为0,再将6作为被除数,3作为除数,得到余数为0,则3就是27和6的最大公约数。

要求:CLEARm = 27n = 6IF m<nt = mm = nn = tENDIFr = MOD(m,n)DO WHILE r<>0m = nn = t **n=rr = MOD(m,n)ENDDOWAIT WINDOWS '最大公约数为'+ STR(r) *** STR(n)练习12:下列程序的功能是找出1992至2010年中的闰年。

判断闰年的条件是:(1)能被4整除,但不能被100整除的年份;(2)能被100整除,又能被400整除的年份。

如1989,1900年不是闰年,1992,2000是闰年。

要求:n=1992y = 1DO WHILE n<=2010IF INT(n/4) = n/4IF INT(n/100) <> n/100y = 1ELSEIF INT(n/400) = n/400y = 1ELSEy = 0ENDIFENDIFENDIF****ELSEy = 0ENDIFWAIT WINDOWS STR(n) + '是' + IIF(y = ‘1’,'闰年','非闰年') ***y=1n = n + 1ENDDO练习13:下列程序的功能是求函数f(x)的值,同时分别给出x= -2,x=2,x=6时函数的值。

函数表达式为:CLEARf(-2)f(2)f(6)FUNCTION fPARAMETERS xIF x < 2y = 2*x^2 + 3*x + 4ELSEIF x = 2Y = 0ENDIF ****ELSEy = -2*x^2 + 3*x - 4ENDIFENDIFRETURN x **** RETURN Y练习14:下列程序用来产生20个随机数,并将它以从大小的顺序存贮在数组X中。

相关主题