C++语言程序设计实验答案_函数的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验03函数的应用(2学时)
(第3章函数)
一、实验目的
二、实验任务
3_1(习题3-8)编写一个函数把华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9。
3_2 编写重载函数Max1可分别求取2个整数、3个整数、2个双精度数、3个双精度数的最大值。
3_3 使用系统函数pow(x, y)计算x y的值,注意包含头文件cmath。
3_4(习题3-13)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。
三、实验步骤
1.(编程,习题3-8)把华氏温度转换为摄氏温度。
编写函数float Convert(float TempFer),参数和返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。
程序名:lab3_1.cpp。
★ 程序及运行结果:(注意:定义的函数头是float Convert(float TempFer))
float f;
cout<<"输入一个华氏温度值:";
cin>>f;
cout<<"华氏温度"<<f<<"转换为摄氏温度的值是"<<Convert(f)<<endl;
}
float Convert(float TempFer){
return (TempFer-32)*5/9;
}
2.(编程)编写重载函数,求2或3个数中的最大数。
编写4个同名函数Max1,分别求取2个整数、3个整数、2个双精度数、3个双精度数的最大值,实现函数重载,在main()函数中测试函数功能。
程序名:lab3_2.cpp。
★程序及运行结果:(注意:分别测试4个函数)
//lab3_2.cpp
#include<iostream>
using namespace std;
int Max1(int a,i n t b){
cout<<"调用函数: int Max1(int a,int b)"<<endl;
return a>b?a:b;
}
int Max1(int a,int b,int c){
cout<<"调用函数: int Max1(int a,int b,int c)"<<endl;
return a>b ? (a>c?a:c) : (b>c?b:c);
}
double Max1(double a,double b){
cout<<"调用函数: double Max1(double a,double b)"<<endl;
return a>b?a:b;
}
double Max1(double a,double b,double c){
cout<<"调用函数: double Max1(double a,double b,double c)"<<endl;
return a>b ? (a>c?a:c) : (b>c?b:c);
}
void main(){
int a,b,c,ii;
double d,e,f,dd;
cout<<"输入2个整数:";
cin>>a>>b; ii=Max1(a,b);
cout<<a<<"和"<<b<<"的最大数是:"<<ii<<endl;
cout<<"\n输入3个整数:";
cin>>a>>b>>c; ii=Max1(a,b,c);
cout<<a<<","<<b<<"和"<<c<<"的最大数是:"<<ii<<endl;
cout<<"\n输入2个双精度数:";
cin>>d>>e; dd=Max1(d,e);
cout<<d<<"和"<<e<<"的最大数是:"<<dd<<endl;
cout<<"\n输入3个双精度数:";
cin>>d>>e>>f; dd=Max1(d,e,f);
cout<<d<<","<<e<<"和"<<f<<"的最大数是:"<<dd<<endl; }
int Max1(int a,i n t b){
if(a>b) return a;
else return b;
}
int Max1(int a,int b,int c){
if(a>b)
if(a>c) return a;
else return c;
else
if(b>c) return b;
else return c;
}
int Max1(int a,i n t b){
if(b>a) a=b;
return a;
}
int Max1(int a,int b,int c){
if(b>a) a=b;
if(c>a) a=c;
return a;
}
3.(编程)调用系统函数pow(x, y)计算x的y次幂。
在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x, y)函数计算x的y次幂的结果,再显示出来。
程序名:lab3_3.cpp。
/*
重载函数pow的函数原型:
long double pow(long double,int);
float pow(float,int);
double pow(double,int);
*/
★程序及运行结果:(注意:不要编写函数pow(…),直接调用)
//lab3_3.cpp
#include<iostream>
#include<cmath>//无此行也可以
using namespace std;
void main(){
float x; int y;
cout<<"输入基底的值:";
cin>>x;
cout<<"输入幂的值:";
cin>>y;
cout<<x<<"的"<<y<<"次幂的结果为 "<<pow(x,y)<<endl;
}
4.(验证,习题3-13)编写递归函数求Fibonacci级数。
编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci 级数。
公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1;使用if语句判断函数的出口,在程序中用cout语句输出提示信息。
程序名:lab3_4.cpp。
(程序见步骤5)
★程序的运行结果:(注意:运行步骤5的程序,输入6)
5.(要求)用Debug调试的程序文件lab3_4.cpp。
使用“调试”中的“逐语句”追踪到函数内部,观察函数的调用过程,参考程序如下://lab3_4.cpp
#include<iostream>
using namespace std;
int fib(int n);
int main()
{
int n,answer;
cout<<"输入一个正整数:";
cin>>n;
cout<<"\n";
answer=fib(n);
cout<<answer<<" 是第 "<<n<<" 个 Fibonacci 数。
\n";
return 0;
}
int fib(int n)
{
cout<<"计算 fib("<<n<<")......";
if(n<3){
cout<<"返回 1!\n";
return (1);
}
else{
cout<<"调用 fib("<<n-2<<") 和 fib("<<n-1<<");\n";
return (fib(n-2)+fib(n-1));
}
}
6.(操作)调试步骤。
调试操作步骤如下:
(1)选择菜单命令“调试 | 逐语句”,系统进入单步执行状态,程序开始运行,并出
现一个DOS窗口,此时在源码中光标停在main()函数的入口处。
(2)把光标移到语句“answer=fib(n);”前,并在该行单击鼠标右键,再单击“运行
到光标处”,在程序运行的DOS窗口中按提示输入数字6,光标停在语句
“answer=fib(n);”前,观察一下n的值(观察方法见实验2)。
(3)单击“逐语句”,程序进入fib函数,观察一下n的值。
(4)把光标移到语句“return (fib(n-2)+fib(n-1));”前,单击“运行到光标处”。
(5)再单击“逐语句”,程序递归调用fib函数,再进入fib函数,观察一下n的值。
(6)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归
调用的理解。
把光标移到语句“return (fib(n-2)+fib(n-1));”前,单击Run to Cursor。
再单击Step Into。
(7)把光标移到语句“return (1)”前,单击“运行到光标处”。
再单击“逐语句”。
(8)把光标移到main()中的“}”前,单击“运行到光标处”。
得到运行结果。
(9)把光标移到main()中的“}”后,单击“运行到光标处”。
运行结束。
(10)再试试“调试”菜单栏中别的菜单项,熟悉调试的各种方法。