问题及代码:
(1)阅读下面两个有静态局部变量的程序
#include <iostream>
using namespace std;
int f(int n);
int main()
{
cout<<f(5)<<" ";
cout<<f(8)<<endl;
return 0;
}
int f(int n)
{
static int a=2;
int b=0;
a+=n;
b+=a;
return b;
}
预计运行结果是:___7______15_________
实际运行结果是:____7_______15_______
#include <iostream>
using namespace std;
int func (int a, int b)
{
static int m=0, i=2;
i+=m+1;
m=i+a+b;
return m;
}
int main()
{
int k=4, m=1, p;
p=func(k, m);
cout<<p<<endl;
p=func(k, m);
cout<<p<<endl;
return 0;
}
预计运行结果是:_____8________8_____
实际运行结果是:_____8________17_____
(2)阅读下面两个有全局变量的程序
#include <iostream>
using namespace std;
int a=3, b=5;
int max(int a, int b)
{
int c;
c=a>b? a:b;
return c;
}
int main()
{
int a=8; //若无这一句,又将如何?
cout<<max(a,b)<<endl;
return 0;
}
预计运行结果是:________8__________
实际运行结果是:_________8_________
#include <iostream>
using namespace std;
void cude();
int main()
{
extern int x;//去掉extern及本行全删除会怎样?
x=5; //去掉这一句呢?
cude();
cout<<x<<endl;
return 0;
}
int x=10;
void cude()
{
x=x*x*x;
}
预计运行结果是:_______125___________
实际运行结果是:_______125___________
(3)阅读下面两个包含有递归函数的程序
#include <iostream>
using namespace std;
void f(int);
int main()
{
int i=1234;
f(i);
return 0;
}
void f(int n)
{
if(n==0)
return;
else
{
f(n/10);
cout<<n%10;
return;
}
}
预计运行结果是:________1234__________
实际运行结果是:_________1234_________
#include <iostream>
using namespace std;
int sub(int);
int main()
{
int i=5;
cout<<sub(i)<<endl;
}
int sub(int n)
{
int a;
if (n==1)
return 1;
a=n+sub(n-1);
return a;
}
预计运行结果是:______15____________
实际运行结果是:_______15___________
(4)理解函数的默认参数
#include <iostream>
using namespace std;
const double pi=3.1415926;
float area(float r=6.5);//指定r的默认值为6.5
float volume(float h,float r=6.5); //指定r的默认值为6.5
int main( )
{
cout<<area()<<endl; //相当于area(6.5);
cout<<area(7.5)<<endl; //形参得到的值为7.5,而不是6.5
cout<<volume(45.6)<<endl; //相当于volume(45.6,6.5)
cout<<volume(34.2,10.4)<<endl; //h的值为34.2,r的值为10.4
return 0;
}
float area(float r)
{
return pi*r*r;
}
float volume(float h,float r)
{
return pi*r*r*h;
}
(5)理解函数模板
#include <iostream>
using namespace std;
template<typename T> //模板声明,其中T为类型参数
T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main( )
{
int i1=185,i2=-76,i3=567;
double d1=56.87,d2=90.23,d3=-3214.78;
long g1=67854,g2=-912456,g3=673456;
cout<<"i_max="<<max(i1,i2,i3)<<endl; //调用模板函数,此时T被int取代
cout<<"f_max="<<max(d1,d2,d3)<<endl; //调用模板函数,此时T被double取代
cout<<"g_max="<<max(g1,g2,g3)<<endl; //调用模板函数,此时T被long取代
cout<<"c_max="<<max('1','a','A')<<endl; //调用模板函数,此时T被long取代
return 0;
}
输出结果分别为:132.732 176.715 6052.59 11621
学习心得:
静态变量一开始真的让我晕了一下,后来终于想通了。我觉得函数模板很好用啊~~