第一部分 重重重要的技能:掌握单步执行,跟踪观察执行中变量的变化
阅读http://blog.csdn.net/sxhelijian/article/details/15026159中《CodeBlocks调试功能快捷教程》,通过运行示例,掌握CodeBlocks中调试功能。
今后在调试程序时,尽可能利用好调试功能,这是职业的要求。
第二部分 阅读代码,理解函数的用法
1、理解函数的默认参数
#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; }
① 运行程序,利用调试功能,观察变量和函数参数的值,结合课堂讲解,品味默认参数的作用。
② 去掉第4行的“=6.5”试试,出错的原因是____________________,给你的启示是_________________,若坚持这种改法,程序要做的改变是________________________。
③ 将第14行改为“float area(float r=6.5)”,出错的原因是__________________,给你的启示是____________________。
④ 将第5行“float h,float r=6.5”改为“float h=1,float r”,出错的原因是_____________,给你的启示是____________________;改为“float volume(float h=0,float r=6.5)”,结果会是_____________________,给你的启示_______________________________。
2、理解函数的重载
#include <iostream> using namespace std; int max(int a,int b,int c); //函数声明 double max(double,double,double); //函数声明,可以不写形参名只写形参类型 long max(long a,long b,long c); //函数声明,形参a,b,c处可以只保留类型名 int max(int,int); //函数声明 int main( ) { int i1,i2,i3,i; cin>>i1>>i2>>i3; //输入3个整数 i=max(i1,i2,i3); //求3个整数中的最大者 cout<<"i_max="<<i<<endl; double d1,d2,d3,d; cin>>d1>>d2>>d3; //输入3个双精度数 d=max(d1,d2,d3); //求3个双精度数中的最大者 cout<<"d_max="<<d<<endl; long g1,g2,g3,g; cin>>g1>>g2>>g3; //输入3个长整数 g=max(g1,g2,g3); //求3个长整数中的最大者 cout<<"g_max="<<g<<endl; cin>>i1>>i2; //输入2个整数 i=max(i1,i2); //求2个整数中的最大者 cout<<"i_max="<<i<<endl; return 0; } int max(int a,int b,int c) //定义求3个整数中的最大者的函数 { if(b>a) a=b; if(c>a) a=c; return a; } double max(double a,double b,double c) //定义求3个双精度数中的最大者的函数 { if(b>a) a=b; if(c>a) a=c; return a; } long max(long a,long b,long c) //定义求3个长整数中的最大者的函数 { if(b>a) a=b; if(c>a) a=c; return a; } int max(int a,int b) //定义求2个整数中的最大者的函数 { if(b>a) a=b; return a; }
① 运行程序,结合课堂讲解,品味函数重载的意义。
② 利用codeBlocks中的Debug功能,Step Into到函数内部,观察每次调用的是哪个函数,进一步理解重载中要调用的函数。
③ 将第4行加入默认参数的声明“double max(double,double,double=0.0);”,是否会出现编译错误?
④ 将第3行也加入默认参数的声明“int max(int a,int b,int c=0);”,情况又会怎样?请解释原因(仔细看书能获得答案)。
3、理解函数模板
#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; }
① 运行程序,结合课堂讲解,品味函数模板的意义。
② 利用codeBlocks中的Debug功能,Step Into到函数内部,观察每次调用时函数的参数值,体会类型参数T每次调用时被不同实际类型替代。