【实训5-5】函数原型说明
(总分39)


 【实训目的】函数原型说明   

【第 1 步】实训内容介绍

         1. 实训内容介绍
         2. 函数定义位于调用之前
         3. 函数定义位于函数内(错误的)
         4. 函数定义位于调用之后
         5. 函数定义位于在单独的文件中
         6. 实训结束

【Jitor 校验第 1 步】我已阅读实训内容介绍 // 送分题。直接点击。

 

 

【第 2 步】函数定义位于调用之前

 1、在项目 cpp5 中创建名为 cpp5code 的源代码文件,如果项目不存在,则先创建项目,然后创建源代码文件。
 2、将下述代码复制到 cpp5code 中:

#include <iostream.h>
// 在这里补写代码

void main(void) {
         int a, b;
         cout << "输入两个数: ";
         cin >> a >> b;

         int c;
         c = sub(a, b);
         cout << " a 和 b 之差是 {" << c << "}\n";
}

 编写一个sub函数,位于主函数 main() 之前,功能是求两数之差。
 代码见简明教程【例5-5】第 1 步代码,运行结果如下:

输入两个数: 3 5
{两数差}
 a 和 b 之差是 {-2}
Press any key to continue

代码如下:
// 从下一行开始复制。
#include <iostream.h>
int sub(int x, int y)   {
         cout << "{两数差}\n";
         return x - y;
}

void main(void) {
         int a, b;
         cout << "输入两个数: ";
         cin >> a >> b;

         int c;
         c = sub(a, b);
         cout << " a 和 b 之差是 {" << c << "}\n";
}
// 一直复制到上一行结束。

【Jitor 校验第 2 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。

 

 

【第 3 步】函数定义位于函数内(错误的)

 直接将下述代码复制到 cpp5code 中:

#include <iostream.h>
void main(void) {
         int a, b;
         cout << "输入两个数: ";
         cin >> a >> b;

         int sub(int x, int y){ // 不允许在函数中编写另一个函数,初学者经常犯这种错误
                  cout << "{两数差}\n";
                  return x - y;
         }
         int c;
         c = sub(a, b);
         cout << " a 和 b 之差是 {" << c << "}\n";
}

 改写前一步骤的代码,将sub函数移到主函数 main() 之中,位于调用的代码之前(符合先声明后使用的原则)。
 运行结果如下:

Compiling...
cpp5code.cpp
D:\vcpp\cpp5\cpp5code.cpp(13) : error C2601: 'sub' : local function definitions are illegal
Error executing cl.exe.

cpp5.exe - 1 error(s), 0 warning(s)

 这里的错误是 “本地函数定义是非法的”,意思是函数写在了在非法的位置。
 这是因为函数的定义是不能嵌套的,就是说在函数的内部不能定义函数,函数必须定义在函数之外。

代码如下:
// 从下一行开始复制。
#include <iostream.h>
void main(void) {
         int a, b;
         cout << "输入两个数: ";
         cin >> a >> b;

         int sub(int x, int y){
                  cout << "{两数差}\n";
                  return x - y;
         }
         int c;
         c = sub(a, b);
         cout << " a 和 b 之差是 {" << c << "}\n";
}
// 一直复制到上一行结束。

【Jitor 校验第 3 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。

 

 

【第 4 步】函数定义位于调用之后

 改写前一步骤的代码,将sub函数移到主函数 main() 之后。
 代码见简明教程【例5-5】第 3 步代码,运行结果如下:

输入两个数: 3 5
{两数差}
 a 和 b 之差是 {-2}
Press any key to continue

代码如下:
// 从下一行开始复制。
#include <iostream.h>
int sub(int, int);

void main(void) {
         int a, b;
         cout << "输入两个数: ";
         cin >> a >> b;

         int c;
         c = sub(a, b);
         cout << " a 和 b 之差是 {" << c << "}\n";
}

int sub(int x, int y){
         cout << "{两数差}\n";
         return x - y;
}
// 一直复制到上一行结束。

【Jitor 校验第 4 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行。点击。

 

 

【第 5 步】函数定义位于在单独的文件中

 在项目 cpp5 中创建名为 arithmetic.cpp 的源代码文件,将sub函数保存在文件arithmetic.cpp中。
 在任何其他文件中调用sub函数。
 代码见简明教程【例5-5】第 4 步代码,运行结果如下:

输入两个数: 3 5
{两数差}
 a 和 b 之差是 {-2}
Press any key to continue

 因为有了函数原型,程序可以正常运行,运行结果与第二步相同。

代码如下:
// 从下一行开始复制。
#include <iostream.h>
int sub(int, int);

void main(void) {
         int a, b;
         cout << "输入两个数: ";
         cin >> a >> b;

         int c;
         c = sub(a, b);
         cout << " a 和 b 之差是 {" << c << "}\n";
}
// 一直复制到上一行结束。

 * 重要 *: 需要在项目内添加一个文件。
文件名为:arithmetic.cpp

代码如下:
// 从下一行开始复制。
#include <iostream.h>

int sub(int x, int y){
         cout << "{两数差}\n";
         return x - y;
}
// 一直复制到上一行结束。

【Jitor 校验第 5 步】 // 复制上面的代码到 VC++ 6.0 ,保存并运行(注意:有两个文件)。点击。

 

 

【第 6 步】实训总结

 本次实训学习了函数应该写在哪里。总结如下:
         1. 在调用之前编写函数:这时声明函数标识符和定义函数的函数体是在一起的。
         2. 在函数内编写函数:这是不允许的,即函数定义不允许嵌套。
         3. 在调用之后编写函数:这时应该是在调用之前声明函数(函数原型),而函数的定义(编写函数体)可以写在其他地方, 可以在调用的代码之后,甚至可以在其他的源代码文件中。
         注意:在函数内可以声明函数,即函数原型。 

【Jitor 校验第 6 步】我已阅读实训总结 // 切记:不要点、不要提交!

 

仍有疑问 ? 联系QQ 9429444(陈海云) : 返回首页