西安交大C++程序设计第六章作业2详解.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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++;//从小数点后的一位开始循环

文档评论(0)

挺进公司 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档