第39讲 项目1 完数和亲密数

来源:互联网 发布:淘宝流量闭环什么意思 编辑:程序博客网 时间:2024/05/16 10:55

任务和代码

</pre><pre name="code" class="cpp">/**Copyright (c)2016,CSDN学院 |  C语言及程序设计初步*All rights reserved.*文件名称:p39-1.c*作    者:管运煌*完成日期:2016年6月12日*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。(1)输入一个数n,判断n是否是完数(2)输出1000以内的所有完数(3)亲密数:如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。(提示:按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。)*/#include <stdio.h>int main(){int i,m,k;   int sum=0;   printf ("请输入一个整数:\n");   scanf ("%d",&m);   k=m/2;   for (i=1;i<=k;i++)   {if (m%i==0){sum+=i;      }   }   if (sum==m)printf ("%d是完数!\n",m);else printf ("%d不是完数",m);return 0;}
/**Copyright (c)2016,CSDN学院 |  C语言及程序设计初步*All rights reserved.*文件名称:p39-1.c*作    者:管运煌*完成日期:2016年6月12日*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。    输出1000以内的所有完数*/#include <stdio.h>int main(){int i,j,m,sum;//i为1000以内的数计数,j为因子,m用来缩小计算范围,sum为各因子之和。   int k=0;//用来计算完数输出次数。   for (i=6;i<=1000;i++)   {   sum=0;m=i/2;//一个数的因子肯定小于或等于该数的一半。for (j=1;j<=m;j++){if (i%j==0)sum+=j;//将每次循环i的因子和相加。}if (sum==i)//判断因子之和是否与该数相等。{printf ("%d ",i);k++;if (k%5==0)//每输出五个完数换行。{printf ("\n");         }      }   }   return 0;}
/**Copyright (c)2016,CSDN学院 |  C语言及程序设计初步*All rights reserved.*文件名称:p39-1.c*作    者:管运煌*完成日期:2016年6月12日*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,再如8的因子和是7(即1+2+4),8不是完数。亲密数:如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。(提示:按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定a和b是亲密数。)*/#include <stdio.h>int main(){int A,j,l;//定义A为A数,j为A数因子,l为A数因子之和sum的因子。   int sum=0;   int n;//n为sum的因子之和。   for (A=1;A<=30000;A++)   {sum=0;//A数每次循环时,sum的值都需要初始化,下n同。for (j=1;j<A;j++)//因为A和n要参与最后的条件判断,所以不能用除于2的特性来缩小范围。{if (A%j==0){sum+=j;//求出A数的因子之和sum。         }}n=0;for (l=1,n=0;l<sum;l++){if (sum%l==0){n+=l;//求出sum的因子之和n。         }}if (n==A)//完数也符合条件,可以选择是否筛选。{if (A==sum){printf ("%d和%d是完数!\n",A,sum);         }else{printf ("%d和%d是亲密数!\n",A,sum);         }      }}   return 0;}
运行结果



知识点总结

循环语句嵌套

心得和体会

说多了都是泪,第二小题因为最后一个分行的if语句层级弄错折磨了我几个小时,codeblocks还是没法单步执行,只能用printf 在每个大小循环中加入变量输出,看看哪里出错了……第三题sum和n变量一开始是习惯性在循环之前初始化的,但我没注意到其实每个循环的时候sum 和 n 的值都需要初始化……so,又是苦逼好久才找出来……总之,我想以后在语句层级关系和变量定义方面肯定会注意了。

0 0
原创粉丝点击