第五次实验作业

1.输入两个正整数m和n(要求m<=n), 求m!+(m+1)!+(m+2)!…+n!

#include <stdio.h>
int main()
{
    int i,n,m,x;
    float sum,h;
    printf("请输入两个数据m,n    要求m<=n\n");
    scanf("%d%d",&m,&n);
    if(m>n)
    {
        printf("输入的数据错误\n");
    }
    for(m;m<=n;m++)
    {
        h=1;
        for(x=1;x<=m;x++)
        h=h*x;
        sum=sum+h;
    }
    printf("sum=%.0f\n",sum);
    return 0;
} 

 2.输出1000以内的所有完数。所谓完数是指这个数恰好等于除他本身外的所有因子之和。例,6的因子为1,2,3,6=1+2+3,所以6是完数。

#include <stdio.h>
int main()
{
    int sum,k,j;
    sum=0;
    for(k=2;k<=1000;k++)
    {
        sum=0;
        for(j=1;j<k;j++)
            if(k%j==0)
                sum=sum+j;
        if(sum==k)
            printf("%d ",k);
    }
    return 0;
}

   3.奇偶归一猜想——对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。   如n = 11,得序列:11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1。(共有14个步骤)  题目输入正整数n,求这个n多少步能归一

#include <stdio.h>
int main()
{
    int a,b=0,c=0;
    printf("请输入一个数据\n");
    scanf("%d",&a);
    if(a<=0)
    {
        printf("输入的数据错误\n");
    }
    else
    {
        while (a!=1)
        {
            if(a%2!=0)
            {
                a=a*3+1;
            }
            else
            {
                a=(float)a/2;
            }
            printf("%d ",a);
            c++;
        }
        printf("\n一共循环了%d\n",c);
    }
    return 0;
}

知识点总结:

1、有小数时要记得化成float型

2、连乘等于一个小循环,开始输入的数据为循环的届

3、统计循环次数或者运行次数时,可以在循环下面加一个(*++),“*”代表最后的次数

实验总结:

1、循环的相互嵌套有助于减少循环次数

2、习惯取余和相除的使用,有利于循环的使用

 

posted @ 2016-11-01 21:07  丁啸宇  阅读(186)  评论(1编辑  收藏  举报