第五次作业

一·实验内容

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

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

  

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

int main()
{
	int i,j,s;
	for(i=1;i<=1000;i++)
	{
		s=0;
		for(j=1;j<=i-1;j++)
		{
			if(i%j==0)
			{
				s+=j;
			}
		}
			if(s==i)
			{
				printf("%d\n",i);
			}
	}
	return 0;
}

  

5-3奇偶归一猜想,对于每一个正整数如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环最终都能够得到1。

#include<stdio.h>
int main()
{
	int x,a=0,b=0,sum=0;
	printf("请输入一位正整数x:\n");
	scanf("%d",&x);
	do
	{
		if(x>0&&x!=1)
		{
            if(x%2==0)
			{
				x=x/2;
				a++;
			}
			else if(x%2!=0)
			{
				x=x*3+1;
				b++;
			}
		}
	}while(x!=1);
	sum=a+b;
	printf("数字x一共经过了%d次运算",sum);
	return 0;
}

  

二·实验总结

1.第一个程序编程时遇到的问题是循环嵌套大括号加的不对,导致执行出来假如输入1和3,输出的是6,而正确答案是9.这是一个应该注意的问题,之外这道题的思路大致归结为:先声明变量,输入的和和累加累乘的变量为浮点型;赋予sum为0初始值,然后判断,分别考虑符合和不符合的情况;套用两个循环结构,外循环判断累加,内循环判断累乘,注意大括号的位置,考虑程序到底执行到哪;最后输出保留两位小数,格式为%.2f。

2.第二个程序编程时画了一个程序框架,有点理不清,输入的变量没弄清各自代表的含义,程序编的也有问题,大括号又用错,导致语句执行的不对。之外这道题的思路大致归结为:先声明变量,输入的i表示输入的完数,j表示输入的因子,s表示输入的因子的和;使用for循环,要确定范围,给因子的和赋予一个初始值,然后for循环嵌套,判断因子,依次累加,前提明白因子比完数小;再判断j是不是i的因子,大括号语句的执行强调;最后若完数与因子的和相等,证明这个数的确是完数。输出

3.第三个程序编程的时候遇到的问题是,画程序框图时没错,编的时候do...while,for...else if语句中的步骤语句存在问题。之外这道题的思路大致归结为输入一个数,赋予a,b,sum,初始值,a代表偶数的次数,b代表奇数的次数,用do...while先循环,再做判断,强调不能等于1的原因是最终都能够得到1,如果输入1就直接输出了没意义。注意执行的步骤

posted @ 2016-11-02 23:22  小北ML  阅读(231)  评论(1编辑  收藏  举报