2013级C++第12周程序阅读项目——理解函数

简介: 课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759第一部分 重重重要的技能:掌握单步执行,跟踪观察执行中变量的变化阅读http://blog.csdn.net/sxhelijian/article/details/15026159中《CodeBlocks调试功能快捷教程》,通过运行示例,掌握CodeBlocks中调试功
课程首页在: http://blog.csdn.net/sxhelijian/article/details/11890759

第一部分 重重重要的技能:掌握单步执行,跟踪观察执行中变量的变化

阅读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每次调用时被不同实际类型替代。



目录
相关文章
WK
|
10天前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
32 1
|
1月前
|
存储 程序员 编译器
简述 C、C++程序编译的内存分配情况
在C和C++程序编译过程中,内存被划分为几个区域进行分配:代码区存储常量和执行指令;全局/静态变量区存放全局变量及静态变量;栈区管理函数参数、局部变量等;堆区则用于动态分配内存,由程序员控制释放,共同支撑着程序运行时的数据存储与处理需求。
91 21
|
21天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
28天前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
234 3
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
44 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
21 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
135 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
26 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
38 0
C++入门6——模板(泛型编程、函数模板、类模板)
下一篇
无影云桌面