20##年普通专升本考试编程题总结
一、数学表达式
1、编写程序,其功能是:计算并输出下列多项式的值:, 将结果存到外存root.txt中。
CLEAR
SET TALK OFF
S=0
INPUT "请输入N的值:" TO N
FOR I=1 TO N
S=S+SQRT(N)
ENDFOR
?"S=",S
DISPLAY MEMORY LIKE S TO FILE ROOT
SET TALK ON
CANCEL
2、编写程序,其功能是:计算并输出下列多项式的值:
CLEAR
SET TALK OFF
S=0
INPUT "请输入N的值:" TO N
FOR I=1 TO N
S=S+1/i
ENDFOR
?"S=",S
SET TALK ON
CANCEL
3、编写程序,其功能是:计算并输出下列多项式的值:,并输出结果。例如,若n=20,则S=6.506583。
CLEAR
SET TALK OFF
S=0
INPUT "请输入N的值:" TO N
FOR I=1 TO N
S=S+log(i)
ENDFOR
s=sqrt(s)
?"S=",S
SET TALK ON
CANCEL
4、编写程序,计算表达式:直到。例如x=2.5,则函数值为:12.182494。
clear
SET TALK OFF
INPUT "请输入计算函数值的值:" to x
I=0
S=1
N=1
DO WHILE N>1E-6
I=I+1
N=N*X/I
IF N>1E-6
S=S+N
ENDIF
ENDDO
?"EX=",S
SET TALK ON
return
5、找出100~999之间的所有“水仙花数”(穷举法、统计)
clear
SET TALK OFF
for i=100 to 999
a=int(i/100)
b=int((i-a*100)/100)
c=i-a*100-b*10
if i==a^3+b^3+c^3
??i
endif
endfor
SET TALK ON
return
6、从键盘输入10个数,然后找出其中的最大值和最小值。(找最大数、最小数)
clear
dime a(10)
for i=1to 10
input "请输入数:" to a(i)
endfor
max=a(1)
for i=2to 10
if a(i)>max
max=a(i)
endif
endfor
min=a(1)
for i=2to 10
if a(i)<min
min=a(i)
endif
endfor
?"最大数为:",max
?"最小数为:",min
return
7、任意输入n个数,按由小到大的顺序排列并显示输出。(排序算法--选择法排序)
clear
input "请输入数组的个数:" to n
dimension a(n)
for i=1 to n
input "请输入数值数据:" to a(i) &&输入数组的元素
endfor
for i=1 to n-1
for j=i+1 to n
if a(i)>a(j)
temp=a(i)
a(i)=a(j)
a(j)=temp
endif
endfor
endfor
for i=1 to n &&输出排序以后的数组
??a(i)
endfor
cancel
8、求5的阶乘值(5!=?)
clear
p=1
for i=2 to 5
p=p*i
endfor
?"1*2*3*4*5=",p
Cancel
9、计算 t=1!+2!+……+10! 即求阶乘之和(双循环)。
clear
s=1
p=1
for i=2 to 10
for j=2 to i
p=p*j
endfor
s=s+p
endfor
?"s=1!+2!+……+10!=",s
cancel
10、多项式S=1+2+22+23+……+232,请设计一个程序,求S的值。
clear
s=1
p=1
for i=1 to 32
p=p*2
endfor
s=s+p
?"S=1+2+2^2+2^3+……+2^32=",s
cancel
二、矩阵的处理
编写程序,完成的功能是:实现B=A+A’,即把矩阵A加上A的转置,存放在矩阵B中。例如用户输入矩阵,其转置矩阵为,程序输出。
clear
dimension a(3,3)
dimension b(3,3)
dimension c(3,3)
for i=1 to 9
input "请给数组赋值:" to a(i)
endfor
for i=1 to 3
for j=1 to 3
b(i,j)=a(j,i)
endfor
endfor
for i=1 to 3
for j=1 to 3
c(i,j)=a(i,j)+b(i,j)
endfor
endfor
for i=1 to 3
for j=1 to 3
?? c(i,j)
endfor
?
endfor
return
(2)求矩阵A对角线元素之和。
clear
s=0
dimension a(3,3)
for i=1 to 9
input "请给数组赋值:" to a(i)
endfor
for i=1 to 3
s=s+a(i,i)
endfor
?"矩阵A对角线元素之和:" ,s
return
三、字符串的处理
1、编写一个程序,它的功能是:将ss字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4EFg”,则应输出“AbC4EFG”。
set talk off
clear
ACCEPT "请输入一串字符:" to ss
n=len(ss)
for I=1 TO N STEP 2
aa=substr(ss, i,1)
if (aa>="a".and.aa<="z")
bb=upper(aa)
ss=STUFF(ss,i,1,bb)
endif
endfor
?"输出转换后的字符串SS:",SS
SET TALK ON
CANCEL
2、程序的功能是:将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符B的ASCII码值为偶数、…、字符2的ASCII码值为偶数、…、都应当删除,其它依此类推。最后t所指的数组中的内容应是:“ACEG135”。
set talk off
clear
ACCEPT "请输入一串字符:" to s
n=len(s)
C=""
for I=1 TO N
w=substr(s, i,1)
ACI=ASC(W)&&返回最左边的一个字符的ASCII值。
if ACI%2=0
s=STUFF(s,i,1,C)
endif
endfor
?"输出转换后的字符串S:",S
SET TALK ON
CANCEL
3、编写程序,实现将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,原字符串为:def35adh3kjsdf7,执行结果为:defadhkjsdf3537
set talk off
clear
ACCEPT "请输入一串字符:" to s
n=len(s)
C=""
B=""
for I=1 TO N
w=substr(s, i,1)
if (w>="0".and.w<="9")
b=b+w
s=STUFF(s,i,1,C)
i=i-1
endif
endfor
S=S+b
?"输出转换后的字符串S:",S
SET TALK ON
CANCE
4、假定输入的字符串中只包含字母和*号。请编写程序,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。
set talk off
clear
J=0
ACCEPT "请输入一串字符:" to S
INPUT "请输入使字符串中尾部的*号最大值:" to N
LS=len(s)
for I=1 TO LS
w=substr(s, i,1)
if W!="*"
J=0
endif
if W=="*"
J=J+1 &&J用于统计串尾连续的*个数
endif
endfor
IF J>N
S=LEFT(S,LS-(J-N))
ENDIF
?"输出转换后的字符串S:",S
SET TALK ON
CANCEL
5、(对字符串排序处理)有5个英文单词,分别为:Word,Excel,Powerpoint,Type,Angle,要求设计出如下程序:
(1)在键盘上输入数N(本例输入5),把英文单词放入名为X大小为N的数组中
(2)显示出X数组中的英文单词
(3)对数组中的英文单词从小到大排序
(4)显示出排序后X数组中英文单词
set talk off
clear
INPUT "请输入数组的个数:" to N
DIMENSION A(N)
for I=1 TO N
ACCEPT "请输入一串字符:" to A(I)
ENDFOR
for i=1 to n-1
for j=i+1 to n
if a(i)>a(j)
temp=a(i)
a(i)=a(j)
a(j)=temp
endif
endfor
endfor
for i=1 to n &&输出排序以后的数组
??a(i),space(3)
endfor
SET TALK ON
CANCEL
三、数据的处理
1、程序的功能是:将两个两位数的正整数a.b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。
例如,当a=45,b=12时,执行该程序后,c=1524。
set talk off
clear
INPUT "请输入第一个正整数:" to a
INPUT "请输入第二个正整数:" to b
c=int(a/10)+(a-int(a/10)*10)*100
c=c+int(b/10)*1000+(b-int(b/10)*10)*10
?"c=",c
SET TALK ON
CANCEL
2、请编写程序,它的功能是:求出1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
set talk off
clear
j=0
dimension a(500)
for i=1 to 1000
do case
case i%7==0
if i%11!=0
j=j+1
a(j)=i
endif
case i%11==0
if i%7!=0
j=j+1
a(j)=i
endif
otherwise
loop
endcase
endfor
?"1到1000之间能被7或11整除,但不能同时被7和11整除的所有整数的个数:",j
for i=1 to j
??a(i)
endfor
SET TALK ON
CANCEL
3、编写程序,求Fibonacci数列中大于t的最小的一个数。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)。例如:当t=1000时,函数值为:1597。
clear
set talk off
input "请输入Fibonacci数列中的个数" to n
dime f(n)
f(1)=0
f(2)=1
for i=3to n
f(i)=f(i-1)+f(i-2)
endfor
for i=1 to n
?"f("+str(i,2)+")=",str(f(i),4)
endfor
set talk on
cancel
4、编写程序,实现根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。
set talk off
clear
input "请输入三角形的第一条边长值A=" TO a
input "请输入三角形的第一条边长值b=" TO b
input "请输入三角形的第一条边长值c=" TO c
s=f1(a,b,c)
?"返回构成等边三角形的类型:",S
SET TALK ON
CANCEL
*自定义函数F1
FUNCTION F1
PARAMETER X,Y,Z
if (X+Y)>Z.AND.(X+Z)>Y.AND.(Y+Z)>X
DO CASE
CASE X=Y.AND.X=Z.AND.Z=Y
FAN=3
CASE X==Y.or.X==Z.or.Z==Y
FAN=2
OTHERWISE
FAN=1
ENDCASE
ELSE
FAN=0
ENDIF
RETURN (FAN)
5、编写程序,实现计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,n=100,则输出s=148.874270,注意:要求n的值大于2但不大于100。
clear
a=0
b=0
s=0
input "请输入n的值:" to n
for i=3 to N
a=sqrt(i)
for b=2 to a
if i%b=0
exit
endif
endfor
if b>a
??i
S=S+sqrt(i)
endif
endfor
?"输出3到n之间(含3和n)所有素数的平方根之和:",s
return
6、编写程序,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。迭代表达式为:xn+1=cos(xn)
(1) 取x1初值为0.0;
(2) x0=x1,把x1的值赋给x0;
(3) x1=cos(x0),求出一个新的x1;
(4) 若x0-xl的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
clear
x1=0.0
x0=x1
x1=cos(x0)
do while (abs(x0-x1)>=0.000001)
x0=x1
x1=cos(x0)
enddo
?"cos(x)-x=0的一个实根是:",X1
return
1. 有3个数a,b,c,要求按大小顺序把它们打印出来。
2. 求1+2+3+………+100。
3. 判断一个数n 能否同时被3和5整除。
4. 将100~200之间的素数打印出来
5. 求两个数m和n的最大公约数。
6. 求方程式ax2+bx+c=0的根。分别考虑:(1)有两个不等的实根:(2)有两个相等的实根。
8. 有一个函数:
x (x<1)
y= 2x-1 (1≤x<10)
3x-11 (x≥10)
写一个程序,输入x,输出y值。
9. 给出一个百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80-90分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。
10. 求Fibonacci数列40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始该数是其前面两个数之和。即: F1=1 (n=1) F2=1 (n=2) 这是一个有趣的古典数学问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生
Fn =Fn-1+Fn-2 (n≥3) 一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?
11. 求100~200间的全部素数。
12. 求1!+ 2!+ 3!+ 4!+ … +20!。
13. (1+2+…+100) +(12+22+…+502 )+(1+1/2+…+1/10)。
14. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33。
15. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…,求出这个数列的前20项之和。
16. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,就只剩下一个桃子了。求第一天共摘多少桃子?
17. 用二分法求下面方程在(-10,10)之间的根。
2x3-4x2+3x-6=0
19. 用起泡法对10个数排序(由大到小)。
20. 将一个二维数组行和列元素互换,存到另一个二维数组中。
例如: a= 1 2 3
4 5 6
b= 1 4
2 5
3 6
22. 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
23. 用筛法求100之内的素数。
24. 用选择法对10个整数排序。
25. 一个3×3矩阵对角线元素之和。
26. 已有一个排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
27. 将一个数组按逆序重新排放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
1、计算1到100的立方根,将结果存于外存,文件名为ROOT。C
CLEAR MEMORY
S=0
DIMENSION X(100) &&定义100个数组
FOR I= 1 TO 100
X(I)=I^(1/3) &&将每个数的立方根放在数组中
S=S+X(I)
ENDFOR
DISPLAY MEMORY LIKE * TO FILE ROOT &&讲所有的内存变量都显示在窗口和写到文件
RETURN
2、近似计算COS(X)=
(X为弧度,计算精度为10-6)
clear
SET TALK OFF
INPUT "请输入计算余弦函数值的弧度值:" to x
I=0
S=1
N=1
DO WHILE ABS(N)>=1E-6
I=I+2
N=-N*X*X/((I-1)*I)
S=S+N
ENDDO
?"cos("+str(x)+")=", S
SET TALK ON
return
3、计算出1到100的平方根,将结果存于外存,其文件名为“result.C”
CLEAR MEMORY
S=0
DIMENSION X(100)
FOR I=1 TO 100
X(I)=sqrt(I)
S=S+X(I)
ENDFOR
DISPLAY MEMORY LIKE * TO FILE ROOT
RETURN
4、用梯形法求定积分:
(a=0,b=∏/2)
要求数据初始化、调用子函数及其输出计算结果用主函数(主程序)实现,其余用子函数(过程、子程序、类)实现。近似计算公式如下:
h/2[sia(a)+2(sin(a+h)+sin(a+2h)+...+ sin(a+nh))-sin(b)]
set talk off
clear
a=0
b=pi()/2
input "请输入近似公式中梯形的个数:" to n
tjf=Txjf(a,b,n)
? "所求正弦函数定积分的近似值为:",tjf
set talk on
return
* 子函数
function Txjf(x,y,z)
h=(y-x)/z
s=0
for i=1 to z
s=s+sin(a+i*h)
endfor
s=(sin(a)+2*s-sin(b))*h/2
return s
endfunction
5、编写程序,计算:ex=1+x+x2/2!+ x3/3!+.....+ xn/n!,直到最后一项小于105 。
clear
SET TALK OFF
INPUT "请输入计算函数值的值:" to x
I=0
S=1
N=1
DO WHILE N<1E5
I=I+1
N=N*X/I
IF N<1E5
S=S+N
ENDIF
ENDDO
?"EX=",S
SET TALK ON
return
6、编写程序,从键盘上任意输入10个整数,将这10个数在屏幕上显示成一行,并在下一行显示其中最接近平均值的数。
clear
s=0
j=0
b=0
n=1
top=0
bottom=0
dimension a(10)
for i=1 to 10
INPUT "请输入数值:" to a(i)
s=s+a(i)
endfor
S=s/10
clear
for i=1 to 10
??a(I)
ENDFOR
top=abs(S-a(1))
bottom=a(1)
for j=2 to 10
if top>abs(S-a(j))
bottom=a(j)
top=abs(S-a(j))
n=j
endif
endfor
?"接近平均值为A"+STR(N,2)+"=",bottom
?"平均值为=",S
return
6、已知笼中有鸡和兔共36只,他们的脚共有100只,编写程序计算鸡和兔分别有多少只。
clear
M=0
N=0
FOR X=1 TO 36
FOR Y=1 TO 36
IF ((X+Y==36).AND.(2*X+4*Y==100))
M=X
N=Y
ENDIF
ENDFOR
ENDFOR
?"鸡和兔分别是",M,N
return
8、编写程序,运行时接收用户键盘输入的一个长字符串,统计其中包含字母A的个数(不区分大小写),并在屏幕上输出统计结果。