




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c+课程设计实践报告 班级:83121 姓名:张弛 学号:XX1000491 题目一、 题目描述: 已知银行整存整取存款不同期 限的月息利率(采用复利 方式,即利滚利)分别为 % 期限 一年 % 期限二年 月息利率= % 期限三年 % 期限五年 % 期限八年 要求输入存钱的本金和期限 (以整数年为单位) ,求到期时能从银行 得到的利息与本 金的合计。 提示:可以用嵌套的 if-else 结构或 switch 结构实现,核心函数 pow(1+月利率,月份)。 请思考年份 是四、六、七或八年以上的情况。 设计思路: (一)使用 switch 选择语句 对应年份 (二)明确核心函数 pow 是计算复利的(例如:x 的 n 次方 ) ;由于 是以年为计算期限的,而所给的利率是月利 率,所以计算时 应该在年的基础上乘以 12; (三)复利计 算就是一种幂运算,I=p*(1+i)n,本金和利率都是变 动的 (四)在除了 1、2、3、5 和 8 年之外的其他年 份中,要注意“就低 不就高”的原则,尤其是在 8 年之 后,也是套用期限八年的利率。 附源程序如下: #include #include void main() int years; float capital,sum; scanf(“%f %d“, switch(years) case 1:sum=capital*pow(1+*,12);break; case 2:sum=capital*pow(1+*,24);break; case 3:sum=capital*pow(1+*,36);break; case 4:sum=capital*pow(1+*,48);break; case 5:sum=capital*pow(1+*,60);break; case 6:sum=capital*pow(1+*,72);break; case 7:sum=capital*pow(1+*,84);break; case 8:sum=capital*pow(1+*,96);break; default:sum=capital*pow(1+*,12*years); printf(“%f“,sum); 题目二、 题目描述: 简单计算器。用 switch 语句 编写一个程序计算表达式: data1 op data2 的值。其中 op 为运算符+、-、*、/。 设计思路: (一)明确计算器是怎样进行计算的; (二) 细节, 比如很多地方需要分号, 在遇到字符时, 我们应 该用 , 而不是“” ; (三 Switch 语句主要用于多 分支选择,此题有+、-、*、/,这就是 选择。使用 switch 每个 case 对应+ - * /符号 程序涉及到至 少三个量,运算符 op 和两个数字;先让用户输入两个 数字和运算符, 两个数字的计算在后面的程序中用 swith 结构运行。 运 行 效 果 截 图 : 附源程序如下:#include int main() float data1,data2,c; char op; printf(“请输入表达式中两个数字 data1 和 data2“); /打印 scanf(“%f%c%f“, /输入 printf(“请输入运算符+、-、*、/“);/ 打印 switch(op) /switch ()case stick: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); return 0; 题目三 题目描 述:编写程序,用二分法求方程 2x3-4x2+3x-6=0 在(- 10,10) 之间的根。 提示: 用 do-while 语句实现。 二分法的计算步骤: (1) 准备 计算 f(x)在有根 区间端点处的值 f(a),f(b) (2) 二分 计算 f(x)在区间 中点(a+b)/2 处的值 f (3) 判断若 f=0,则即是根,计算 过程结束。 否则,检测: A. 若 f 与 f(a)异号, 则根位 于区间内, 这时以(a+b)/2 代替 b; B. 若 f 与 f(a)同号, 则根位于区间内, 这时以(a+b)/2 代替 a; 反复执行步 骤 2 和 3,直到区间长度缩小到允许的误差范围之 内, 此时中点(a+b)/2 即为所求的根 设计思路: (一)二分法 是指在整个算法中,让计算值无限趋近于根的值,利用 数 学知识可知,当了两个点的结果异号时,函数的根就在这 两个数之 间,利用二分法可以无限的把根的范围缩小,直 到可以确定为止; (二)do-while 是循环语句,先执行一次 指定的循环体语句,然后 判别表达式, 当表达式的值为 非零 (真) 时, 返回重新执行循环语句, 如此反复,直 到表达式的值等于 0(假)为止才结束。 (三)Void main() 是声明函数,并且是对主函数的声明。题目所 给的范围是 (-10,10) ,因此在声明函数中定义一个 a 和 b 来代替 区 间的范围,而用 c 来代指中间指也是最后的结果,在 这个程序中 a、 b、c 都是随着范围不断变化的变量。如 果(-10,10)的范围过大, 就需要循环语句来缩小区间范围, 即 a=c 或 b=c。 当函数值在 (-10,10) 中任意一点取得 0 时,就正是我们 所要的结果。循环条件是当区间 a 和 b 的函数值小于精 度 。 运行效果截图: 附源程序如下: #include “ float f(float x) float y; y=2*x*x*x-4*x*x+3*x-6; return y; void main() float a=-10,b=10,c; doc=f(a+b)/2); if(c=0) break; if(c*f(a)0) a=c; else b=c; while(f(b)*f(a) 题目四 题目描述: 编写程序,给定一个整数 i,请求出另一个整数 j,使 i 和 j 在用 8 位二进制表示时互为逆序。例如:给定 i=3 时,应得到 j=192(3 的二进制为:00000011,192 的二进 制为 11000000) 。 提示: 十进制整数转换为二进制 整数用“除 2 求余”法。 二进制整数转换为十进制整 数用“按权相加”法。 设计思路: (一)二进制整数转化为十进制整数用“按 权相加”法 (二)二十进制整数转化为二进制整数用“除 2 求余” ,用 printf(“请输入一个整数 i:“); scanf(“%d“, for(j=0;j printf(“%d“,(a1) | (a3) | (a5) | (a7); 题目五 题目描述:编写程序,抓交通肇事犯。 一辆 卡车违反交通规则,撞人后逃跑。现场有三人目击事件, 但都没 有记住车号,只记下车号的一些特征。甲说:牌照 的前两位数字是相 同的;乙说:牌照的后两位数字是相同 的,但与前两位不同;丙是位 数学家,他说:四位的车号 刚好是一个整数的平方。根据以上线索求 出车号。 提示: 按照题目的要求,造出一个前两位数相同、后两位数 相同且相互 间又不同的整数,然后判断该整数是否是另一 个整数的平方。 用穷举法解此题。穷举法是最简单、 最常见的一种程序设计方法, 它充分利用了计算机处理的 高速特征。穷举法的关键是要确定穷 举的范围,既不能过 分扩大穷举的范围,也不能过分缩小穷举的 范围,否则程 序的运行效率会很低,或有可能遗漏正确的结果而 产生错 误。 设计思路: (一)11 11 到 11 99 在 99 11 这样 穷举 判断是否一个 数的平方 则是 将这个数开方 取整 再取平方 是否还是原来的数 (二)此题需要满足三个条件:前两个数相同,后两 个数相同; 前后两数分别不相同;这个数是一个整数的 平方。需要每个条件都 满足,if 才为真。 (三)主要思路 是穷举。穷举是指在适当的范围内举出一个数。 运 行 效 果 截 图 : 附源程序如下: #include void main() int a,b; for(a=32;a b=a*a; if(b/1000=b%1000/100 b%100!=(b/1000)*10+b%1000/100) printf(“The license plate is:%d“,b); 再设计一个子函数, 计算 1! , 2! , 3! ?n! 的值;之后用 sum 函数,和 pow 函数处理分子,用累 加的方式进行分 子计算,并形成等式;最后输出结果。 x , 用 递 推 法 求 附源程序如下:#include “ int f(int x,int n) int i,m=0; for(i=0;i for(i=0,s=0;f(x,i) 题目七 题目描述:打印出以 下的杨辉三角形(要求打印出 10 行) 。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 ? ? ? 设计思路: (一)二维数组主要用于处理多行的问题, 而且第一行在数组之中是 第 0 行。 (二)杨辉三角有一个 明显的特点:每一行的最后一个数字与第一个 数是相同的, 此外,下 (三)一行的第二个数是由上一行的第一个数和第 二个数相加之和, 以此类推。 定义指针是为了让整个程序不那么复杂。 运行效果截 图: 附源程序如下: #include int main(void) int a,(*p)=a,i,j; for(i=0;i *(*(p+i)+0)=1; *(*(p+i)+i)=1; for(i=2;i 题目八 题目描述:找出 一个二维数组的“鞍点” ,即该位置上的元素在该行 上 最大,在该列上最小。 提示: 一个二维数组可能有鞍 点也可能没有鞍点,若有鞍点,则只有一 个。 准备两组测试数据: (1) 二维数组有鞍点: 9 80 205 90 -60 210 40 96 1 89 -3 101 (2) 二维数组没有鞍点: 9 80 205 90 -60 210 40 1 89 196 -3 101 7 45 54 156 用 scanf 函数从键盘输入数组各元素的值,检查结 果是否正确。如 果已指定了数组的行数和列数,可以在程 序中对数组元素赋初值,而 不必用 scanf 函数。请同学 们修改程序以实现之。 设计思路: (一) 先找出一行中值最大的元素,然后 看它是不是该列中的最小值,由于 一个二维数组最多有一 个鞍点,所以如果是则鞍点存在且它就是鞍 点,输出该鞍 点;如果不是,则再找下一行的最 大数,以此类推。如果每 一行的最大数都不是鞍点,则此数组无鞍点 (二) 在程序 中,先令 a 最大赋值给 maxi,在 for 循环的比较中,把 符合条件的行的最大值赋给 maxi,将每一次比较后的 最大的列数赋 值给 maxj,从而找出 i 行最大的那个。 再假设那个数就是鞍点,将最大数和同列的数值相比,如 果 maxj 不 是最小的,则不是鞍点,继续找。 (三)引入 一个参数 flag=1,若不存在鞍点则 flag 为 0,若存在鞍 点则 flag 依旧为 1 运行效果截图: 附源程序如下:#include “ #define S 80 #define T 80 void main() int m,n,i,j,t,maxh,maxl,flag,a; printf(“请输入二维数组的行数 m 和列数 n:“); scanf(“%d %d“, printf(“请输入二维数组的各个 元素:“); for(i=0;ia) t=a;maxh=i;maxl=j; for(i=0;i a=%d“,maxh,maxl,a); 题目九 题目描述:某班期终考试科目为高数 MT、英 语 EN 和物理 PH,有 30 个人参加考试。为评定奖学金,要求统计并输出一个 表格,表格内容 包括学好、各科分属、总分和平均分,并 标出 3 门课均在 90 分以上 者(该栏标志输出为 Y,否则 为 N) ,表格形式如下: NO MT EN PH SUM V 90 1 2 3 97 87 92 276 92 92 91 90 273 91 90 81 82 253 84 N Y N #include “ void main() 设计思路:由于是对 30 个学生的数据进行输入与统 计,所以建立二 维数组, 根据各位置的条件来定义其内 容, 第 8 个数据是字符型数据, 所以另设一数组进行存 储,最后在将数据整合输出。 附源程序如下:#include “ void main() int i,j,sum,flag,a; printf(“请输入 30 个考生的三科成绩: “); for(i=0;i90) flag=1; else flag=0; a=sum; a=sum/3; if(flag=1) a=Y; else a=N; printf(“NO MT EN PH SUM V 90 “); for(i=0;i 题目十 题目描述下面是一个 5*5 阶的螺旋方阵,试 编程打印出此形式的 n*n (n 设计思路:定义一个 n*n 维数组存放该方阵,m 为该方阵的圈数,一个大循环中嵌 套了 四个小循环,每一圈为一个大循环,第一个小循环按 顺序写出第一行的数,第二个小循环按 顺序写出最后一列 的数, 第三个小循环按顺序写出最后一行的数, 第四个 小循环按顺序写出 第一列的数,再进行第二次大循环,循 环完毕后再进行循环输出数组中的 n*n 个数,该螺旋 方 阵就出来了。 附源程序如下: #include “ void main() int i, j, k = 0, m, n,a; printf(“请输入方阵行列数 n(n k+; a=k; for (j=i+1;j=i;j-) k+; a =k; for (j=n-i-2;j=i+1;j-) k+; a=k; for (i=0;i printf(“%5d“, a); printf(“); 附: 实习总结与心得体会 经过 C 语言实习,让我加深了对 C 语言的了解,而 不只是单单 的在课本中学到的那些理论,平时乏味的课程, 通过自己动手亲自编 写,变的生动有趣,而在自己动手的 过程中,出现的问题很多,比理 论要难的多,当一个程序 写完以后,经常会有很多错误而没法解决。 不过,通过几 天的实习,逐渐积攒了一些经验,有些错误可以很快就 看 出来。 这次实习有很大的收获,让我对 C 语言有了更深 的认识,平时 在课堂上学到的东西可以自己动手编写,将 其转化成一些实用的技 能。如果是一个程序写完一处错误 也没有,会有种成就感,于是兴趣 就来了,兴趣来了,自 然学的东西也就多了,能把理论变成实际的技 能,让我对 C 语言有了浓厚的兴趣和更深层的认识。 C 语言是一个有 序的学习, 学了最基本的替换, 然后扩展到循环, 嵌套, 条理很清楚, 不是一个零散的知识, 实际上所有的课程 都如此, 不过通过实习我也
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电视台主持人口试指南预测试题及答案解读
- 电仪安全基础知识培训
- 2025年仓库安全员必-备知识面试模拟题及答案
- 赫初可颜眼部护理误区
- 制作风筝教学课件
- 信息化交流教学课件
- 田径安全知识培训内容课件
- 单词教学主题课件下载
- 贵州省毕节市2024-2025学年高二下学期期末考试化学试题(含答案)
- 新解读《GB-T 18916.37 - 2018取水定额 第37部分:湿法磷酸》
- 校服供货方案及安排
- 《献给阿尔吉侬的花束》读书分享
- 商用汽车金融方案
- 预拌混凝土试验室作业指导书(完整版)
- 神经根型腰椎病课件
- 反向开票政策解读课件
- (完整版)康复诊疗指南及规范
- 五年级下册黑布林英语阅读10篇
- 检验标本采集手册
- 浪潮集团在线测评题
- 2024-2025学年人教版八年级上册数学 期末综合能力测评卷
评论
0/150
提交评论