随笔-159  评论-114  文章-7  trackbacks-0

局部变量,块内的变量(函数为最大的块)

全局变量在所有函数之外(函数都可用)

内存:

   代码区      数据区

   栈为局部变量
   堆区为动态分配
   全局数据区,静态数据区
   常量区,主要是字面量,内存为只读的。

函数的形参,可以给默认值

可以为形参指定默认值(从右向左),调用时可以不用传递参数。

fact(int n,int m = 1);

但是不能跳跃传递参数,二义性!

enum Sex{
  MALE,FEMALE
}

void disp(char* name, Sex gender = MALE);

函数声明中指定了默认值,不能在定义时,再指定默认值,但可以追加默认值。

fact(int , int  =1);  这样声明没问题。

内联函数,提高程序运行效率,调用函数时,不是调用,而是搬一份到调用处,不用进行真正函数调用,所以无开辟栈的开销。

会增加代码的长度

如果函数很复杂,不能成为内联函数。不支持控制结果。

规定1,必须先定义,不支持函数原形。
因为搬函数代码时,是在编译过程中进行的。

比较  调用开销 VS 执行开销,来判断是否使用内联函数,对于很简单的函数值得内联。

2.是否能成为内联函数完全有编译程序决定

3.不支持控制结构。

#include <iostream>
using namespace std;
inline 
int isnumber(char ch)
{
       
return ((ch >= '0' && ch <='9')? 1:0);       
}
 

int main()
{
    
char in
    
while(true)
        cout 
<< "please input a char:(input q to exit) >";
        
in = cin.get();
        
if(isnumber(in))
        
{
              cout 
<< "you input is num " << in - '0' << endl;                 
        }

        
else
        
{
              
if(in == 'q')
                    
break
              cout 
<< "you input is not num " << endl;     
        }
 
        cin.ignore(
100,'\n'); 
    }
 
    cout 
<< "please input any key to exit" << endl; 
    cin.
get(); 
    cin.
get(); 
    
return 0;    
}

 

递归函数

一个函数自己调用自己,不管问题多复杂,只要把问题简化为最简单的形式。

递归函数不可能是内联函数

效率,递归 < 循环 < 公式

任何递归都可以改为非递归,需要用到栈,代码就很看懂了。改后,不一定提高效率。因为递归本身就是去开辟栈完成的。为何不保留代码可读性呢。

唯一条件,递归必须存在一个必须满足的条件,以结束推出。

菲波那契数列,求对应位置的值

头文件

#ifndef FIB_H
#define FIB_H 
double fib( int );
double fi( int );
#endif

函数定义文件,递归

double fib( int n )
{
    
if( n<1 )
        
return 0;
    
if( n<3 )
        
return 1;
    
return fib( n-1 ) + fib( n-2 );
}


double fi( int n )
{
    
if( n<1 )
        
return 0;
    
if( n<3 )
        
return 1;
    
double d,d1,d2;
    d1
=1;
    d2
=1;
    
forint i=3;i<=n;i++ ){
        d
=d1+d2;
        d1
=d2;
        d2
=d;
    }

    
return d;
}


主函数文件

#include <iostream>
using namespace std;
#include 
"fib.h"

int main()
{
    cout
<<"please input item no.:";
    
int n;
    cin
>>n;
    cout
<<"item "<<n<<" is "<<fi(n)<<endl;
    
return 0;
}





posted on 2006-02-04 23:35 北国狼人的BloG 阅读(512) 评论(0)  编辑  收藏 所属分类: 达内学习总结

只有注册用户登录后才能发表评论。


网站导航: