2019年c++课程设计实践报告

上传人:明*** 文档编号:99131203 上传时间:2019-09-17 格式:DOC 页数:11 大小:107.55KB
返回 下载 相关 举报
2019年c++课程设计实践报告_第1页
第1页 / 共11页
2019年c++课程设计实践报告_第2页
第2页 / 共11页
2019年c++课程设计实践报告_第3页
第3页 / 共11页
2019年c++课程设计实践报告_第4页
第4页 / 共11页
2019年c++课程设计实践报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《2019年c++课程设计实践报告》由会员分享,可在线阅读,更多相关《2019年c++课程设计实践报告(11页珍藏版)》请在金锄头文库上搜索。

1、c+课程设计实践报告 班级:83121 姓名:张弛 学号:20XX1000491 题目一、题目描述:已知银行整存整取存款不同期限的月息利率(采用复利方式,即利滚利)分别为0.63%期限一年0.66%期限二年月息利率=0.69%期限三年 0.75%期限五年0.85%期限八年要求输入存钱的本金和期限(以整数年为单位),求到期时能从银行得到的利息与本金的合计。提示:可以用嵌套的if-else结构或switch结构实现,核心函数pow(1+月利率,月份)。请思考年份是四、六、七或八年以上的情况。 设计思路:(一)使用switch选择语句对应年份 (二)明确核心函数pow是计算复利的(例如:x的n次方)

2、;由于是以年为计算期限的,而所给的利率是月利率,所以计算时应该在年的基础上乘以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=capit

3、al*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;defau

4、lt:sum=capital*pow(1+0.85*0.01,12*years);printf(%f,sum); 题目二、题目描述:简单计算器。用switch语句编写一个程序计算表达式:data1opdata2的值。其中op为运算符+、-、*、/。 设计思路:(一)明确计算器是怎样进行计算的;(二)细节,比如很多地方需要分号,在遇到字符时,我们应该用,而不是“”;(三Switch语句主要用于多分支选择,此题有+、-、*、/,这就是选择。使用switch每个case对应+-*/符号程序涉及到至 少三个量,运算符op和两个数字;先让用户输入两个数字和运算符,两个数字的计算在后面的程序中用swith

5、结构运行。运行效果截图: 附源程序如下:#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=da

6、ta1*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)/

7、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(假)为止才结束。(三

8、)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(

9、)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求余”法。二进制整数转换为十进制整数用“按权相加”法。 设计思路:(一)二进制整数转化为十进制整数用“按权

10、相加”法(二)二十进制整数转化为二进制整数用“除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); 题目五题目描述:编写程序,抓交

11、通肇事犯。一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索求出车号。提示:按照题目的要求,造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。用穷举法解此题。穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特征。穷举法的关键是要确定穷举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而

12、产生错误。 设计思路: (一)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(Thelicensepl

13、ateis:%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); 题目七题目描述:打印出以下的杨辉三角形(要求打

14、印出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;i10;i+)for(j=1;j 题目八题目描述:

15、找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。提示:一个二维数组可能有鞍点也可能没有鞍点,若有鞍点,则只有一个。 准备两组测试数据:(1)二维数组有鞍点:98020590-6021040 96189 -3101 (2)二维数组没有鞍点:98020590-6021040189 196 -31017 4554156 用scanf函数从键盘输入数组各元素的值,检查结果是否正确。如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请同学们修改程序以实现之。 设计思路:(一)先找出一行中值最大的元素,然后看它是不是该列中的最小值,由于一个二维数组最多有一个鞍点,所

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号