西安交大C+程序设计第六章作业_第1页
西安交大C+程序设计第六章作业_第2页
西安交大C+程序设计第六章作业_第3页
西安交大C+程序设计第六章作业_第4页
西安交大C+程序设计第六章作业_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西安交通大学实验报告课程计算机程序设计一实验名称一指针与函数_第1页共25页系 别_一实 验专业班级_组别日 期2014 年4月18日实验报告日期2014 年4月19日_学号_报 告 退发(订正重做)同组人教师审批签字一、实验目的学会使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。二、实验内容(一) 第一题:1、(必做题) 使用递归算法编写如下程序:对于任意给定的实数X和整数k( k0),计算Xk1. 源程序代码:#in clude using n amespacestd;double yunsuandouble x,int k);验结果:(1)输入X正实数:(2)输入X正整数:输入

2、x为负数:(4)输入k为负数:3问题分析:该函数的循环方式是:xk二x*x(k-1).设f(x,k)=xAk,那么就有f(x,k)=f(x,k-1)*x.而其结束递归的条件是k=1,此时有f(x,1)=x,由此给出初值(二) 第二题: 使用递归算法编写求斐波那契数列的第 n 项的函数,并编出主 函数进行验证。1. 源程序代码:#include using namespacestd;int fib( int n) 验结果:( 1)输入项数正确( 0 或正整数):(2) 输入项数有误(负数):3.问题分析:该题的递归方式:第n项为之前两项之和,即:fib(n)二fib(n-1)+fib(n-2),

3、由 此递归至fib(1)和fib(2)时结束递归,而fib(1)和fib(2)已知。(三) 第三题 :重载判断两个数值大小的函数 max ,这些数值可能是整型 数、实型数和字符型,函数的返回值为两个数值中的最大值。1. 源程序代码:#includeusing namespacestd;double zhuanhuanc( har *c) 验结果:( 1)输入整数型:( 2)输入为实数:3)输入为字符:正数:(带正号):(不带正号):整数:负数:3. 问题分析:该题的重点在于字符型的处理。在实验报告中,采取了两个数字逐个分 开输入的方法,因而主要只需要判断开头是否为负号、中间是否有小数点并区 别

4、小数点前后处理方法的不同这几个问题。如果能够一次性输入两个数中间用 空格隔开的话,就需要判断空格的位置,然后对空格之后的部分再进行与前半 部分相同的判断方法,显得更加麻烦。对字符型的处理思路:首先判断首字符是不是 “-”或者 “+,”如果是的话,先跳过从第二个字符 开始处理,在最终的结果中再乘以 -1 即可;然后对于接下来的整数部分进行累 加,直到遇见小数点,若没有小数点则一直执行到字符结束;如果有小数点的 话,对于小数点后的部分再进行累加得到结果。四、第四题: 编写一个函数,用于去掉字符串前面的空格,其原型为char *myltrim(char *string);其中参数 string 为字

5、符串,返回值为指向 string 的指针。1. 源程序代码:#includeusing namespacestd;char *myltrim( char *string)int i=0,j=0;while (*(string+i)= )i+;do*(string+j)=*(string+i);i+;j+; while(*(string+i-1)!= 0);return string;int main()char string41;cout 请输入字符串: ;cout 去掉开头的空格之后为 :nmyltrim(string)endl;return 0;2. 实验结果:为验证处理空格时仅是将开头处

6、理而不处理中间空格:(1) 中间无空格:(2) 中间有空格:3. 问题分析 :曾经出现的问题:起初运行时发现,即使没有判断开头空格的程序,输出结果也是没有空格的,后来检查发现是输入语句没有写为导致空格不被录入。五、第五题:用牛顿迭代法求任意一元方程: anXn+an-1Xn-1+a1X1+a0=0的根。提示:迭代公式: Xn+1 = Xn + f(Xn) / f(Xn)结束迭代过程的条件为(|f(xn+1)|v?与(|Xn+1 - Xn| )同时成立,其中为预先给定的精度要求。1 .源程序代码:#includeusing namespacestd;double cf(double x,i nt

7、 k)验结果:3.问题分析:思路分析:程序中用到的多个函数:乘方函数、计算f(x)、f_(x)的函数、自定 义的求根的主体的函数、主函数。乘方函数用于计算 f(x)、 f_(x) , f(x)、 f_(x) 函数的使用简化求根的函数。六、第六题:1.源程序代码:#includedouble myatof(char *num);using namespacestd;int main()char num20; coutnum;cout 转换结果为: myatof(num)endl;cout检验:myatof(num) +1= myatof(num)+1endl; return 0;double m

8、yatof(char *a)int i=0;double x=0;if(*(a+0)=-|*(a+0)=+)验结果:对整数、负数、小数等均进行检测:(1) 小数、负数:(2) 整数:(正):(负):(3) 0:3. 问题分析:此题与第二题处理字符类似,需要处理开头正负号、小数点。(七)第七题:在字符串T中查找子串S,若找到,返回子串的个数,若找不 到返回 0。要求编写主函数加以测试。1.源程序代码:#include usingnamespacestd;int find(char *a,char *b)int i,s=0,x=strlen(a),y=strlen(b);for(i=0;i=x-y

9、;i+)if(b0=ai) 验结果:注:由于题目中没有说明,所以在这里当做可以共用来数,即:aaaa中查找aa时,第一二个a、第二三个a、第三四个a都认为是满足条件的,因而查出 有三个而非两个。若要求不可重叠,只需循环完毕后从i=i+y+1再判断即可.(1) 其他符号:(2) 字母:(3) 此例说明可重叠:(4) 含空格:3问题分析:不足之处:曾经尝试过让子串但发现此时无法实现,当输入第一个字符串 并回车后程序会跳过子串输入语句直接输出结果。不懂为何,如下:八、第八题:编写一个程序,当输入一个整型数字以后,可以转换成相应的大写英文单词输出。如:123 转换成 one hundred twenty three验结果:(1) 一位数:(2)两位数:(3) 带正号:SB Uwindctem3| 口 叵|庄(4)特定位置含0:(5) 0:( 6)位数为 3的倍数:(7)负数、非数字:3问题分析:应该注意以下几点:( 1)对于输入负数或者 0或者不是整数的处理;(2)每三位为一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论