实验十 循环结构程序设计(3)
实验十 循环结构程序设计(3)
一、实验目的和要求:
1. 掌握循环结构程序的设计思想,以及程序执行过程;
2. 掌握while、do…while、for结构程序设计方法。
3. 掌握循环嵌套程序设计方法。
4. 掌握循环程序设计综合运用。
二、实验内容:
1. 求Fibonacci数列的前40个数。
2. 求之值,其中a是一个数字,n表示a的位数,n由键盘输入。
3. 弹球问题:一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹,求它在第10次落地时,共经过多少米?第10次反弹多高?
4. 猴子吃桃问题:猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
5. 用迭代法求,a由键盘输入。求平方根的迭代公式为:,要求前后两次求出的x的差的绝对值小于10-5。
6. 利用二分法求方程x2-x-2=0的一个正根的近似值(精确到0.1).
三、实验步骤与结果
1. 求Fibonacci数列的前40个数。
(1)设计思路
限制范围,多少跳出,不能多不能少
(2)程序源码(加注释)
#include<stdio.h> int main() { int f1=1,f2=1; int i; for(i=1;i<=20;i++) { printf("%12d%12d",f1,f2); //打印足够长度 if(i%2==0) //四个一行打印 printf("\n"); f1=f1+f2; f2=f2+f1; } return 0; } |
(3)运行结果与分析
2. 求之值,其中a是一个数字,n表示a的位数,n由键盘输入。
(1)设计思路
找出项与项之间的关系,然后判断求和
(2)程序源码(加注释)
#include<stdio.h>
int main()
{ int i, sum = 0, n, b = 2; //定义数据类型
printf("请输入位数:\n");
scanf("%d", &n); //键盘输入
for(i = 0; i < n; i++) //循环增加到符合要求的位数
{ sum += b; //计算前项的和
b = b * 10 + 2; //每一项的计算
}
printf("和为:\n%d\n", sum);
return 0;
} |
(3)运行结果与分析
3. 弹球问题:一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹,求它在第10次落地时,共经过多少米?第10次反弹多高?
(1)设计思路
利用循环,在反弹的次数里求总距离
(2)程序源码(加注释)
#include <stdio.h> int main() { int i; double s, t; s = t = 100.0; //定义数据类型,并赋初值 for (i = 1; i <= 10; i++){ //循环判断是否超出范围 s /= 2; //不断的折半 t += 2 * s; //总距离 } printf("它在第10次落地时,共经过%lf米, \n第10次反弹%lf米\n", t, s); return 0; } |
(3)运行结果与分析
4. 猴子吃桃问题:猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
(1)设计思路
(2)程序源码(加注释)
#include <stdio.h> int main() { int x=1; int i; //x表示剩余的桃子数量,第十天剩余1个 for(i=1;i<10;i++)//因为是递归往回推算,所以循环体循环9次就可以了,就是从第九天推到第一天 { x=(x+1)*2; //这是根据题意找出来的递归式子,第十天是第九天的桃子的一半减1,即第十天的桃子加1乘以2 } printf("第一天一共摘了%d个桃子\n",x); return 0; } |
(3)运行结果与分析
5. 用迭代法求,a由键盘输入。求平方根的迭代公式为:,要求前后两次求出的x的差的绝对值小于10-5。
(1)设计思路
(2)程序源码(加注释)
#include<stdio.h> #include<math.h>
int main() { double x1, x2; float a; scanf("%f", &a);//a即为题目中待求平方根的X x2 = 1.0; do { x1 = x2; x2 = (x1 + a / x1) / 2.0; } while (fabs(x1 - x2) >= 0.00001);//若不符合要求就不断迭代 printf("%.3f", x2);//x2为符合要求的a的平方根的值 return 0; } |
(3)运行结果与分析
6. 利用二分法求方程x2-x-2=0的一个正根的近似值(精确到0.1).
(1)设计思路
(2)程序源码(加注释)
#include<stdio.h> #include<math.h> void main() { float Result(float m); //函数声明 float a=1,b=2,mid,result,min,max; do {min=a,max=b; mid=(float)(a+b)/(float)2.0;//计算中间值 if(Result(a)*Result(mid)<0) b=mid; else a=mid; // 求中间值函数值并比较,替换a或b printf("%f,%f\n",a,b);//输出替换后a与b的值 }while(fabs(max-min)>0.001);//当精度满足题目要求时,退出循环 printf("\n结果为:%f\n",(a+b)/2);//输出结果 } float Result(float m)//函数表达式 { return (m*m-m-1); } |
(3)运行结果与分析
四、实验总结与心得
总结:
审题是关键,对题意理解了,然后设计程序。
心得:
不断利用基础的结构设计
利用自己知道的题型逐步设计程序
自己一定要记住一些模型,才能更快的编辑程序。