首页 > 代码库 > 第五次作业

第五次作业

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

#include<stdio.h>
int main()
{
	int m,n,a,b,c,y=1,z=1;
	float sum,sum1=0,sum2=0;
	printf("请输入两个正整数m,n且m<n\n");
	scanf("%d%d",&m,&n);
	if(m>=n)
	{
		c=m;
		m=n;
		n=c;
		for(a=1;a<=n;a++)
	    {
	    	y=y*a;
	    	sum1=sum1+y;
		}
		for(b=1;b<=m;b++)
		{
			z=z*b;
			sum2=sum2+z;
		}
		sum=sum1-sum2+z;
	}
	else
	{
		for(a=1;a<=n;a++)
	    {
	    	y=y*a;
	    	sum1=sum1+y;
		}
		for(b=1;b<=m;b++)
		{
			z=z*b;
			sum2=sum2+z;
		}
		sum=sum1-sum2+z;
	}
	printf("%d的阶乘到%d的阶乘的和为%f",m,n,sum);
	return 0;
}

  技术分享

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

#include<stdio.h>
int main()
{
	int i,j,y;
	for(i=1;i<=1000;i++)
    {
    	y=0;
		for(j=1;j<i;j++)
    	{
    		if(i%j==0)
    		{
    			y=y+j;
			}
		}
		if(y==i)
		{
			printf("%4d",i);
		}
	}
	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>
#include<stdlib.h>
int main()
{
	int n,g;
	printf("请输入一个正整数n\n");
	scanf("%d",&n);
	if(n<=0)
	{
		printf("error");exit(0);
	}
	else if(n==1)
	{
		printf("已归一\n");exit(0);
	}
	g=0;
	while(n!=1)
	{
		if(n%2==1)
		{
			n=3*n+1;
		}
		else
		{
			n=n/2;
		}
		g++;
	}
    printf("%d步能归一\n",g);
	return 0;
}

  技术分享

 

附加题: 

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

#include<stdio.h>
int main()
{
	int n,i;
	float y=1,sum=0,z=2,m,x;
	printf("ê?è?ò????y??êyn\n");
	scanf("%d",&n);
	if(n<=0)
	{
		printf("error");
	}
    else
    {
    	for(i=1;i<=n;i++)
    	{
    		x=y;
			m=z/y;
			y=z;	
			z=z+x;
    		sum=sum+m;
		}
	}
	printf("%.2f",sum);
	return 0;
}

  技术分享

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

#include<stdio.h>
int main()
{
	char op;
	printf("??ê?è?ò?′?×?·?′?\n");
	while((op=getchar())!=‘\n‘)
	{
	    if(op>=65&&op<88||op>=97&&op<120)
	    {
	    	op=op+3;	
    	}
    	else if(op>=88&op<=90||op>=120&&op<=122)
    	{
	    	op=op-23;
	    }
    	else 
    	{
    		printf("error\n");
	    }
        printf("%c",op);
    }
   	return 0;
}

  技术分享

 

实验总结

1.字符要用char来定义,循环变量用int

2.循环变量记得有的要赋初值

3.getchar()向缓存中输入一个字符

4.循环语句的嵌套,要注意嵌套的合理

5.跳出选择语句用exit(0),需要stdlib,h函数

6.书写格式要工整,方便检查

第五次作业