计算机科学与技术第3次上机实验,计算机科学与技术第4次上机实验.doc

计算机科学与技术第4次上机实验.doc

哈尔滨工程大学程序设计基础实验报告基础实践一姓 名 麦豆 班 级 学 号 实验时间 2018 年 5 月 3 日成绩哈尔滨工程大学计算机基础课程教学中心实验题目1写一个函数,Snaaaaaaaaa求多项式的前n项和,其中a是一个数字。n由键盘输入。设计思想声明函数sum,利用循环求得sum最终值并返回sum值实验代码及注释include stdio.hint sumint a,int n;sum函数声明int main int n; int a; printf 请输入a,nn; scanfdd,a,n; printf前d项和为dn,n,suma,n;调用函数sum return 0;int sumint a,int n int sum0; int i; int count; count0; fori1;in;i countcount*10a;每次乘10加a sumsumcount; return sum;验证与结论总结与心得体会声明函数时后面一定要有分号,但写函数时不需要。实验题目2编程实现求10000以内的回文数。其中,函数实现判断任一正整数是否为回文数。所谓回文数就是将一个数从左向右读与从右向左读是一样的,例如121和1331都是回文数。设计思想声明judje函数,判断number是否为回文数。在函数内部先判断数字number位数,由于回文数为对称结构,故通过位数来确定判断次数,每次判断数字首位与个位然后去掉首位与个位再次判断直至循环结束。另外需要对个位数另行判断,个位数一定为回文数。如果为回文数返回1,否则返回0。实验代码及注释include stdio.hinclude math.hint judjeint number;声明judje函数int main int i; fori0;i10000;i ifjudjei1judje为1的数输出 printfdt,i; return 0;int judjeint number判断number是否为回文数 int judje,i0,middle_number,parity,j;回文数判断变量,数字位数,数字位数中间变量,数字位数奇偶 int middle_number2;取掉首位个位剩余数 int shouwei,gewei;首位,个位 middle_number2number;全部赋初值 middle_numbernumber; do 判断数字位数 i; middle_numbermiddle_number/10;对数字除以10直到为0 while middle_number0; parityi/2;运算次数 for j1;jparity;j shouweimiddle_number2/pow10.0,doublei-2*j1;首位数字 geweimiddle_number210;个位数字 middle_number2middle_number2-shouwei*pow10.0,doublei-2*j1/10;将首位与个位去除后剩余的数 ifshouweigewei jparity个位与首位相等且都已比较完成 judje1;1为真 else ifshouweigewei judje0; break; ifparity0如果为个位数一定为回文数 judje1; return judje;验证与结论总结与心得体会通过函数可以使代码更加简洁,流程更加清晰。实验题目3假设你每月在储蓄账户上存100元,年利率是5,则每月的利率是0.05/120.00417。第一个月后,账户上的值变成100*(10.00417)100.417;第二个月后,账户上的值变成(100100.417)*(10.00417)201.252;第三个月后,账户上的值变成(100201.252)*(10.00417)302.507,以此类推。写一个函数,根据用户输入的每月的存款数、年利率和月份数,计算给定月份后账户上的钱数。设计思想声明final_money,由题意可知每个月钱数为上个月钱数加每月存的钱数乘以每月利率,在函数内部由循环得到钱数,返回final_money。实验代码及注释include stdio.hdouble final_moneydouble money,double lilv,int n;函数声明int main double money,lilv;每月存款数,年利率 int n;月份 printf请输入每月存款数、年利率和存款月份数(以空格隔开)n; scanflflfd,money,lilv,n; printf账户上的剩余钱数为.3lf,final_moneymoney,lilv,n; return 0;double final_moneydouble money,double lilv,int n存款数、年利率和月份数 double final_money0;赋初值 int i;循环变量 fori1;in;i final_moneyfinal_moneymoney*1lilv/12;表达式 return final_money; 返回钱数验证与结论总结与心得体会函数参数可以是多个但返回值只有一个。实验题目4用递归法将一个整数n转换成字符串。例如,输入483,应输出的字符串“483”,n的位数不确定,可以是任意位数的整数。设计思想声明函数,在函数将数每次除以10反复递归调用直到为0,而余数加上0可以产生相应的字符。实验代码及注释include stdio.hvoid changeint n;int main int n; printf请输入整数n; scanfd,n; printf输出相应字符串; if n0 putchar-; 先输出一个-号 n-n;转化为正值 changen; printfn; return 0;void changeint n int i; in/10; if i0 changei;对n每次除以10反复递归调用直到为0 putcharn100;余数加上0可以产生相应的字符验证与结论总结与心得体会余数可以加上48来得到相应的字符但加0会更加简单。函数递归必须要有限制条件,转换字符串函数限制条件就是i为0。实验题目5用递归方法求n阶勒让德多项式的值。设计思想直接利用函数递归,当阶数值为o返回1,阶数值为1返回输入的数。另外阶数值在递归时需要强制转换为float类型,否则式子计算为整型数。实验代码及注释include stdio.hfloat numberfloat x,int n;函数声明int main int n; 阶数 float x;循环变量充当输入的数 printf请输入x值和阶数n; scanffd,x,n; printf.2fn,numberx,n; return 0;float numberfloat x,int n ifn0 return 1; else ifn1 return x; return 2*n-1*x*numberx,n-1/floatn-n-1*numberx,n-2/floatn;递归求n阶勒让德多项式注意n为整数需要强制转换 验证与结论总结与心得体会递归是c语言中最基础也是极为重要的算法,核心是函数自身对自身的调用。注意整型除以整型仍为整型,故需要对阶数值强制转换。实验题目6编程求20以内正整数的阶乘。要求写一函数求任一整数的阶乘,在函数内部通过定义静态局部变量求阶乘。设计思想声明一个factorial函数,在函数内部定义静态变量,利用循环求阶乘值,由于局部静态变量会保留上一次运行的值,故求20以内正整数的阶乘只能调用一次factorial函数,求19的阶乘然后利用循环从19往下输出直到1的阶乘。实验代码及注释include stdio.hlong long factorialint number;函数声明int main int i19; long long x;数据极大必须用longlong数据类型 xfactoriali;仅调用一次函数 printfld,x; fori19;i0;i printfd是lldn,i,x;longlong用lld输出 x/i;除掉之后多余的数的到当前i的阶乘 return 0;long long factorialint number求任意整数阶乘函数 static long long y1;静态变量只赋一次初值以后函数调用会保留上一次的值 int i; for i1;inumber;i yy*i1;用循环求阶乘 return y;返回阶乘值验证与结论总结与心得体会局部静态变量会保留上一次运行的值,故在此题中只调用了一次函数.另外由于10以上阶乘数极大,声明类型时用了long long类型。实验题目7编程实现两个整形变量内容互换。用带参数的宏实现变量内容的交换。设计思想直接用带参数的宏充当函数来对两个整型变量交换。实验代码及注释include stdio.hdefine changex,y midx; xy; ymid 宏定义两个整形变量内容互换int main int x,y,mid; printf请输入xy的值n; scanfdd,x,y; changex,y;宏 printf替换后xy值dtd,x,y; return 0;验证与结论总结与心得体会带参数的宏可以充当函数来使用,由于宏不是语句,末尾不能加分号。宏对参数类型不做检查,是优点也是缺点,在使用时要注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值