萌新第一次使用函数后的一些体会(欢迎同学指正)

来源:互联网 发布:海康威视端口未生效 编辑:程序博客网 时间:2024/06/05 07:18


     这个是我们第一次的程序作业中的一道题目,由于基础很差,所以花费时间很长,话不多说,题干要求大致是这样:要求编写一个程序求出所有的阿姆斯特朗数(又称水仙花数);阿姆斯特朗数定义如下

     如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。
     例如1^3 + 5^3 + 3^3 = 153
     当n=3时,又称水仙花数,特指一种三位数,其各个数之立方和等于该数。
     水仙花数共有4个,分别为:153、370、371、407。
    

     接下来这个程序是我一开始拿到题干的想法:
#include<iostream>
using namespace std;
int main()
{
 int i;
 int a;//定义a来当作容器装n的值
 for(int i=100;i<=999;i++)
 {
 int m,n;
 a=n=i;
 int sum=0;
     while(a>0)//while语句,当a>0的时候停止循环
     {
     m=a%10;
    sum+=m*m*m;
    a/=10; 
     }
     if(sum==n)
 cout<<i<<endl;
    
 }
 return 0;                         
}

这个程序用到了双循环,但是在编写的时候出现了很多问题,比如对循环的条件模糊、循环体是什么也很懵,询问别解决了之后对双循环有了一个初步的认识,而在别人的建议下初步尝试使用了函数,具体程序如下:


#include<iostream>
using namespace std;
int interesting(int a);//重新定义了一个函数来对是否是水仙花数判断,再判断水仙花数大小
int main()
{
 int i;
 
 for(int i=999;i>=100;i--)
 {
  if(interesting(i)==1)
  cout<<i<<endl;
    
 }
 return 0;
}
int interesting(int a)
{
 int m;
 int n=a;
 int sum=0;
     while(a>0)
     {
     m=a%10;
  sum+=m*m*m;
  a/=10; 
     }
 if(sum==n)
 {
 return 1; 
 }
 else
 {
 return 0;
 }
}

       这个程序相对于双循环程序更为夯长,甚至调用函数的做法没什么必要,就可读性而言,我的理解是在这个题设条件下是没有区别的,二者的运行时间差在一毫秒,但是函数的调用可以使得程序更为清晰,也即是将一个大问题分割为几个小问题逐步解决,相较于双循环程序而言不会把自己给绕进去。


个人总结:函数的使用是将复杂问题简单化的有效方法之一,但是也要合理使用,避免增加不必要的编程复杂性。



(此篇文章在语言表述上存在一些问题,后续还会根据鄙人的学习情况进行一些知识点的理解上的拓展,欢迎关注哦~笔芯)


阅读全文
0 0
原创粉丝点击