改错题包含答案
一、程序改错 第1题 (10.0分) 题号:20*-*【程序改错】*-*题目:完数是指数n的各因子(1视为因子,n不视为因子)之和正好* 等于该数本身。例如:6为完数(因子为1、2、3,且1+2+3=6)。* 下列程序的功能是:找出1000 以内的所有完数,并将找出的* 完数及该数的所有因子输出。输出结果形式为:* 6,1,2,3* 28,1,2,4,7,14* 要求:* (1)将下列程序输入到项目的程序文件pcode中,并对其中的* 2条错误语句进行修改;* (2)在修改程序时,不允许修改程序的总体框架和算法,不允许* 增加或减少语句数目。*-clearfor i=1 to 1000 m=0 s='' for j=1 to i-1 if i/j=int(i/j) m=m+j*FOUND* s=s+ ',' + j endif endfor if i=m ?i*FOUND* ?s endifendfor答案:=(答案1)=s= s+ ','+ str(j )=或=s= s+ ','+ allt (str(j)=(答案2)=? s第2题 (10.0分) 题号:14*-*【程序改错】*-*题目:下列的程序功能是:求出不超过6位数的Armstrong数。所谓* Armstrong数是指一个n位数的正整数,它的每位数字的n次方* 之和等于该数本身。例如:153=13+53+33 要求:* (1)将下列程序输入到项目的程序文件pcode中,并对其中的* 2条错误语句进行修改;* (2)在修改程序时,不允许修改程序的总体框架和算法,不允许* 增加或减少语句数目。*-clear for m=1 to 100000 n=len(allt(str(m) x=0 for y=1 to n c=substr(allt(str(m),y,1)*FOUND* x=x+val(c)*n endfor*FOUND* if n=x ? 'Armstrong数', m endif endfor答案:=(答案1)=x =x +val(c) n=或=x =x +val(c) *n=(答案2)=if m=x=或=if x=m第3题 (10.0分) 题号:18*-*【程序改错】*-*题目:下列的程序用来产生30个0100之间的随机整数,并且找出* 其中的最大偶数和最小奇数* 要求:* (1)将下列程序输入到项目的程序文件pcode中,并对其中的* 2条错误语句进行修改;* (2)在修改程序时,不允许修改程序的总体框架和算法,不允许* 增加或减少语句数目。*-cleardimension a(30)for i=1 to 30*FOUND* a(i)=int(rand()*200)endforMmax=-1Mmin=100for i=1 to 30 ?str(a(i),3) if Mmax<a(i) and mod(a(i),2)=0 Mmax=a(i)*FOUND* else if Mmin>a(i) and mod(a(i),2)=1 Mmin=a(i) endifendfor?"最大偶数:",iif(Mmax=-1,"无",Mmax)?"最小奇数:",iif(Mmin=100,"无",Mmin)答案:=(答案1)=a(i) =int (rand() * 100)=(答案2)=endif第4题 (10.0分) 题号:11*-*【程序改错】*-*题目:下列程序用来产生20个0100之间的随机整数,* 并找出其中的最大数和最小数,输出时20个随机* 整数*均在一行显示,下一行显示最大数和最小数。*要求:* (1)将下列程序输入到项目中的程序文件pcode中,并* 对其中的2条错误语句进行修改。* (2)在修改程序时不允许修改程序的总体框架和算法,* 不允许增加或减少语句的数目。*-DIMENSION A(20)FOR I=1 TO 20 A(I)=INT(RAND()*100)ENDFORMmax=A(1)Mmin=A(1)?A(1)FOR i=2 to 20*FOUND* ?STR(A(I),3) IF Mmax<A(i) Mmax=A(i) ENDIF IF Mmin>A(i) Mmin=A(i) ENDIFENDFOR*FOUND*?"最大数是:" + Mmax + "最小数是:" ,Mmin答案:=(答案1)=?str(a(i) ,3)=(答案2)=?"最大数是:" + str(Mmax) + "最小数是:" , Mmin=或=?"最大数是:" ,Mmax , "最小数是:" , Mmin