西安交大C程序设计第六章作业DOC.docx
- 文档编号:27764857
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:29
- 大小:742.72KB
西安交大C程序设计第六章作业DOC.docx
《西安交大C程序设计第六章作业DOC.docx》由会员分享,可在线阅读,更多相关《西安交大C程序设计第六章作业DOC.docx(29页珍藏版)》请在冰豆网上搜索。
西安交大C程序设计第六章作业DOC
西安交通大学实验报告
课程计算机程序设计实验名称指针与函数第1页共25页
系别实验日期2014年4月18日
专业班级组别实验报告日期2014年4月19日
姓名学号__报告退发(订正、重做)
同组人教师审批签字
一、实验目的
学会使用递归函数和函数重载,进一步熟练动态分配等指针使用方法。
二、实验内容
(一)第一题:
1、(必做题)使用递归算法编写如下程序:
对于任意给定的实数X和整数k(k>0),计算。
1.源程序代码:
<>
;
(k)递归函数用于计算x^k
()
{
x;
k;
<<"请输入实数x:
";
>>x;
<<"请输入正整数k:
";
>>k;
(k<=0)判断输入的k是否满足要求,若否则提示输入错误并重新输入
{
<<"您的输入有误!
请输入正整数:
";
>>k;
}
<<"计算结果是:
"< 0; } (k) { (1)1时不再进行循环,输出值为x x; { * (1)对于k大于1的情况,进入下一循环 s; } } 2.实验结果: (1)输入X正实数: (2)输入X正整数: (3)输入x为负数: (4)输入k为负数: 3.问题分析: 该函数的循环方式是: x^*x^ (1).设f()^k,那么就有f() (1)*x.而其结束递归的条件是1,此时有f(x,1),由此给出初值。 (二)第二题: 使用递归算法编写求斐波那契数列的第n项的函数,并编出主函数进行验证。 1.源程序代码: <> ; (n)递归函数,计算斐波那契数列的第n项 { (0)对于0不再进行递归,返回值0 0; { (1) 1对于1不再进行递归,返回值1 { (1) (2)将计算第n项归为计算第1和2项 s; } } } () { n; <<"请输入要计算的项数(非负整数): "提示输入项数,首项为第0项 >>n; (n<0)对于不符合要求的输入值重新输入 { <<"输入有误,请输入非负整数: "; >>n; } <<"计算结果是: ["< 0; } 2.实验结果: (1)输入项数正确(0或正整数): (2)输入项数有误(负数): 3.问题分析: 该题的递归方式: 第n项为之前两项之和,即: (n) (1) (2),由此递归至 (1)和 (2)时结束递归,而 (1)和 (2)已知。 (三)第三题: 重载判断两个数值大小的函数,这些数值可能是整型数、实型数和字符型,函数的返回值为两个数值中的最大值。 1.源程序代码: <> ; (*c)为了避免语句的重复,将字符与数值转换部分作为函数 { 0; 0; (c[0]'-'[0]'+')若首字符为‘-’或者‘+’则跳过 ; (c[i]'\0'[i]'.')对于整数部分逐位累加,直至遇到小数点或者数字结束 { *10+(c[i]-'0'); ; } (c[i]'.')对于小数部分进行累加 { 用来反映数字所在位置是小数点后第几位,就用该数乘以的负几次方(s) 从小数点后的一位开始循环 (0.1[i]'\0') { *(c[i]-'0'); 10; } } (c[0]'-')若为负数,则在上述计算基础上乘以-1得到最终值 ; 返回x作为c的对应的数值 } (b)对整型数进行处理 { (a>) a; b; } (b)对实数进行处理 { (a>) a; b; } (**d)对字符型进行处理 { (c); (d); (x>); }() { n; <<"请选择您要输入的数的类型,\n如果是整型请输入,实数型输入,字符型输入: "; >>n; (123) { <<"输入有误! 重新选择: "; >>n; } a[2]; b[2]; c[12][12]; (1)处理整型数 { <<"请输入两个数: "; >>a[0]>>a[1]; <<"最大值为: "<<(a[0][1]); } { (2)处理实数 { <<"请输入两个数: "; >>b[0]>>b[1]; <<"最大值为: "<<(b[0][1]); } 处理字符型 { <<"请输入第一个数: "; >>c; <<"请输入第二个数: "; >>d; <<"最大值为: "<<(); } } <<; 0; } 2.实验结果: (1)输入整数型: (2)输入为实数: (3)输入为字符: 正数: (带正号): (不带正号): 整数: 负数: 3.问题分析: 该题的重点在于字符型的处理。 在实验报告中,采取了两个数字逐个分开输入的方法,因而主要只需要判断开头是否为负号、中间是否有小数点并区别小数点前后处理方法的不同这几个问题。 如果能够一次性输入两个数中间用空格隔开的话,就需要判断空格的位置,然后对空格之后的部分再进行与前半部分相同的判断方法,显得更加麻烦。 对字符型的处理思路: 首先判断首字符是不是“-”或者“+”,如果是的话,先跳过从第二个字符开始处理,在最终的结果中再乘以-1即可;然后对于接下来的整数部分进行累加,直到遇见小数点,若没有小数点则一直执行到字符结束;如果有小数点的话,对于小数点后的部分再进行累加得到结果。 四、第四题: 编写一个函数,用于去掉字符串前面的空格,其原型为: *(*); 其中参数为字符串,返回值为指向的指针。 1.源程序代码: <> ; *(*) { 00; (*()'') ; { *()=*(); ; ; }(* (1)'\0'); ; } () { [41]; <<"请输入字符串: "; (,40); <<"去掉开头的空格之后为: \n"<<()<<; 0; } 2.实验结果: 为验证处理空格时仅是将开头处理而不处理中间空格: (1)中间无空格: (2)中间有空格: 3.问题分析: 曾经出现的问题: 起初运行时发现,即使没有判断开头空格的程序,输出结果也是没有空格的,后来检查发现是输入语句没有写为导致空格不被录入。 五、第五题: 用牛顿迭代法求任意一元方程: 111X10=0的根。 提示: 迭代公式: 1=+f()/f'() 结束迭代过程的条件为( (1)|<ε)与(1-<ε)同时成立,其中ε为预先给定的精度要求。 1.源程序代码: <> ; (k)乘方函数,输出结果为x的k次方 { 1; (k>0) { *x; ; } s; } f(*x)计算函数值f(x)的函数 { 0; (0<) { (*())*(); } ; } (*x)求导(x)函数 { 0; (1<) { (*())*i* (1); } ; } (*x)求根函数 { 0.00000001给定精确度 设m为中间变量储存x,以便于进行循环条件的判断 { ; (f()()); }(f()>()<><)循环直到达到精度 返回最终计算结果 } () { ; <<"请输入最高项次数: "; >>n; *[1]申请数组空间 <<"请从低到高输入系数: "; (0<1) >>*(); 0; <<"计算结果为: "<< (1)<<; 释放数组空间 0; } 2.实验结果: 3.问题分析: 思路分析: 程序中用到的多个函数: 乘方函数、计算f(x)、(x)的函数、自定义的求根的主体的函数、主函数。 乘方函数用于计算f(x)、(x),f(x)、(x)函数的使用简化求根的函数。 六、第六题: 将数字、小数点、正负号组成的字符串转换成相应的实数,例如: "-3.14159"变成-3.14159。 函数原型如下: (*);要求编写主函数加以测试。 1.源程序代码: <> (*); ; () { [20]; <<"请输入数值: "; >>; <<"转换结果为: "<<()<<; <<"检验: "<<()<<"+1="<<()+1<<; 0; } (*a) { 0; 0; (*(0)'-'*(0)'+')若首字符为‘-’或‘+’则跳过 ; (*()'\0'*()'.')对于整数部分逐位累加,直至遇到小数点或者数字结束 { *10+(*()-'0'); ; } (a[i]'.')对于小数部分进行累加 { 用来反映数字所在位置是小数点后第几位,就用该数乘以的负几次方(s) 从小数点后的一位开始循环 (0.1[i]'\0') { *(a[i]-'0'); 10; } } (a[0]'-')若为负数,则在上述计算基础上乘以-1得到最终值 ; 返回x作为c的对应的数值 } 2.实验结果: 对整数、负数、小数等均进行检测: (1)小数、负数: (2)整数: (正): (负): (3)0: 3.问题分析: 此题与第二题处理字符类似,需要处理开头正负号、小数点。 (七)第七题: 在字符串T中查找子串S,若找到,返回子串的个数,若找不到返回0。 要求编写主函数加以测试。 1.源程序代码: <> ; (**b) { 0(a)(b); (0<) { (b[0][i])找到首字符相同的位置 { 0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安 交大 程序设计 第六 作业 DOC
![提示](https://static.bdocx.com/images/bang_tan.gif)