程序设计练习(3)
1 阅读程序。
阅读程序,写出程序的运行结果或在给定的选择项中选择结果,可检测我们对程序结构、语句、参数与程序流程是否掌握,是计算机等级考试中常见的测试题型之一。
1) 阅读以下程序。
s=0for a=1 to 6
for b=1 to a
s=s+bnext
next s
return
输出的和s=
解: 循环中a,b取值变化如下:a b
所有b的取值求和,结果为:56
2) 阅读程序:
set talk off
s=0for k=1 to 9
do case
case mod(k,3)=1
loopcase mod(k,3)=2
s=s+2*k
othes=s+k
endcase
endfor
s=],sreturn
程序运行结果是( )
a) 48 (b) 33 (c) 45 (d) 66
解:本题为计数循环与情况语句的嵌套,当循环变量k为1,4,7时返回;当循环变量k为2,5,8时,k的值分别乘2后累加到s;当循环变量k为3,6,9时,k的值分别累加到s。s的值应为48,选择a。
2 程序填空。
程序填空,把求解问题的程序列出,其中少了某个语句或某个语句成份,让我们填空完善程序,然后写出程序的运行结果(为便于阅卷),是程序设计中常见的测试题型。
1) 下面的程序是求1*3+3*5+5*7+7*9+..之和。若累加数大于1000时,则结束累加。
在下列程序中填上缺少的语句或语句成份,运行程序,将结果填入答题窗口。
set talk off
clearx=0
y=0do while .t.
x=x+1do case
case __
loopcase y>1000
exitotherwise
y=y+x*(x+2)
endcase
enddo y
set talk on
return
解:每一项的第一个数为奇数,即x为偶数时loop,填:mod(x,2)=0 或 x%2=0
输出结果:1131
2) 计算5元、2元和1元兑换100元的方法有多少种 。
set talk off
x=0for five=0 to 20
for two=0 to 50
one=100-five*5-two*2
ifx=x+1
endifendfor
endfor
xreturn
解:变量one为1元币的张数,不能为负数,填:one>=0
输出结果:541
3 调试程序。
调试程序,通常包括输入已有程序写出运行结果,检查并修改程序中的错误,运行修改后的程序写出运行结果等步骤。调试程序是程序设计中的重要一环。
1) 程序求能被3整除且至少有一位数字为5的三位数的个数。程序中有一行有错误。
1) 输入原程序并运行,记录运行结果,将结果填入答题窗口的①。
2) 更正程序中的错误,运行更正后的程序,记录运行结果,将结果填入答题窗口的②。
set talk off
clears=0
x=100do while x<=999
if mod(x,3)<>0
a=int(x/100)
b=int(x/10)-a*10
c=x-a*100-b*10
if a=5 .or. b=5 .or. c=5
s=s+1endif
endifx=x+1
enddo s
return
解:① 167
条件为能被3整除,前一个条件判断改为:if mod(x,3)=0
2) 下面的程序是计算1*2*3*4*5...的积,要求其积大于10000后结束程序运行,输出乘积的值。程序有一处错误。
1)输入原程序,记录运行结果,将结果填入答题窗口①处(程序名由考生定)。
2)更正程序中的错误,运行更正后的程序,记录运行结果,将结果填入答题窗口内的②处。
set talk off
store 1 to x,y
do while x<30
y=y*xx=x+1
if y>10000
loopendif
enddo y
set talk on
return
解:① 362880
当y>10000时应退出循环,把loop 改为 exit。
4 简单程序设计。
设计程序,解决简单的数据库操作与简单的数值计算问题,是测试我们对基本程序结构及其流程是否掌握的题型之一。
1) 已知f数列为:
f(1)=f(2)=1,f(n+2)=f(n)+f(n+1)
求f数列的第n项与前n项之和。
解: 应用数组求解,循环外赋初值,循环内完成递推。
input [n=] to n
dime f(n)
f(1)=1
f(2)=1
s=2for k=3 to n
f(k)=f(k-2)+f(k-1)
s=s+f(k)
endfor
f(n),s
return
2)求指定区间上的所有素数,并统计素数的个数。
求素数的常用方法有试商法与筛法两种。
1. 试商判别法。
为了判别奇数i(只有唯一偶素数2,不作试商判别)是不是素数,用奇数j(取3,5,…,直至sqrt(i))去试商。若存在某个j能整除i,说明i能被1与i本身以外的整数j整除,i不是素数。若上述范围内的所有奇数j都不能整除i,则i为素数。
有些程序把试商奇数j的取值上限定为i/2或i-1,也是可行的,但并不是可取的。这样作无疑增加了试商的无效循环。理论上说,如果i存在一个大于sqrt(i)且小于i的因数,则必存在一个与之对应的小于sqrt(i)且大于1的因数,因而从判别功能来说,取到sqrt(i)已足够了。
判别j整除i,常用以下方式实现:
vfp: i/j=int(i/j) 或 mod(i,j)=0 或 i%j=0
tc(vc++)i%j==0
2. 应用试商法求区间素数的vfp程序设计。
求指定区间上素数
set talk off
"本程序求区间[c,d]上的素数:"
input "输入区间下限c:" to c
input "输入区间上限d:" to d
"区间["+ltrim(str(c))+ltrim(str(d))+上的素数有:"
n=0if mod(c,2)=0确保c为奇数。
c=c+1endif
for i=c to d step 2
t=0for j=3 to sqrt(i) step 2
if i%j=0实施试商。
t=1exit
endif
endfor
if t=0t=0时i为素数。
str(i,6)
n=n+1if mod(n,10)=0
endifendif
endfor
"共"+ltrim(str(n))+个素数。"
return
运行程序,输入区间为[2000,2050],得。
共6个素数。
循环程序上机设计求解(3)
1) 求能被7整除且没有数字7的三位数的个数及其和。
2) 计算1*3*5...的积,要求其积大于10000后结束程序运行,输出乘积的值。
3) 求出区间[a,b]以内同时满足除以7余1,除以5余1,除以3余1的整数的个数。
(运行程序,求a=100,b=800的输出结果)
1解:n=0
s=0for k=100 to 999
if k%7=0 and at([7],str(k,3))=0
?? kn=n+1
s=s+kendif
endfor
n,sreturn
2解:store 1 to x,y
do while .t.
y=y*xx=x+2
if y>10000
exitendif
enddo y
set talk on
return
y=1for x=1 to 30 step 2
y=y*xif y>10000
exitendif
endfor
yset talk on
return
3解: 在从a到b的循环中用条件mod(i,7)=1 and mod(i,5)=1 and mod(i,3)=1检验整数i是否同时满足除以7余1,除以5余1,除以3余1。
set talk off
input [a=] to a
input [b=] to b
n=0for i=a to b
if mod(i,7)=1 and mod(i,5)=1 and mod(i,3)=1
n=n+1endif
endfor
nset talk on
return
程序设计(4)
1 已知一个数列的前三个数是1,2,3,从第四个数起,每个数都是前三个数之和。 求出该数列的第35个数。
2 求在1,2,3,4,..10这10个数中,任意选两个不同的数,要求它们的和能被2整除的数的总对数(注意: 象3+5和5+3认为是同一对数).
3 求出所有数字和为11且不含重复数字的三位自然数的个数。
set talk off
dime a(35)
a(1)=1
a(2)=2
a(3)=3
for i=4 to 35
a(i)=a(i-1)+a(i-2)+a(i-3)
endfor
a(35)
vfp程序设计作业 程序设计基础
实验报告。实验目的 1.掌握程序文件的建立 编辑和运行方法。2.熟练掌握交互式输入语句accept,input,wait的使用。3.掌握程序控制结构的编写。4.能正确解读基本程序。实验内容 实验教程 上机实例8 1 上机实例8 2 上机实例8 3 input 请输入存款年限 to nx do cas...
vfp程序设计作业 程序设计 二
实验报告。实验目的 1.掌握过程文件的使用。2.掌握选择嵌套 循环嵌套 选择与循环的相互嵌套的规则。3.能正确解读基本程序。实验内容 实验教程 指导书p58 上机实例9 2 clearset procedure to exam0902guo use stud do while t.学生信息管理系统。...
Matlab 3 MATLAB程序设计
辽宁工程技术大学上机实验报告。1,已知函数计算。function y f x if x 1 x 0 y x 1elseif x 0 x 1 y 1else x 1 x 2 y x 2end f 1 y ans f 0.5 y ans f 1.5 ans y ans 2 用for end循环语句求 1...