美文网首页
大化小--初学C时的编程思想

大化小--初学C时的编程思想

作者: b6aed1af4328 | 来源:发表于2016-09-18 18:47 被阅读19次

思维导图摘要


初学C,学到IF条件判断和FOR循环语句,彭老师甩过来一道寻找1000以内完全数的编程题并做了讲解。之后我整理并归纳了一下,写下这篇文章,来帮助自己进一步理清思路。

题为寻找1000以内的完全数,那么第一步就应该是如何判断一个数是完全数。弄懂完全数的定义,并由此找出其与其他数不一样的特点。由不一样的特点入手,找出完全数。

完全数的定义

该数所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。

简而言之,真因子之和等于该数本身。

这是一个和其他数很不一样的特点,如果能抓住该特点,很好筛选出完全数。

那么第二步就是该特点的编程实现

该特点的编程实现关键点在2点:1.是找出所有的真因子;

2.是因子和。

找出所有的真因子,又可分成2步:

一是如何找出因子;

二是知道找出因子的方法后,如何不遗漏,找出所有。

如何找出因子:数除以因子后余数为0

a%b==0

如何找出所有因子:FOR循环实现。

for(int b=1;b<a;b++)

{ if(a%b==0)

      {printf("b is a factor of a");

       }

}

以上实现了关键点一。

接下来是关键点二。借由IF条件判断,嵌套在FOR循环里,通过sum累加得到因子和。

for(int b=1;b<a;b++)

{if(a%b==0)

       {sum+=b;

   }

}

以下是判断是否完全数的完整程序

#include<stdio.h>

int main()

{

int i,sum=0,num;

printf(“请输入一个数”);

scanf("%d",&num);

for(i=1;i<num;i++)

{

if(num%i==0)

{sum+=i;

}

}

if(sum==num)

{printf("%d 是完全数",num);

}

return 0;

}

很明显的,上述程序分为输入数这一块和完全数判断这一块。

接下来便是如何在1000以内判断筛选完全数。还是FOR循环。

#include<stdio.h>

int main()

{

int i,sum=0;

for(int i=1;i<=1000;i++)

{   for(int a=1;a<i;i++)

      {if(i%a==0)

         {sum+=a;

         }

      if(sum==i)

      {printf("%d",i);

      }

}

return 0;

}

在实际情况中,上述程序的编译没有问题,最后却没有得出结果。经分析,问题出在sum=0的位置不对。

sum这个变量的初始化肯定在第一个FOR循环前,不然在FOR循环内,重复定义。只是sum=0,应位于第一个FOR循环内,第二个FOR循环前。sum是在第二个FOR循环内累加得到的因子和,在该FOR循环执行了一次后,应及时清零,好为接下来的第二次执行准备好条件。基于此思想,将sum=0置于第二个FOR循环后,第一个FOR循环内也是可行的,只是此时需第一个FOR循环前添加sum=0,为第二个FOR循环的第一次执行准备好条件。

相关文章

网友评论

      本文标题:大化小--初学C时的编程思想

      本文链接:https://www.haomeiwen.com/subject/xgkgettx.html