作业

一、实验内容

实验一

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

代码:

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

程序运行结果:

实验二

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

代码:

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

程序运行结果:

实验三

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

代码:

# include<stdio.h>
int main()
{
    int m,sum;
    printf("请输入一个正整数
");
    scanf("%d",&m);
    sum=0;
    while(1)
    {
        if(m==1) 
        {             
            break; 
        }
        else if(m%2!=0)
        {
            m=3*m+1;
            sum=sum+1;
        }
         else if(m%2==0)
        {
            m=m/2;
            sum=sum+1;
        }
           }
    printf("这个数%d步能归一
",sum);
    return 0;
}

程序运行结果:

二、实验总结

  1. 循环之间的嵌套。
  2. while,do...while,for语句的熟练掌握。
  3. 在while后面不能加分号,在do...while的while后面要加分号。
  4. 对死循环的应用。
  5. 在两个循环的嵌套中外层循环控制外层函数,内层循环控制内层函数。
  6. 在循环中break应该在if后面,不能跟在else if后面。
  7. 完数的计算中sum的初值应为1。
原文地址:https://www.cnblogs.com/1997zjx/p/6023738.html