实验九 循环结构程序设计(2)

实验九 循环结构程序设计(2)

 

一、实验目的和要求:

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

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

3. 掌握循环嵌套程序设计方法。

4. 掌握循环程序设计综合运用。

 

二、实验内容:

  1. 求100到300之间素数的个数。
  2. 编写程序,已知:S=1+3+5+7+9+…,求S不大于1000的最大值。 961
  3. 500以内(含500)能被59整除的所有自然数的倒数之和。按四舍五入的方式精确到小数点后第二位。 1.48
  4. 已知一个数列的前三项为001,以后各项都是其相邻的前三项之和,求该数列前30项之和。 18947744
  5. 已知Fibonacci数列:1,1,2,3,5,8,……,它可由下面公式表述:

F(1)=1                   if n=1

F(2)=1                   if n=2

F(n)=F(n-1)+F(n-2)       if n>2

试求F(2)+F(4)+F(6)+……+F(50)值。20365011073

  1. 爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完。求满足上述条件的最小台阶数是多少?如果是总共108级台阶,要怎样走才能刚好走完呢?
  2. 50元的整币兑换成5元、2元和1元币值(要求三种币值均有)的方法有多少种。106
  3. 求在[21000]之间的所有同构数之和。  1113

同构数:某正整数的平方,其低位与该数本身相同。例如25^2=625625的低位25与原数相同,则称25为同构数)

  1. 若两素数之差为2 ,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数。 22

 

三、实验步骤与结果

1求100到300之间素数的个数

1)设计思路

不断的用循环模到数的本身,再判定

2)程序源码(加注释)

#include <stdio.h>

int main()

{

 int i,j;

 for(i=100;i<=300;i++)           //限制取的数的范围

 {

  for(j=2;j<i;j++)           //一直从2模到数的本身跳出循环

if(i%j==0)

break;

if(j==i)           //j累加到i的大小就打印

  printf("%4d\n",i);

 }

}

 

3)运行结果与分析

 

 

 

2编写程序,已知:S=1+3+5+7+9+…,求S不大于1000的最大值。 961

 

1)设计思路

循环累加,超出范围跳出,不能多加和少加

2)程序源码(加注释)

#include<stdio.h>

void main()

{

int i,s=0;           //定义数据类型并赋初值

for(i=1;;i=i+2)           //循环i=i+2

{

s=s+i;

if(s>=1000)           //判断限制是否达到

break;

}

printf("%d\n",s-i);           //减去一个多加的i值打印输出

}

 

 

(3) 运行结果与分析

 

 

 

3500以内(含500)能被59整除的所有自然数的倒数之和。按四舍五入的方式精确到小数点后第二位。 1.48

 

1)设计思路

数据类型定义正确,循环并判断和计算,按条件输出

2)程序源码(加注释)

#include<stdio.h>

void main()

{

int i;

double s=0;           //定义数据类型,并赋初值

for(i=1;i<=500;i++)           //循环累加,判断跳出循环

{

if(i%5==0 || i%9==0)           //i的值模59是否没有余数

s+=1.0/i;           //符合if语句才能执行

}

printf("%.2f\n",s);           //两位小数,打印输出

}

 

 

3)运行结果与分析

 

 

 

4已知一个数列的前三项为001,以后各项都是其相邻的前三项之和,求该数列前30项之和。

1)设计思路

循环体外的值和内的值,前三项和给新的一项,求和计算

2)程序源码(加注释)

#include <math.h>

main()

{

int a[30],sum,i=3;           //定义数据类型和数组范围

a[0]=0;

a[1]=0;

a[2]=1;           //定义数组中元素的值

sum= a[0]+ a[1]+a[2];           //计算和赋值给sum

while(i<30)           //循环执行

{

a[i]= a[i-1]+a[i-2]+a[i-3];           //计算出各项的值      

sum=sum+a[i];           //各项的值不断和前三项的和相加

i++;

}

printf("%d\n",sum);           //输出和的值

 

}

 

(3) 运行结果与分析

 

 

5已知Fibonacci数列:1,1,2,3,5,8,……,它可由下面公式表述:

F(1)=1                   if n=1

F(2)=1                   if n=2

F(n)=F(n-1)+F(n-2)       if n>2

试求F(2)+F(4)+F(6)+……+F(50)值。20365011073

 

1)设计思路

前几项寄存在数组,模计算,求和

2)程序源码(加注释)

#include <stdio.h>

 

int main(void)

