1程序设计典型例题分析第一部分数学问题一、基本算法:数学数值问题的基本运算主要涉及到的算法有:累加、累乘、整除和求余数。1、累加主要是通过循环变量来控制循环结构,一般有两个变量,一是循环变量I和累加值变量S。主要语句有:S=0&&累加结果变量初始化&&STORE0TOI,SFORI=初始值TO终止值STEP步长&&DOWHILE条件表达式循环体内语句系列S=S+AS=S+F(I)I=I+1ENDFOR&&ENDDO?S&&输出累加结果S&&?S&&输出累加结果S例如:计算前十个整数的和。思考:统计前100个整数中既能被4整除,又能(或者)被7整除的整数的个数,并计算其和值。(详见典型例题)SETTALKOFFCLEARS=0N=1DOWHILEN=10S=S+NN=N+1ENDDO?1+2+3+...+10=,SSETTALKONSETTALKOFFCLEARS=0FORN=1TO10S=S+NENDFOR?1+2+3+...+10=+STR(S,6)SETTALKON22、累乘主要是通过循环变量来控制循环结构,一般有两个变量,一是循环变量I和累乘值变量S。S=1&&累加结果变量初始化&&STORE1TOI,SFORI=初始值TO终止值STEP步长&&DOWHILE条件表达式循环体内语句系列S=S*AS=S*F(I)I=I+1ENDFOR&&ENDDO?S&&输出累加结果S&&?S&&输出累加结果S3、整除主要采用取整函数INT()、求余函数MOD()和求余运算符%。设X,Y均为整型数值表达式,判断X是否被Y整除的表达式的常用方法有:(1)INT(X/Y)=X/Y(2)MOD(X,Y)=0(3)X%Y=0(4)X-Y*INT(X/Y)=04、求余数主要采用取整函数INT()、求余函数MOD()和求余运算符%。设X,Y均为整型数值表达式,求X被Y整除后余数的表达式的常用方法有:(1)X-Y*INT(X/Y)(2)MOD(X,Y)(3)X%Y35、两个变量值的置换对两个数的置换,主要处理的是将两个变量的值进行互换。设有两个变量X,Y,通过中间变量T和赋值语句后,将X和Y变量值互换。T=XX=YY=T6、求一组数的最大值和最小值设在数组A有10个元素,且都已赋值,现要求这10个元素中的最大值,可采用两两相互比较后再使用两变量值置换的语句来完成。其主要算法有:MAX=A(1)&&创建最大值变量MAX,并将A(1)赋值给MAXMIN=A(1)&&创建最大值变量MAX,并将A(1)赋值给MAX*将数组的每一个变量与MAX或MIN比较后,改变MAX和MIN的值FORI=2TO10IFA(I)MAXMAX=A(I)ENDIFIFA(I)=MINMIN=A(I)ENDIFENDFOR?MAX,MIN&&输出最大值和最小值47、求两个数的最大公约数和最小公倍数用2至这两个数的最小值之内任何一个数作为一个循环变量去除这两个数,若能找到一个数能同时被这两个数整除。则这个数就是他们的最大公约数,而这两个的乘积除以最大公约数后得到的值就是这两个数的最小公倍数。设有两个变量X,Y,中间变量I,主要的算法有:N=MIN(X,Y)FORI=NTO1STEP–1IFX/I=INT(X/I)ANDINT(Y/I)=Y/IGYS=IEXITENDIFENDFOR?”最大公约数为:”GYS?”最小公倍数为:”,X*Y/GYS&&?”最小公倍数为:”,Y*X/GYS8、判断X是否是素数(质数、完数)素数:除被1和本身整除外不能被其他数整除。用2至X之内的任一数去除X,若找到一个数能被X整除,则表示X不是素数,否则X是一个素数。常用算法:FORI=2TOX-1IFX%I=0或INT(X/I)=X/I或MOD(X,I)=0EXITENDIFENDFORIFI=X?X,“是一个素数”ELSE?X,“不是一个素数”ENDIF59、从十进制整数中取出数码将该数值除10后取余数,可得到该数值中的个位数码,然后用该数值除以10后的商去替代该数值,再除以10取其余数,得到十位数数码,依次类推,直到得到的商为零为止。设X是一个整数,其常用的得法有:I=1DOWHILEN0P=MOD(N,10)&&取某位的数码?”该数值从右往左第”+STR(I)+”位的数码为:”,PN=INT(N/10)IFN=0EXITENDIFI=I+1ENDDO思考题:使用FOR语句改写上述问题。提示:先把数转换为字符串,计算串长,然后循环。注意:数据类型的转换。10、判断一个数是否是一个整数、正整数、奇数或偶数(1)正整数IFINT(X)=XANDABS(X)=X&&整数:INT(X)=X?X,“是一个正整数!”ELSE?X,“不是一个正整数!”ENDIF(2)奇、偶数IFINT(X/2)=X/26?X,“是一个偶数!”ESLE?X,“是一个奇数!”ENDIF二、典型例题1、求1到100所有自然数的奇数之和。SETTALKOFFCLEARS=0FORI=1TO100step2S=S+IENDFOR?1到100所有自然数的奇数之和为:,SSETTALKON问题:(1)求从1到100的所有偶数之和。SETTALKOFFCLEARS=0FORI=2TO100step2S=S+IENDFOR?从1到100的所有偶数之和为:,SSETTALKON(2)求从1到N的所有被3整除的自然数之和,其中N的值可由用户通过键盘输入。SETTALKOFFCLEARINPUT'N='TOnS=0FORI=3TOnstep37S=S+IENDFOR?求1到N所有被3整除的自然数之和为:,SSETTALKON(3)求从1到N之间所有整数的平方和并输出结果。SETTALKOFFCLEARINPUT'N='TOnS=0FORI=1TOnS=S+I^2ENDFOR?从1到N之间所有整数的平方和为:,SSETTALKON(4)上述程序采用DOWHILE……ENDDO应如何编写?(5)统计前100个整数中既能被4整除,又能被7整除的整数的个数,并计算其和值。SETTALKOFFCLEARN=0S=0&&STORE0TON,SFORI=1TO100IFI%4=0ANDI%7=0N=N+1S=S+IENDIFENDFOR?Number=,N,Sum=,SSETTALKONSETTALKOFFCLEAR8N=0S=0FORI=4TO100STEP4IFI%7=0N=N+1S=S+IENDIFENDFOR?Number=,N,Sum=,SSETTALKONSETTALKOFFCLEARN=0S=0FORI=7TO100STEP7IFI%4=0N=N+1S=S+IENDIFENDFOR?Number=,N,Sum=,SSETTALKONSETTALKOFFCLEARN=0S=0FORI=28TO100STEP28N=N+1S=S+IENDFOR?Number=,N,Sum=,SSETTALKON92、求10!SETTALKOFFCLEART=1FORI=1TO10T=T*IENDFOR?10!为:,TSETTALKON3、从正整数K到M值的阶乘之和,其中K和M的值均由用户通过键盘输入。SETTALKOFFCLEARINPUTK=TOK&&改成ACCEPTK=TOK行吗,请说明理由INPUTM=TOMS=0FORI=KTOMT=1FORJ=1TOIT=T*JENDFORS=S+TENDFOR?STR(K,2)+!+…++STR(M,2)+!=,SSETTALKON思考题:对任意N,计算1!+2!+…+N!SETTALKOFFCLEARINPUTN=TONS=0FORI=1TON10T=1FORJ=1TOIT=T*JENDFORS=S+TENDFOR?‘1!+…++STR(N,2)+!=,SSETTALKONSETTALKOFFCLEARINPUTN=TONS=0T=1FORI=1TONT=T*IS=S+TENDFOR?‘1!+…++STR(N,2)+!=,SSETTALKON4、设计程序:Y=X-X3/3!+X5/5!-X7/7!+……Y=(-1)2X+(-1)3X3/3!+(-1)4X5/5!+(-1)5X7/7!+……其中表达式的项目有10项,X值由用户通过键盘中输入,请求出Y的值SETTALKOFFINPUTX=TOXS=0P=1FORI=1TO10K=2*I-1FZ=X^K11FM=1FORJ=1TOKFM=FM*JENDFORS=S+P*FZ/FM&&S=S+(-1)^(i+1)*FZ/FMP=-PENDFOR?Y的值为:,SSETTALKON问题:(1)利用公式SIN(X)=X-X3/3!+X5/5!-X7/7!+……,直到最后一项的绝对值小于等于10-5为止。SETTALKOFFINPUTX=TOXS=0P=1I=1DOWHILE.t.&&DOWHILEFZ/FM=10E-5K=2*I-1FZ=X^KFM=1FORJ=1TOKFM=FM*JENDFORIFFZ/FM10E-5EXITENDIFS=S+P*FZ/FMP=-PI=I+1ENDDO?Y的值为:,SSETTALKON(2)利用公式ex=1+x+x2/2!+x3/3!+……+xn/n!,输入x和N,计12算ex的近似值SETTALKOFFINPUTX=TOXINPUTN=TONS=0FORI=0TONFZ=X^IFM=1FORJ=1TOIFM=FM*JENDFORS=S+FZ/FMENDFOR?Y的值为:,SSETTALKON5、输出从3到10以内的自然数中所有素数SETTALKOFFM=3DOWHILEM10N=2&&FORN=2TOM-1DOWHILENM&&IFINT(M/N)=M/NIFINT(M/N)=M/N&&EXITEXIT&&ENDIFENDIF&&ENDFORN=N+1&&IFN=MENDDO&&?MIFN=M&&ENDIF?MENDIFM=M+1ENDDOSETTALKON13SETTALKOFFM=3DOWHILEM10FORN=2TOM-1IFINT(M/N)=M/NEXITENDIFENDFORIFN=M?MENDIFM=M+1ENDDOSETTALKONSETTALKOFFFOTM=3TO9FORN=2TOM-1IFINT(M/N)=M/NEXITENDIFENDFORIFN=M?MENDIFENDFORSETTALKON问题:(1)求出从1到100的所有素数的个数。SETTALKOFFK=0FORM=1TO100FORN=2TOM-114IFINT(M/N)=M/NEXITENDIFENDFORIFN=MK=K+1ENDIFENDFOR?KSETTALKON(2)求出从1到100的所有素数之和。SETTALKOFFK=0S=0FORM=1TO100FORN=2TOM-1IFINT(M/N)=M/NEXITENDIFENDFORIFN=MS=S+NK=K+1ENDIFENDFOR?K,SSETTALKON6、对输入的正整数,判别其中包含指定数码的个数(如2312132中包含数码2的个数为3)。SETTALKOFFINPUTM=TOM&&输入正整数INPUTN=TON&&输入在正整数中包含的数码15S=0&&采用累加DOWHILE.T.&&永真循环&&DOWHILEM0Y=MOD(M,10)IFY=NS=S+1ENDIFM=INT(M/10)IFM=0EXITENDIFENDDO?SSETTALKONSETTALKOFFINPUTM=TOMINPUTN=TONS=0DOWHILEM0Y=MOD(M,10)IFY=NS=S+1ENDIFM=INT(M/10)ENDDO?SSETTALKON7、从键盘中输入10个数,去掉一个最大数和最小数,然后求平均值。SETTALKOFFCLEARINPUT“N=”TONSTORENTOMAX,MIN,SFORI=1TO9INPUT“N=”TONIFMAXNMAX=NENDIF16IF