c++课程设计实践报告.doc_第1页
c++课程设计实践报告.doc_第2页
c++课程设计实践报告.doc_第3页
c++课程设计实践报告.doc_第4页
c++课程设计实践报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

c+课程设计实践报告 班级:83121 姓名:张弛 学号:xx1000491 题目一、题目描述:已知银行整存整取存款不同期限的月息利率(采用复利方式,即利滚利)分别为0.63%期限一年0.66%期限二年月息利率=0.69%期限三年 0.75%期限五年0.85%期限八年要求输入存钱的本金和期限(以整数年为单位),求到期时能从银行得到的利息与本金的合计。提示:可以用嵌套的if-else结构或switch结构实现,核心函数pow(1+月利率,月份)。请思考年份是四、六、七或八年以上的情况。 设计思路:(一)使用switch选择语句对应年份 (二)明确核心函数pow是计算复利的(例如:x的n次方);由于是以年为计算期限的,而所给的利率是月利率,所以计算时应该在年的基础上乘以12;(三)复利计算就是一种幂运算,I=p*(1+i)n,本金和利率都是变 动的(四)在除了1、2、3、5和8年之外的其他年份中,要注意“就低不就高”的原则,尤其是在8年之后,也是套用期限八年的利率。 附源程序如下:#include#includevoidmain()intyears;floatcapital,sum; scanf(%f%d,&capital,&years);switch(years)case1:sum=capital*pow(1+0.63*0.01,12);break;case2:sum=capital*pow(1+0.66*0.01,24);break;case3:sum=capital*pow(1+0.69*0.01,36);break; case4:sum=capital*pow(1+0.69*0.01,48);break; case5:sum=capital*pow(1+0.75*0.01,60);break;case6:sum=capital*pow(1+0.75*0.01,72);break;case7:sum=capital*pow(1+0.75*0.01,84);break;case8:sum=capital*pow(1+0.85*0.01,96);break;default:sum=capital*pow(1+0.85*0.01,12*years);printf(%f,sum); 题目二、题目描述:简单计算器。用switch语句编写一个程序计算表达式:data1opdata2的值。其中op为运算符+、-、*、/。 设计思路:(一)明确计算器是怎样进行计算的;(二)细节,比如很多地方需要分号,在遇到字符时,我们应该用,而不是“”;(三Switch语句主要用于多分支选择,此题有+、-、*、/,这就是选择。使用switch每个case对应+-*/符号程序涉及到至 少三个量,运算符op和两个数字;先让用户输入两个数字和运算符,两个数字的计算在后面的程序中用swith结构运行。运行效果截图: 附源程序如下:#includeintmain()floatdata1,data2,c; charop;printf(请输入表达式中两个数字data1和data2);/打印scanf(%f%c%f,&data1,&op,&data2);/输入 printf(请输入运算符+、-、*、/);/打印switch(op)/switch()casestick:break;这个是个选择结构 如果OP=stick则执行这一句如果没有则执行default后面的语句case+:c=data1+data2;break;case-:c=data1-data2;break;case*:c=data1*data2;break;case/:c=data1/data2;break;default:printf(输入错误);break;printf(%f,c);return0;题目三题目描述:编写程序,用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的根。提示:用do-while语句实现。 二分法的计算步骤:(1)准备计算f(x)在有根区间a,b端点处的值f(a),f(b)(2)二分计算f(x)在区间中点(a+b)/2处的值f(a+b)/2(3)判断若f(a+b)/2=0,则即是根,计算过程结束。否则,检测:A.若f(a+b)/2与f(a)异号,则根位于区间a,(a+b)/2内,这时以(a+b)/2代替b;B.若f(a+b)/2与f(a)同号,则根位于区间(a+b)/2,b内,这时以(a+b)/2代替a;反复执行步骤2和3,直到区间a,b长度缩小到允许的误差范围之内,此时中点(a+b)/2即为所求的根设计思路:(一)二分法是指在整个算法中,让计算值无限趋近于根的值,利用数学知识可知,当了两个点的结果异号时,函数的根就在这两个数之间,利用二分法可以无限的把根的范围缩小,直到可以确定为止;(二)do-while是循环语句,先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(真)时,返回重新执行循环语句,如此反复,直到表达式的值等于0(假)为止才结束。(三)Voidmain()是声明函数,并且是对主函数的声明。题目所给的范围是(-10,10),因此在声明函数中定义一个a和b来代替区间的范围,而用c来代指中间指也是最后的结果,在这个程序中a、b、c都是随着范围不断变化的变量。如果(-10,10)的范围过大, 就需要循环语句来缩小区间范围,即a=c或b=c。当函数值在(-10,10)中任意一点取得0时,就正是我们所要的结果。循环条件是当区间a和b的函数值小于精度0.01。运行效果截图: 附源程序如下:#includestdio.hfloatf(floatx)floaty;y=2*x*x*x-4*x*x+3*x-6;returny;voidmain()floata=-10,b=10,c; doc=f(a+b)/2);if(c=0)break;if(c*f(a)0)a=c;elseb=c;while(f(b)*f(a)0.01);/*解的精度为0.01*/printf(方程的解是:%f,c); 题目四题目描述:编写程序,给定一个整数i,请求出另一个整数j,使i和j在用8位二进制表示时互为逆序。例如:给定i=3时,应得到j=192(3的二进制为:00000011,192的二进制为11000000)。提示:十进制整数转换为二进制整数用“除2求余”法。二进制整数转换为十进制整数用“按权相加”法。 设计思路:(一)二进制整数转化为十进制整数用“按权相加”法(二)二十进制整数转化为二进制整数用“除2求余”,用&转化。 (三)运算符:是指右移一位,=结合时从右到左运算,其中aa是指b向右移a位,左移一位相当于乘2右移1位相当于除2(四)在交换时,用的是中间法 运行效果截图:附源程序如下:#includestdio.hvoidmain()inti,j,s=1,a8;printf(请输入一个整数i:);scanf(%d,&i);for(j=0;j8;j+,s=1)aj=i&s;printf(所得到的j为:); printf(%d,(a07)|(a15)|(a23)|(a31)|(a53)|(a65)|(a77); 题目五题目描述:编写程序,抓交通肇事犯。一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索求出车号。提示:按照题目的要求,造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。用穷举法解此题。穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特征。穷举法的关键是要确定穷举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而产生错误。 设计思路: (一)1111 到11 99 在 9911这样穷举 判断是否一个 数的平方则是将这个数开方 取整再取平方是否还是原来的数 (二)此题需要满足三个条件:前两个数相同,后两个数相同;前后两数分别不相同;这个数是一个整数的平方。需要每个条件都满足,if才为真。(三)主要思路是穷举。穷举是指在适当的范围内举出一个数。运行效果截图: 附源程序如下:#includevoidmain()inta,b;for(a=32;a=99;a+) b=a*a;if(b/1000=b%1000/100b%100!=(b/1000)*10+b%1000/100)printf(Thelicenseplateis:%d,b);&b%100/10=b%10& 题目六题目描述:从终端输入实数ex=1+x+x2/2!+x3/3!+?+xn/n!的值。设计思路:先输入一个x的值;再设计一个子函数,计算1!,2!,3!?n!的值;之后用sum函数,和pow函数处理分子,用累加的方式进行分子计算,并形成等式;最后输出结果。x,用递推法求 附源程序如下:#includestdio.hintf(intx,intn)inti,m=0;for(i=0;i for(i=0,s=0;f(x,i)0.001;i+)s+=f(x,i);printf(其结果为:%d,s); 题目七题目描述:打印出以下的杨辉三角形(要求打印出10行)。11112113311464115101051? 设计思路:(一)二维数组主要用于处理多行的问题,而且第一行在数组之中是第0行。(二)杨辉三角有一个明显的特点:每一行的最后一个数字与第一个数是相同的,此外,下(三)一行的第二个数是由上一行的第一个数和第二个数相加之和,以此类推。 定义指针是为了让整个程序不那么复杂。运行效果截图: 附源程序如下:#includeintmain(void)inta1010,(*p)10=a,i,j;for(i=0;i10;i+) *(*(p+i)+0)=1;*(*(p+i)+i)=1;for(i=2;i90123978792276929291902739190818225384.NYN #includestdio.hvoidmain() 设计思路:由于是对30个学生的数据进行输入与统计,所以建立二维数组,根据各位置的条件来定义其内容,第8个数据是字符型数据,所以另设一数组进行存储,最后在将数据整合输出。 附源程序如下:#includestdio.hvoidmain()inti,j,sum,flag,a307;printf(请输入30个考生的三科成绩:); for(i=0;i30;i+)ai0=i+1;for(sum=0,j=1;j90)flag=1;elseflag=0;ai4=sum;ai5=sum/3;if(flag=1)ai6=Y;elseai6=N; printf(NOMTENPHSUMV90);for(i=0;i30;i+)for(j=0;j6;j+)printf(%5d,aij);printf(%c,ai6); 题目十题目描述下面是一个5*5阶的螺旋方阵,试编程打印出此形式的n*n(n10)阶的方阵(顺时针旋进)。12345161718196152425207142322218131211109提示:用二维数组实现。 设计思路:定义一个n*n维数组存放该方阵,m为该方阵的圈数,一个大循环中嵌套了 四个小循环,每一圈为一个大循环,第一个小循环按顺序写出第一行的数,第二个小循环按顺序写出最后一列的数,第三个小循环按顺序写出最后一行的数,第四个小循环按顺序写出第一列的数,再进行第二次大循环,循环完毕后再进行循环输出数组中的n*n个数,该螺旋方阵就出来了。 附源程序如下:#includestdio.hvoidmain()inti,j,k=0,m,n,a1010;printf(请输入方阵行列数n(n=i+1;j-)k+;aji=k;for(i=0;i printf(%5d,aij);printf();附: 实习总结与心得体会 经过C语言实习,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。不过,通过几天的实习,逐渐积攒了一些经验,有些错误可以很快就看出来。这次实习有很大的收获,让我对C语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了浓厚的兴趣和更深层的认识。C语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实习我也知道了自己的不足,存在的很多问题。比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙

温馨提示

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

评论

0/150

提交评论