实验二 循环结构程序设计
实验要求:
为达到理想的实验效果,同学们务必做到:
1.实验前认真准备,要根据实验目的和实验内容,复习好实验中可能要用到的命令,想好编程的思路,做到胸有成竹,提高上机效率。
2.实验过程中积极思考,要深入分析命令、程序的执行结果以及各种屏幕信息的含义、出现的原因并提出解决办法。
3.实验后认真总结,要总结本次实验有哪些收获,还存在哪些问题,并写出实验报告。实验报告应包括实验目的、实验内容、流程图(较大程序)、程序(命令)清单、运行结果以及实验的收获与体会等内容。
实验目的:
- 掌握利用for语句实现循环结构的方法。
- 掌握利用while语句实现循环结构的方法。
- 熟悉利用向量运算来代替循环操作的方法。
实验内容: - 根据,求π的近似值。当n分别取100、1000、10000时,结果是多少?
要求:分别用循环结构和向量运算(使用sum函数)来实现。
1.1.循环结构
1.2.sum函数
2. 根据,求:
(1) y<3时的最大n值。
(2) 与(1)的n值对应的y值。
2.1 最大n值
2.2对应y值
3. 考虑以下迭代公式:
其中a、b为正的常数。
(1)编写程序求迭代的结果,迭代的终止条件为|xn+1-xn|≤10-5,迭代初值x0=1.0,迭代次数不超过500次。
(2) 如果迭代过程收敛于r,那么r的准确值是,当(a,b)的值取(1,1)、(8,3)、(10,0.1)时,分别对迭代结果和准确值进行比较。
4. 已知
求f1~f100中:
(1) 最大值、最小值、各数之和。
(2) 正数、零、负数的个数。
5. 若两个连续自然数的乘积减1是素数,则称这两个边疆自然数是亲密数对,该素数是亲密素数。例如,2×3-1=5,由于5是素数,所以2和3是亲密数,5是亲密素数。求[2,50]区间内:
(1) 亲密数对的对数。
(2) 与上述亲密数对对应的所有亲密素数之和。
实验心得
1.此时实验较上次实验难度加大,部分程序用到了数学原理,比如求素数;
2.除了常规的for循环和while,这次重点了解了sum函数
3.程序编写过程中出现了错误,因把f1=f2; f2=f3; f3=f4;的顺序写反,导致耽误了半个小时,下次要细心一些。
4.部分实验借鉴了网上的案例,感觉很麻烦,应该有更简单的方法,接下来还要继续探索。
代码附录
1题
(1)
sum=0;
n=input(‘请输入n’);
for i=1:n
sum=1/i^2+sum;
end
pi1=sqrt(6sum)
y=0;
for n=1:10000
y=1/(2n-1)+y;
if(y<3)
continue
end
break
end
n-1
(2)
for n=[100,1000,10000]
i=1:n;
result=sqrt(6sum(1./i./i))
end
2题
编程
y=0;
for n=1:10000
y=1/(2n-1)+y;
if(y<3)
continue
end
break
end
n-1
(2)y=0;
for n=1:56
y=1/(2*n-1)+y;
end
y
3题
a=input(‘请输入a:’);
b=input(‘请输入b:’);
x0=1.0;
x1=a/(b+x0);
y=abs(x1-x0);
n=1;
while y>10^(-5)&n<=499
x0=x1;
x1=a/(b+x0);
y=abs(x1-x0);
n=n+1;
end
x1
r1=(-b+sqrt(bb+4a))/2
r2=(-b-sqrt(bb+4a))/2
结果
exch
请输入a:1
请输入b:1
x1 =
0.6180
r1 =
0.6180
r2 =
-1.6180
exch
请输入a:8
请输入b:3
x1 =
1.7016
r1 =
1.7016
r2 =
-4.7016
exch
请输入a:10
请输入b:0.1
x1 =
3.1127
r1 =
3.1127
r2 =
-3.2127
4题
f1=1;%n=1
f2=0;%n=2
f3=1;%n=3
f=[f1,f2,f3];
for n=4:100
f4=f3-2*f2+f1;
f=[f,f4];
f1=f2;
f2=f3;
f3=f4;
end
maxs=max(f)%最大数
mins=min(f)%最小数
sums=sum(f)%和
posnumber=length(find(f>0))%正数
negnumber=length(find(f<0))%负数
zernumber=length(find(f==0))%零
4题结果
exch
maxs =
4.3776e+11
mins =
-8.9941e+11
sums =
-7.4275e+11
posnumber =
49
negnumber =
49
zernumber =
2
5题
j=0;
s=0;
for i=2:49
p=i*(i+1)-1;
for k=2:p
if rem(p,k)~=0
continue
end
break
end
k;
if k==p
j=j+1;
s=s+p;
end
end
j%亲密数对的对数
s%对应的所有亲密素数之和