作业五

C语言程序设计第五次作业

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

 

#include<stdio.h>
int main()
{
    int m,n,a,d;
    float g,e=1,f=0,b=1,c=0;
    printf("输入m和n的值用逗号隔开\n");
    scanf("%d,%d",&m,&n);
    if(m<0||n<0)
    {
        printf("输入错误\n");
    }
    else if(m>=n)
    {
        printf("输入错误\n");
    }
    else{
        for(a=1;a<=n;a++)
            {
                b=b*a;
                c=c+b;
            }
        for(d=1;d<m;d++)
            {
                e=e*d;
                f=f+e;
            }
                g=c-f;
        printf("%.2f",g);
        }
        return 0;
}
        

 

 

 

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

#include<stdio.h>
#include<math.h>
int main()
{    int i1,i2,k,sum,m;
        for(i2=2;i2<=1000;i2++)
        {        sum=0; 
                for(i1=1;i1<i2;i1++)
            {
                if(i2%i1==0)
                {
                    sum=sum+i1;
                }
            }
            
                if(i2==sum)
                {
                    k++;
                    printf(" %d",i2);
                }
        } 
        if(m%10==0&&m!=0)
        {    
            printf(" \n");
        }
            printf("\n 有%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=0,b=0,c=0,d=0;
    printf("输入一个正整数\n");
    scanf("%d",&a);
    do
    {    
        if(a<=0)
        printf("输入错误,重新输入\n"); 
        else if(a%2==0)
        {
            a=a/2;
            b++;
        }
        else if(a%2!=0)
        {
            a=3*a+1;
            c++;
        }
        d=b+c;
    }while(a!=1);
    printf("一共用了%d次",d);
    return 0;
} 

 

 附加题: 

  1.输入一个正整数n,输出2/1+3/2+5/3+8/5+…的前n项之和,保留2位小数,该序列从第二项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

 

#include<stdio.h>
int main()
{    int i,n;
    double a,b,c,d,e,f;
    printf("输入n:\n");
    scanf("%d",&n);
    if(n<=0)
    {
        printf("输入错误"); 
    }
    else
    {    a=2;b=1;d=0;
        for(i=1;i<=n;i++)
        {    
            d=d+a/b;
            e=b;
            f=a;
            a=a+e;
            b=f;
            
        }
          printf("前%d项和为%.2f",n,d);
    }
     return 0;
 } 

 

 2.凯撒密码(caeser)的原理:每一个字母按字母表顺序向后移3位,如a加密后变成d,b加密后变成e,……x加密后变成a,y加密后变成b,z加密后变成c。例如:“baidu”用凯撒密码法加密后字符串变为“edlgx”。试写一个算法,将键盘输入的文本字符串(只包含a~z的字符)进行加密后输出。

 

#include<stdio.h>
#include<stdlib.h>
int main()
{    char x;
    a:
    fflush(stdin);
    printf("\n输入字符,将进行加密。\n");
    scanf(" %c",&x);
    if(x>'A'&&x<'z')
    {
    while(x!='\n')
    {
        if(x>='a'&&x<'x')
        {
            x=x+3; 
        }
        else if(x=='x'||x=='y'||x=='z')
        {
            x=x-23;
        }
        else if(x=='X'||x=='Y'||x=='Z')
        {
            x=x-23;
        }
        else if(x>='A'&&x<'X')
        {
            x=x+3; 
        }
        printf("%c",x);
        scanf("%c",&x);
    }
    } 
    else
    {
        {
            printf("输入错误!\n");
            goto a;
        }
    }
    return 0;
}

 

 

 

  二、实验总结

1:注意循环的嵌套,以及在循环前赋值的位置。

2:注意完数的概念,要把所有能整除的数和“1”都加起来与原数相等。

3:注意换行。

4:赋值时注意不要把位置放反。

5:有小数点要用float或者double。

6:字符要注意是“%c”,输入时要用“char”。

7:求阶乘的时候如果不方便计算,可以求两个阶乘然后做差。

8:新学的:fflush(stdin),可以清空缓存,真是长知识了。

9:必要时可以用goto。

10:输出输入是注意变量类型。float\int\double\char。

 

 

posted on 2016-11-01 21:42  Mty灬  阅读(255)  评论(6编辑  收藏  举报

导航