{

long long arr[51];           //定义数据双长整型

long long sum = 1, i = 0;

arr[0] = 1;

arr[1] = 1;            //数据赋初值

for (i = 2; i < 50; i++)           //循环判断

{

arr[i] = arr[i - 1] + arr[i - 2];           //计算前两项的和赋值给第三项

if (i % 2 != 0)

{

sum = sum + arr[i];           //求出前几项的和并赋值给下一项

}

}

for (i = 0; i < 51; i++)           //满足限制范围的就打印各项的值

{

printf("%lld\n", arr[i]);

}

 

printf("%lld\n", sum);           //打印最后的和值

return 0;

}

3)运行结果与分析

 

6爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完。求满足上述条件的最小台阶数是多少?如果是总共108级台阶,要怎样走才能刚好走完呢?

 

1)设计思路

不断的取模判断

2)程序源码(加注释)

#include <stdio.h>

 

int main(void)

{

    int num = 0, i = 0;           //定义数据并赋值

    while (1)

    {

        num++;           //累加

        if ((num % 2 == 1 && num % 3 == 2) && (num % 4 == 3 && num % 5 == 4))

        {

            if (num % 7 == 0 && num % 6 == 5)           //满足了模2,3,4,5才能进行

            {

                break;

            }

            

        }

    }

    printf("%d\n", num);           //输出num的值

    printf("108阶台阶刚好走完可走:");

    for (i = 1; i < 108; i++)

    {

        if (108 % i == 0)           //能被108整除的数

        {

            printf("%d ", i);

        }

    }

    return 0;

}

 

3)运行结果与分析

 

7 50元的整币兑换成5元、2元和1元币值(要求三种币值均有)的方法有多少种。106

 

1)设计思路

钱的循环计算,满足限制条件

2)程序源码(加注释)

#include <stdio.h>

 

int main(void)

{

    int a = 1, b = 1, c = 50 - 5 * a - 2 * b;           //定义数据类型并赋初值

    int i = 1, count = 0;

    for (a = 1;a >= 1 && a < 10; a++)           //循环判断5元是否满足限制条件

    {

        for (b = 1; b >= 1 && b < 25; b++)           //循环判断2元是否满足限制条件

        {

            c = 50 - 5 * a - 2 * b;           //50-五元的和两元的就是一元的

            if (c > 0)

            {

                count++;           //只要满足三张类型的币值都有就计数

                printf("a = %d, b = %d, c = %d\n", a, b, c);

            }

        }

    }

    printf("%d", count);

    return 0;

}

 

3)运行结果与分析

 

8 求在[21000]之间的所有同构数之和。  1113

同构数:某正整数的平方,其低位与该数本身相同。例如25^2=625625的低位25与原数相同,则称25为同构数)

1)设计思路

理解题意,然后求低位与该数比较

2)程序源码(加注释)

#include <stdio.h>

 

int main(void)

{

    int i = 2, sum = 0, a = 0, b = 0;           //定义数据类型

    for (i = 2; i <= 1000; i++)           //循环判断是否超出范围

    {

        a = i * i;

        b = i;

        while (a % 10 == b % 10)           //判断正整数的平方的低位与该数本身相同

        {

            if (b % 10 == b || b < 10)           //满足条件的数

            {

                sum += i;

                break;

            }

            a = (a - (a % 10)) / 10;

            b = (b - (b % 10)) / 10;

        }

    }

    printf("%d\n", sum);

    return 0;

}

 

3)运行结果与分析

 

9 若两素数之差为2 ,则称两素数为双胞胎数,问[31,601]之间有多少对双胞胎数。 22

 

1)设计思路

在理解题意的基础上设计,先求素数,然后判断是否差为2

2)程序源码(加注释)

#include <stdio.h>

 

int main(void)

{

    int arr[600], i = 0, sum = 0, j = 0, count = 0;           //定义数据类型和数组

    for (i = 33; i <= 601; i++)           //限制范围和i初值

    {

        for ( j = 2; j < i; j++)           //求素数

        {

            if (i % j == 0)

            {

                break;

            }

            if (j == i - 1)

            {

                arr[count++] = i;

            }

        }

    }

    for (i = 1; i < count; i++)

    {

        if (arr[i] - arr[i - 1] == 2)           //判断两个素数之间的差是否为2

        {

            sum ++;

        }

    }

    printf("%d\n", sum);

    return 0;

}

 

3)运行结果与分析

 

 

四、实验总结与心得

 

总结:

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

心得:

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

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

 

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