第六章
任务一:用C语言输出所有的水仙花数
任务二:用C语言输出某个范围内的所有质数(素数)
小结
习题
今天,我们来利用前面我们所学的知识(其实也就是上一章的内容)来练习一些习题,我们先来完成任务一,用C语言输出某个范围的水仙花数,
首先,我们要了解一下 什么是水仙花数 百度百科解释的已经很详细了,我在这里大概说一下,水仙花数,也就是某个三位数,xyz,
其中 x^3+y^3+z^3=xyz,例如:153=1^3+5^3+3^3
那么,这个 153 就被称为水仙花数。
好的,我们了解完之后,我们就要开始我们的练习了,
我们用C语言先计算一下,153到底是不是水仙花数,
代码如下:
我已经把解释注释到代码上了,这个if()如果这个等式成立,则满足水仙花数的公式,则可以输出下一行,否则将不会输出下方的“printf();”
#include<stdio.h> int main() { int num=153; int x,y,z; //x代表百位,y代表十位,z代表个位 x=num/10/10%10; //这里先除于100然后变为1然后再除于10取余1 y=num/10%10; //除于10变为15.3然后再除于10取余5 z=num%10; //除于10取余3 if(x*x*x+y*y*y+z*z*z==x*100+y*10+z) printf("此数值是水仙花数\n"); return 0; }
代码调试截图:由调试结果可知,153是水仙花数。
那么我们了解之后,我们需要完成在一定范围内输出所有的水仙花数,我们要怎么实现呢?
首先我们会思考,水仙花数的定义范围为[100-999]之间的数值(包括100和999),那么我们不可能一个一个的改变上述代码的变量num的数值,因为这样太繁琐太浪费时间了,
那么我们就应该使用循环来解决这一问题,我们要循环[100,999]范围内的所有数值,让num值从[100,999]一个一个的代入,然后经过“if()”语句进行判断每一个num是否在这里等式成立,若成立,则,我们将此成立的数值输出出来,若不成立,则,我们继续试验下一个数值。
思路分析完之后,我们来写一下代码试一试,就用常用的“for()”循环语句吧,
无非就是上述的代码,我们加一个循环就可以实现自动获取[100-999]之间的水仙花数,
#include<stdio.h> int main() { int num=153; int x,y,z; //x代表百位,y代表十位,z代表个位 for(num=100;num<=999;num++) { x=num/10/10%10; y=num/10%10; z=num%10; if(x*x*x+y*y*y+z*z*z==x*100+y*10+z) printf("%d\n",num); } return 0; }
代码调试截图如下:输出内容之后我们百度一下,看看与百度上面的是否一致,发现一致,所以说,所有的水仙花数只有“153”“370”“371”“407”这四个数值。
输出水仙花数的C语言代码不止可以这样写,还可以这样写:
第一个“for()”用来控制百位的数字为1-9之间,
第二个“for()”用来控制十位的数字为0-9之间,
第三个“for()”用来控制个位的数字为0-9之间,
大致执行流程为:先是,100经过“if()”中的等式来判断是否为水仙花数,若是,则输出该数值,
然后内层循环“for(z=0;z<10;z++)”之后,变为,101接着经过“if()”来判断
一直到109,之后会到二层循环“for(y=0;y<10;y++)”然后就是110,111,112……
一直到119,之后会到最外层循环“for(x=1;x<10;x++)”然后就是120,121,122……
#include<stdio.h> int main() { int x,y,z; //x代表百位,y代表十位,z代表个位 for(x=1;x<10;x++) for(y=0;y<10;y++) for(z=0;z<10;z++) if(x*x*x+y*y*y+z*z*z==x*100+y*10+z) printf("%d\n",x*100+y*10+z); return 0; }
代码调试截图:代码调试成功,运行正确,与我们上面思考的一致
上面这一种是:100,101,102,……119,120,121……199,200,201……998,999。这样依次从100+1加到999;
那么我们也可以反过来,依次从:999,998,997……102,101,100;
这样反过来,不就是将:所有的“for()”循环全部反过来写么,
代码如下:
#include<stdio.h> int main() { int x,y,z; //x代表百位,y代表十位,z代表个位 for(x=9;x>0;x--) for(y=9;y>=0;y--) for(z=9;z>=0;z--) if(x*x*x+y*y*y+z*z*z==x*100+y*10+z) printf("%d\n",x*100+y*10+z); return 0; }
代码调试截图:发现输出的水仙花数值与上一次的输出数值的顺序恰好相反,那么的确实现了我写此代码之前所叙述的。
OK,任务一,我们将完了,大家先休息一会儿,然后再学习下一页“用C语言输出某个范围的质数(素数)”
评论抢沙发