评分
签名
日期
湖南商学院实验报告
  课程名称      C++语言程序设计 
  实验名称        函数           
  专业班级                       
                           
                         
  实验日期   星期三  七八节
  实验地点            E603            
2011—2012学年度第 学期

一、实验目的
1掌握函数声明、定义和使用的方法。
2.掌握形式参数与实在参数之间的对应关系;掌握函数调用时形参、实参之间的“值传递”和“地址传递”的区别。
3.掌握函数递归调用的方法。
4掌握内联函数、重载函数及默认函数参数的使用方法。
5.掌握自定义头文件的方法,学会建立和调试多文件程序。
二、实验内容
1.编写一个求整数n阶乘(n!)的程序。将求n阶乘的过程设计成函数供主函数调用,参数为n,返回为n阶乘的值。
2定义两个函数swap1swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是传址参数,在程序中分别调用这两个函数。
3.求斐波那契数列。将求斐波那契数列的过程设计成递归函数,参数为数列的项数,由主函数调用。
4输入并运行下列程序,分析和写出各程序的运行结果。
1//内联函数
#include <iostream>
#include <cstdlib>
//内联函数定义
inline void error_message(char *a)
{
    std::cout<<'\a'<<a;
    exit(1);
}
void main()
{
    error_message("You called?");
}
2)函数重载——复制字符串
#include <iostream.h>
//string_copy()第一版本
void string_copy(char *dest,const char* src)
{
    while((*dest++=*src++)!='\0');
}
//string_copy()第二版本
void string_copy(char *dest, const char* src,int len)
{
    while(len && (*dest++=*src++)!='\0')
        --len;
    while(len--)
        *dest++='\0';
}
char misspiggy[20],kermit[20];
void main()
{
    string_copy(misspiggy,"Miss Piggy");
    string_copy(kermit,"Kermit,the file transfer protocol",6);
    cout<<kermit<<" and "<<misspiggy<<endl;
}
3)具有默认参数的函数
#include <iostream.h>
//原形
void show(int =1,float =2.5,long =5);
void main()
{
    show();            //提供所有三个默认变量
    show(5);          //提供第一个变量
    show(6,8.8f);      //提供第一个和第二个变量
    show(7,7.5,10L);  //提供所有三个变量
}
//显示默认变量的结果
void show(int first ,float second, long third)
{
    cout<<" first ="<<first;
    cout<<", second ="<<second;
    cout<<",third ="<<third<<endl;
}
5.将实验2改编成为多文件结构的程序。
三、实验环境
VC++6.0
四、相关知识
1.值传递是向函数传递参数的值而不是对参数的引用。对于大型的结构,值传递方式效率低下,传递对变量的引用才是更好的选择。有时要修改实参的值,在这种情况下,函数则应该接受变量的地址,而不是变量本身。因此函数声明中的形参应该是一个所需要类型的指针,而且在调用函数时,要以地址作为实际参数。其实地址传递传递的仍然是一个数值,不过这个数值是一个变量的地址值。
2.将实验2程序改编为多文件结构的程序。
    1)建立一个工程文件,该工程包含两个源文件。
    2)第一个文件有main()主函数。
    3)第二个文件包含swip1swip2两个函数。
4)编译一个头文件联系两个源文件,分别编译两个源文件。
5)连接该工程,生成可执行文件。
3.文件包含有两种形式
#include <文件名>
#include "文件名c语言用递归函数求n的阶乘"
第一种形式中,所要嵌入的源文件用尖括号括起来。这种形式的#include指令告诉编译预处理程序在编译器自带的或外部库的头文件中搜索要嵌入的文件,它们一般是系统提供的公共头文件,存放在系统目录中的include子目录中。
第二种形式中,所要嵌入的源文件用双引号括起来。这种形式的#include指令告诉编译预处理指令先在当前子目录搜索要嵌入的文件,如果没有到文件,则要去搜索编译器自带的或外部库的头文件。
五、操作步骤
1.编写一个求整数n阶乘(n!)的程序。将求n阶乘的过程设计成函数供主函数调用,参数为n,返回为n阶乘的值。
2定义两个函数swap1swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是传址参数,在程序中分别调用这两个函数。
3.求斐波那契数列。将求斐波那契数列的过程设计成递归函数,参数为数列的项数,由主函数调用。
4输入并运行下列程序,分析和写出各程序的运行结果。
1//内联函数
#include <iostream>
#include <cstdlib>
//内联函数定义
inline void error_message(char *a)
{
    std::cout<<'\a'<<a;
    exit(1);
}
void main()
{
    error_message("You called?");
}
2)函数重载——复制字符串
#include <iostream.h>
//string_copy()第一版本
void string_copy(char *dest,const char* src)
{
    while((*dest++=*src++)!='\0');
}
//string_copy()第二版本
void string_copy(char *dest, const char* src,int len)
{
    while(len && (*dest++=*src++)!='\0')
        --len;
    while(len--)
        *dest++='\0';
}
char misspiggy[20],kermit[20];
void main()
{
    string_copy(misspiggy,"Miss Piggy");
    string_copy(kermit,"Kermit,the file transfer protocol",6);
    cout<<kermit<<" and "<<misspiggy<<endl;
}
3)具有默认参数的函数
#include <iostream.h>
//原形
void show(int =1,float =2.5,long =5);
void main()
{
    show();            //提供所有三个默认变量
    show(5);          //提供第一个变量
    show(6,8.8f);      //提供第一个和第二个变量
    show(7,7.5,10L);  //提供所有三个变量
}
//显示默认变量的结果
void show(int first ,float second, long third)
{
    cout<<" first ="<<first;
    cout<<", second ="<<second;
    cout<<",third ="<<third<<endl;
}
5.将实验2改编成为多文件结构的程序。
实验5需要建立名为3_5的工程。添加两个源文件main.cppswip.cpp,添加一个头文件headswip.h 分别编译并连接,执行程序。
1)源文件main.cpp
//交换两个整数,使用不同参数传递方式实现
#include <iostream.h>
#include "headswip.h"  //用户自定义头文件,声明用户自定义的常量、变量及函数
void main()
{
    int a,b;
    cout<<"Please input a and b"<<endl;
    cin>>a>>b;
    cout<<"main :a="<<a<<", "<<"b="<<b<<endl;
    swip1(a,b);
    cout<<"main :a="<<a<<", "<<"b="<<b<<endl;
    swip2(&a,&b);
    cout<<"main :a="<<a<<", "<<"b="<<b<<endl;
}
2)源文件swip.cpp
#include <iostream.h>
//值传递
void swip1(int a,int b)
{
    int t;
    t=a,a=b,b=t;
    cout<<"swip1:a="<<a<<", "<<"b="<<b<<endl;
}
//地址传递
void swip2(int *a,int *b)
{
    int t;
    t=*a,*a=*b,*b=t;
    cout<<"swip2:a="<<*a<<", "<<"b="<<*b<<endl;
}
3)头文件headswip.h
//函数原形
void swip1(int a,int b);
void swip2(int *a,int *b);
六、实验结果及总结
成功地编制了简单的C++程序,并且运行了出来,得出了结果
、实验小结:
掌握了函数声明、定义和使用的方法、形式参数与实在参数之间的对应关系、函数调用时形参、实参之间的“值传递”和“地址传递”的区别。
了解了函数递归调用的方法、内联函数、重载函数及默认函数参数的使用方法、自定义头文件的方法,学会建立和调试多文件程序。
                                          手写签名:
  期:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。