实验十 循环结构程序设计(3)

实验十 循环结构程序设计(3)

 

一、实验目的和要求:

1. 掌握循环结构程序的设计思想,以及程序执行过程;

2. 掌握whiledowhilefor结构程序设计方法。

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)

 

三、实验步骤与结果

1Fibonacci数列的前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, \n10次反弹%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;       // 求中间值函数值并比较,替换ab  

    printf("%f,%f\n",a,b);//输出替换后ab的值  

    }while(fabs(max-min)>0.001);//当精度满足题目要求时,退出循环  

    printf("\n结果为:%f\n",(a+b)/2);//输出结果  

}  

float Result(float m)//函数表达式  

{  

    return (m*m-m-1);  

}

 

3)运行结果与分析

 

 

 

四、实验总结与心得

 

总结:

审题是关键,对题意理解了,然后设计程序。

心得:

不断利用基础的结构设计

利用自己知道的题型逐步设计程序

自己一定要记住一些模型,才能更快的编辑程序。

 

posted @ 2020-12-16 08:41  刘磊i  阅读(157)  评论(0编辑  收藏  举报