程序设计习题 第 5 章 一把抓
5.1 集合运算
1. 看代码写结果
A |
B |
|
1 |
=to(10,1) |
|
2 |
=A1.to(2,6) |
=A1.to(9,3) |
3 |
=A2|B2 |
=B2|A2 |
4 |
=A2&B2 |
=B2&A2 |
5 |
=A2^B2 |
=B2^A2 |
6 |
=A2\B2 |
=B2\A2 |
7 |
=[A2,B2,A3] |
=[A3,A4,B2] |
8 |
=A7|A5 |
=A7|[A5] |
9 |
=A8(2|to(3,5)) |
=A7(1)([1,3,5]) |
10 |
=A7&B7 |
=A10([2,3])(1)([6,3,2]) |
11 |
=A7^B7 |
|
12 |
=A7\B7 |
2. 将序列[2,0,6,1,77,0,52,1,25,7]中大于等于10的成员选出来,并放入新的序列
3. 编程找出1000以内的所有完数,结果放入序列。(用集合运算)
4. 定义一个序列其中包含多个数字。用集合运算的方式实现奇数放在序列的左边,偶数放在序列的右边。(可以创建其他序列,不必在原序列中改变)
5. 任意输入8个整数存放在一个序列中,然后将奇数和偶数分别存入到两个不同的序列中,并按奇数、偶数交替的顺序输出这两个序列中的所有数据(先交替输出,如果奇数个数多,则再输出剩下的奇数,如果偶数个数多,则再输出剩下的偶数)。
6. 序列去重。
需求:
1. 输入一个长度为10的整型序列,并存入10个整数,其中有一些数据是重复的
2. 对序列进行去重,存入新的序列,不能改变序列中原来数字的顺序
7. 产生10个1-20之间的随机数放入入列,要求随机数不能重复
5.2 循环函数
1. (1)使用循环函数生成一个长度为10的序列A1,序列值为随机数
(2)将A1的每个成员值减去5,得到序列A2
(3)求A2成员值的平方和
2. 计算2+4+6+……+100的和
3. 计算n的阶乘,前20项
4. 计算级数:S=1+1/3+1/5+1/7+……的前100项之和
5. 编程计算表达式,n取值100
6. 1/(1x(1+1))+1/(2x(2+1))+1/(3x(3+1))+1/(4x(4+1))+1/(5x(5+1))...............1/(n(n+1)),计算前 100 项和
7. 大衍数列 0、2、4、8、12、18、24、32、40、50------
通项式:
an=(n×n-1)÷2 (n 为奇数)
an=n×n÷2 (n 为偶数)
求其前 100 项
8. 1/2-2/3+3/4-……+(-1)n-1n/n+1,求前20项和
9. ,取前10项求ln2的近似值
10. 用幂级数展开式,求的近似值,取前 5 项。
5.3 循环函数进阶
1. 序列 [2,5,-3,8,9,7],对奇数项计算绝对值,偶数项计算平方
2. 序列[1,2,1,5,3,4,8]中的奇数加5,偶数乘2,然后求均值
3. 将两个长度相同的序列[2,5,-3,8,9,7],[1,2,3,4,5,6]对位相减
4. 用循环函数将序列逆序,如[2,5,-3,8,9,7],变为[7,9,8,-3,5,2]
5. 使用循环函数生成序列[[1],[2,2],[3,3,3],[4,4,4,4],[5,5,5,5,5]]
6. 一个3行4列的二级序列,序列元素的值是其对应行号的平方与对应列号之和,求其所有元素之和。
7. 某股票20日价格数据[15.8,15.92,16.05,16.4,16.28,16.39,15.75,15.38,15.21,14.68,14.85,14.98,15.2,15,15.18,14.59,14.7,14.45,14.31,13.68]
(1)求最大的日增长额
(2)求5日移动均值MA 5,MA 5 = (前四天价格+前三天价格+前天价格+昨天价格+当天价格)/5
8. 某股票20日涨跌幅数据[-0.7538,-0.81,-2.1341,0.7371,-0.6711,4.0635,2.4057,1.1177,3.6104,-1.1448,-0.8678,-1.4474,1.3333,-1.1858,4.0439,-0.7483,1.7301,0.9783,4.6053,-5.5901],计算每日的累计涨跌幅。
9. 一个4行4列的二层序列,用循环函数计算该序列主对角线之和。
10. 输入六个随机数到2行3列的二级序列a中, 将二级序列a中的序列成员转置,即行列互换,存储到3行2列的二级序列b中。(用循环函数实现)
5.4 迭代函数
看代码写结果
A |
|
1 |
=[2,222,22,122,2222] |
2 |
=A1.iterate(~*2) |
3 |
=A1.iterate@a(~*2) |
4 |
=A1.iterate(~~*2,3) |
5 |
=A1.iterate(~~*2,5,~>500) |
5.5 定位选出
1. 序列[2,0,6,1,77,0,52,1,25,7]
(1)取出倒数第2个成员
(2)取出第2,3,6,-3个成员
(3)从第1个成员开始,每隔3个取一个
(4)选出大于等于10的成员
(5)选出不为0的成员
(6)选出奇数号成员
(7)找出所有0出现的位置
(8)找出所有奇数成员位置
(9)对序列中的成员求正弦,求正弦最大值,最大值位置以及对应的原序列成员
2. 计算1+2+3+……+100中所有奇数和偶数的和。用step()函数
3. 某产品销售数量和价格关系如图,有订单数量[221,87,33,73,162,227,403,288,78,213,374,152],求其对应的价格
4. 用选出函数,选出1~100之间每位数的乘积大于每位数的和的数
5. [95,92,83,89,76,98,58,77,85,90]为十名同学的成绩,找出大于平均分的学生序号。
6. 从序列中[221,87,33,73,162,227,403,288,78,213,374,152]定位成员[227,33,288]对应的位置
7. 交换最大值和最小值位置,例如[2,1,3,15,7,9],交换后[2,15,3,1,7,9]
8. 定义一个序列其中包含多个数字,实现奇数放在序列的左边,偶数放在序列的右边。
9. 给定一个整数序列nums 和一个整数目标值 target,请你在该序列中找出和为目标值 target的那两个整数,并输出它们的位置。
假设每种输入只会对应一个答案。但是,序列中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[1,2]
解释:因为2+7=9,输出2和7的位置[1, 2] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[2,3]
5.6 排序相关
1. 一组学生的身高和体重数据如下
身高:[1.21,1.35,1.32,1.18,1.46,1.25,1.33,1.37,1.29,1.40]
体重: [24,31,35,28,33,36,37,42,29,32]
(1)将学生身高从高到低排序
(2)返回身高降序排列的学生序号
(3)取前3名身高
(4)取前3名BMI值
(5)取前3名BMI的学生序号
(6)取前3名BMI值的学生身高数据
2. 给定一个序列,返回序列在排序之后,相邻元素之间最大的差值 。如果序列元素个数小于 2,则返回 0 。
示例 1:
输入: nums = [3,6,9,1]
输出: 3
解释: 排序后的序列是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。
示例 2:
输入: nums = [10]
输出: 0
解释: 序列元素个数小于 2,因此返回 0。
3. 给定整数序列 nums 和整数 k,请返回序列中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4], k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6], k = 4
输出: 4
4. 给定一个包含 [0, n] 中 n 个数的序列 nums ,找出 [0, n] 这个范围内没有出现在序列中的那个数。
示例 1:
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 2:
输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 3:
输入:nums = [9,6,4,2,3,5,7,0,1]
输出:8
解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
示例 4:
输入:nums = [0]
输出:1
解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。
参考答案:
5.1 集合运算
2.
A |
B |
C |
|
1 |
=[2,0,6,1,77,0,52,1,25,7] |
||
2 |
for A1 |
if A2>=10 |
>B1=B1|A2 |
3.
A |
B |
C |
D |
|
1 |
0 |
=[] |
||
2 |
for 1000 |
|||
3 |
for A2-1 |
if A2%B3==0 |
>A1+=B3 |
|
4 |
if A1==A2 |
>B1=B1|A2 |
||
5 |
>A1=0 |
4.
A |
B |
C |
|
1 |
[1,2,3,4,5,6,7,8,9,10] |
||
2 |
for A1 |
if A2%2!=0 |
>B1=A2|B1 |
3 |
else |
>B1=B1|A2 |
5.
A |
B |
C |
D |
|
1 |
=[46,68,99,28,50,41,76,39] |
|||
2 |
||||
3 |
for A1 |
if A3%2==0 |
>C1|=A3 |
>C2+=1 |
4 |
else |
>B1|=A3 |
>B2+=1 |
|
5 |
if B2<C2 |
for B2 |
>output(B1(B5),C1(B5)) |
|
6 |
for B2+1,C2 |
>output(C1(B6)) |
||
7 |
elseif B2==C2 |
for B2 |
>output(B1(B7),C1(B7)) |
|
8 |
else |
for C2 |
>output(B1(B8),C1(B8)) |
|
9 |
for C2+1,B2 |
>output(B1(B9)) |
6.
A |
B |
C |
|
1 |
=[46,68,99,28,50,41,76,39,99,50] |
=[] |
|
2 |
for A1 |
if !B1.contain(A2) |
>B1=B1|A2 |
7.
A |
B |
C |
D |
|
1 |
=[] |
|||
2 |
for 10 |
=rand(20)+1 |
if !A1.contain(B2) |
>A1|=B2 |
3 |
else |
goto B2 |
5.2 循环函数
1.
A |
|
1 |
=10.(rand(100)) |
2 |
=A1.(~-5) |
3 |
=A2.sum(~*~) |
2.
A |
|
1 |
=50.sum(2*~) |
3.
A |
|
1 |
=(nf=1,20.((nf*=~,nf))) |
4.
A |
|
1 |
=100.sum(1/(2*~-1)) |
5.
A |
|
1 |
=(n=100,n.sum(~*~)/n) |
6.
A |
|
1 |
=100.sum(1/(~*(~+1))) |
7.
A |
|
1 |
=100.(if(~%2==0,~*~\2,(~*~-1)\2)) |
8.
A |
|
1 |
=20.sum(if(~%2==0,-~/(~+1),~/(~+1))) |
9.
A |
|
1 |
=10.sum(2/(2*~-1)/power(3,2*~-1)) |
10.
A |
B |
|
1 |
=pi(9/180) |
>nf=1 |
2 |
=A1+to(2,5).sum(power(-1,~-1)*power(A1,2*~-1)/(nf*=(2*~-1)*(2*~-2),nf)) |
5.3 循环函数进阶
1.
A |
|
1 |
=[2,5,-3,8,9,7] |
2 |
=A1.(if(#%2==1,abs(~),~*~)) |
2.
A |
|
1 |
=[1,2,1,5,3,4,8] |
2 |
=A1.avg(if(~%2==1,~+5,2*~)) |
3.
A |
B |
|
1 |
=[2,5,-3,8,9,7] |
=[1,2,3,4,5,6] |
2 |
=A1.(~-B1(#)) |
4.
A |
B |
|
1 |
=[2,5,-3,8,9,7] |
=A1.len() |
2 |
=A1.(A1(B1+1-#)) |
5.
A |
|
1 |
=to(5) |
2 |
=A1.(~.(A1.~)) |
6.
A |
|
1 |
=to(3) |
2 |
=A1.sum(4.sum(A1.#*A1.#+#)) |
7.
A |
|
1 |
=[15.8,15.92,16.05,16.4,16.28,16.39,15.75,15.38,15.21,14.68,14.85,14.98,15.2,15,15.18,14.59,14.7,14.45,14.31,13.68] |
2 |
=A1.(if(#>1,~-~[-1],0)) |
3 |
=A1.(avg(~[-4:0])) |
8.
A |
|
1 |
=[-0.7538,-0.81,-2.1341,0.7371,-0.6711,4.0635,2.4057,1.1177,3.6104,-1.1448,-0.8678,-1.4474,1.3333,-1.1858,4.0439,-0.7483,1.7301,0.9783,4.6053,-5.5901] |
2 |
=A1.run(~=~+~[-1]) |
9.
A |
|
1 |
=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] |
2 |
=A1.sum(~(#)) |
10.
A |
B |
|
1 |
=2.(3.(rand(100))) |
=3.(2.(0)) |
2 |
=B1.(~.(A1(#)(B1.#))) |
5.5 定位选出
1.
A |
|
1 |
=[2,0,6,1,77,0,52,1,25,7] |
2 |
=A1.m(-2) |
3 |
=A1.m([2,3,6,-3]) |
4 |
=A1.step(3,1) |
5 |
=A1.select(~>=10) |
6 |
=A1.select(~!=0) |
7 |
=A1.select(#%2!=0) |
8 |
=A1.pos@a(0) |
9 |
=A1.pselect@a(~%2!=0) |
10 |
=A1.max(sin(~)) |
11 |
=A1.pmax(sin(~)) |
12 |
=A1.maxp(sin(~)) |
2.
A |
|
1 |
=to(100) |
2 |
=A1.step(2,1).sum() |
3 |
=A1.step(2,2).sum() |
3.
A |
|
1 |
=[221,87,33,73,162,227,403,288,78,213,374,152] |
2 |
=[15,13.75,13,12.5] |
3 |
=A1.([30,50,100,300,500].pseg(~)) |
4 |
=A2.m(A3) |
4.
A |
|
1 |
=to(100) |
2 |
=A1.select((a=~\10,b=~%10,a*b>a+b)) |
5.
A |
|
1 |
=[95,92,83,89,76,98,58,77,85,90] |
2 |
=A1.pselect@a((avg=A1.avg(),~>avg)) |
6.
A |
|
1 |
=[221,87,33,73,162,227,403,288,78,213,374,152] |
2 |
=[227,33,288] |
3 |
=A2.(A1.pos(~)) |
7.
A |
|
1 |
=[2,1,3,15,7,9] |
2 |
=A1.pmax() |
3 |
=A1.pmin() |
4 |
>(a=A1(A2),A1(A2)=A1(A3),A1(A3)=a) |
8.
A |
|
1 |
=[1,2,3,4,5,6,7,8,9,10] |
2 |
=A1.select(~%2!=0)|A1.select(~%2==0) |
9.
A |
B |
|
1 |
=[2,7,11,15] |
9 |
2 |
=A1.(B1-~).select(~+~!=B1) |
|
3 |
=A2.(A1.pos(~)).select(~>0) |
5.6 排序相关
1.
A |
B |
|
1 |
=[1.21,1.35,1.32,1.18,1.46,1.25,1.33,1.37,1.29,1.40] |
=[24,31,35,28,33,36,37,42,29,32] |
2 |
=A1.sort@z() |
|
3 |
=A1.psort@z() |
|
4 |
=A1.top(-3) |
|
5 |
=A1.top(-3,B1(#)/~/~) |
|
6 |
=A1.ptop(-3,B1(#)/~/~) |
|
7 |
=A1.top(3;-B1(#)/~/~) |
2.
A |
|
1 |
=[3,6,9,1] |
2 |
=A1.sort() |
3 |
=A2.max(if(#>1,~-~[-1],0)) |
3.
A |
B |
|
1 |
=[3,2,1,5,6,4] |
>k=2 |
2 |
=A1.sort@z()(k) |
4.
A |
B |
|
1 |
=[9,6,4,2,3,5,7,0,1] |
|
2 |
=A1.sort() |
|
3 |
if A2(1)!=0 |
>B1=0 |
4 |
else if A2.m(-1)!=A1.len() |
>B1=A1.len() |
5 |
else |
>B1=A2.select(~-~[-1]>1)(1)-1 |
英文版