C语言轻松学习-6

第六章

任务一:用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语言输出某个范围的质数(素数)

1 2 3
未经允许不得转载:晗雅|星空 » C语言轻松学习-6
分享到:

请选择你看完该文章的感受:

8瞧一瞧 3扯淡 5学到了 2不懂 7正能量 12无聊

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (选填)