- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安交通大学实验报告
课程__计算机程序设计__实验名称__指针与函数__第 1 页 共 25 页
系 别____ _______ 实 验 日 期 2014 年 4月 18日
专业班级__ ____组别_____________ 实 验 报 告 日 期 2014 年 4 月 19日
姓 名___ _______学号_ _ 报 告 退 发 ( 订正 、 重做 )
同 组 人_________________________________ 教 师 审 批 签 字
一、
学会使用递归函数函数重载,熟练动态分配等指针使用方法、
(一)第一题:1、(必做题) 使用递归算法编写如下程序:对于任意给定的实数 X 和整数k( k>0) ,计算 Xk 。
: #include<iostream>
using namespace std;
double yunsuan(double x,int k);//递归函数用于计算x^k
int main()
{
double x;
int k;
cout<<"请输入实数x:";
cin>>x;
cout<<"请输入正整数k:";
cin>>k;
while(k<=0)//判断输入的k是否满足要求,若否则提示输入错误并重新输入
{
cout<<"您的输入有误!请输入正整数:";
cin>>k;
}
cout<<"计算结果是:"<<x<<"^"<<k<<"="<<yunsuan(x,k)<<endl;//输出运算结果
return 0;
}
double yunsuan(double x,int k)
{
if(k==1)//k=1时不再进行循环,输出值为x
return x;
else
{
double s=x*yunsuan(x,k-1);//对于k大于1的情况,进入下一循环
return s;
}
}
2.:
1)输入X正数:
(2)输入X正整数:
(3)输入x为负数:
(4)输入k为负数:
3.问题分析:
的循环方式是:k-1).设f(x,k)=x^k,那么就有x,k)=f(x,k-1)*x.而其结束递归的条件是k=1,有x,1)=x,由此给出初值。):使用递归算法编写求斐波那契数列的第 n 项的函数,并编出主函数进行验证。 :#include<iostream>
using namespace std;
int fib(int n) //递归函数,计算斐波那契数列的第n项
{
if(n==0)//对于n=0不再进行递归,返回值0
return 0;
else
{
if(n==1)
return 1;//对于n=1不再进行递归,返回值1
else
{
int s=fib(n-1)+fib(n-2);//将计算第n项归为计算第n-1和n-2项
return s;
}
}
}
int main()
{
int n;
cout<<"请输入要计算的项数(非负整数):";//提示输入项数,首项为第0项
cin>>n;
while(n<0)//对于不符合要求的输入值重新输入
{
cout<<"输入有误,请输入非负整数:";
cin>>n;
}
cout<<"计算结果是:fib["<<n<<"]="<<fib(n)<<endl;//输出计算结果
return 0;
}
:
)正确正整数):
(2)输入项数有误(负数):
3.问题分析:
该题的递归方式:第n项为两项:ib(n)=fib(n-1)+fib(n-2),由此递归至fib(1)和fib(2)时结束递归,(1)和fib(2)已知。
(三) max ,这些数值可能是整型数、实型数和字符型,函数的返回值为两个数值中的最大值。:#include<iostream>
using namespace std;
double zhuanhuan(char *c)//为了避免语句的重复,将字符与数值转换部分作为函数
{
int i=0;
double x=0;
if(c[0]=='-'||c[0]=='+')//若首字符为‘-’或者‘+’则跳过
i++;
while(c[i]!='\0'&&c[i]!='.')//对于整数部分逐位累加,直至遇到小数点或者数字结束
{
x=x*10+(c[i]-'0');
i++;
}
if(c[i]=='.')//对于小数部分进行累加
{
double s;//s用来反映数字所在位置是小数点后第几位,就用该数乘以的负几次方(s)
i++;//从小数点后的一位开始循环
1亿VIP精品文档
相关文档
最近下载
- 试卷分析失分原因和改进措施(九年级数学二模).doc
- 2023年一级建造师《铁路工程管理与实务》备考讲义.pdf
- 法律史学课件-希伯来法.ppt VIP
- 尼康Nikon COOLPIX P500数码相机(中文)说明书.pdf
- 2022中国通用技术集团总部招聘7人上岸笔试历年难、易错点考题附带参考答案与详解.docx
- 校外实习安全应急预案.pdf VIP
- 情绪管理2023章节测试答案_情绪管理超星尔雅答案.pdf VIP
- 中南财经政法大学毕业答辩通用PPT模板.ppt
- 外教社2023新标准高职公共英语:实用综合教程(第三版)第3册 PPT课件Unit 2 The mobile era.pptx
- 新人教版高中英语必修三词汇表(Unit 1).doc
文档评论(0)