C程序设计第五章习题9的解法

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:

6 its factors are 1,2,3

因此分析题目:

1,首先题目给出了完数的定义(紫色标记的句子),因此可以根据这个去设计程序。

2,然后限制条件是1000之内的所有完数(红色标记的句子)

3,因此可以运用循环去解决这个问题

 小知识  循环结构有

     (1)while(循环条件)执行语句;

     (2)for(初始条件;循环条件;执行部分结束后,执行一遍的语句)执行语句;

     (3)do 执行语句 while (循环条件);

注:do while是先执行一遍do在判断,而while是先判断再执行,最大的区别就是do while比while执行多了一遍语句

4,上面题目绿色的6就是我们要求的完数这个是要控制格式输出的,黄色的its factors are是字符串直接就可以输出的,蓝色的1,2,3就是用一次循环去求出来的。

思路说完,下面就是代码,代码的基本上意思在后面打上的注释可以放心使用。

#include <stdio.h>
int main()
{
	int a=1, b=1,sum=0;
	for (a = 1; a <= 1000; a++, sum = 0)                        //用a去控制外层变量,并且记得要初始化sum
	{                                                           //如果不初始化sum就会出现一直加下去的现象出不了结果
		for (b = 1; b < a; b++)                                 //内层循环解决找因子的问题
		{
			if (a%b == 0)                                       //判断是不是因数如果是就用sum统计起来
				sum = sum + b;
		}
		/*printf("%d\n",sum);*/                                 //这个打印是验证sum的,可以把上面的sum=0去掉看看会有什么结果
			if (a == sum)                                       //如果是完数就统计出来
			{
				printf("%d its factors are ", a);
				for (int i = sum - 1; i > 0; i--)              //将完数和其因子打印出来
					if (sum%i == 0)
						printf("%d,",i);
				printf("\n");
			}
	}
	return 0;
}

因为我也是一名学生可能有的地方有所疏漏,如果找到了请帮我指出来,谢谢各位!!!

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值