c课程设计实践报告

编辑:阿文时间:2020-05-24 10:13:08
c课程设计实践报告,求到期时能从银行得到的利息与本金的合计,设计思路一使用选择语句对应年份,所以计算时应该在年的基础上乘以三复利计算就是一种幂运算。

班级:83121

姓名:张弛

学号:xx1000491

题目一、 题目描述: 已知银行整存整取存款不同期限的月息利率(采用复利方式,即利滚利)分别为 % 期限一年 % 期限二年月息利率= % 期限三年

% 期限五年 % 期限八年要求输入存钱的本金和期限(以整数年为单位) ,求到期时能从银行得到的利息与本金的合计。 提示:可以用嵌套的 if-else 结构或 switch 结构实现,核心函数 pow(1+月利率,月份)。

请思考年份是

4,六年,七年或以上。

设计思路: (一)使用 switch 选择语句对应年份

(二)明确核心函数 pow 是计算复利的(例如:x 的 n 次方 ) ;由于是以年为计算期限的,而所给的利率是月利率,所以计算时应该在年的基础上乘以 12; (三)复利计算就是一种幂运算,i=p*(1+i)^n,本金和利率都是变

动的 (四)在除了 1、2、3、5 和 8 年之外的其他年份中,要注意“就低不就高”的原则,尤其是在 8 年之后,也是套用期限八年的利率。

附源程序如下: #include #include void main() printf("%f",sum); }

题目二、 题目描述: 简单计算器。用switch语句编写一个程序来计算data1 op data2的值。其中op是运算符+,-,*,/。

设计思路: (一)明确计算器是怎样进行计算的; (二) 细节, 比如很多地方需要分号, 在遇到字符时, 我们应该用 ‘’ , 而不是“” ; (三 switch 语句主要用于多分支选择,此题有+、-、*、/,这就是选择。使用switch每种情况对应一个+-* /符号程序,涉及

少三个量,运算符 op 和两个数字;先让用户输入两个数字和运算符, 两个数字的计算在后面的程序中用 swith 结构运行。 运行效果截图 :

附源程序如下:#include int main() 这个是个选择结构

如果 op = stick 则执行这一句如果没有则执行 default 后面的语句 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) void main() while(f(b)*f(a) 题目四题目描述:编写程序,给定一个整数 i,请求出另一个整数 j,使 i 和 j 在用 8 位二进制表示时互为逆序。

例如:给定 i=3 时,应得到 j=192(3 的二进制为:00000011,192 的二进制为 11000000) 。

提示: ① 十进制整数转换为二进制整数用“除 2 求余”法。 ② 二进制整数转换为十进制整数用“按权相加”法。

设计思路: (一)二进制整数转化为十进制整数用“按权相加”法 (二)二十进制整数转化为二进制整数用“除 2 求余” ,用&转化。

(三)运算符:>是指右移一位,a 是指 b 向右移 a 位, 左移一位相当于乘 2 右移 1 位相当于除 2 (四)在交换时,用的是中间法

运行效果截图: 附源程序如下:#include "" void main()

主题5主题描述:编写程序以捕获交通事故违法者。一辆卡车违反交通规则,撞人后逃走了。

现场有3名目击者,但他们不记得车号,只记得车号的一些特征。a说:车牌前两位相同;b说:

车牌的后两位数字是一样的,但不同与前两位;c是数学家,他说:车号的四位数字正好是一个整数的平方。根据以上线索找出车号。

提示: ① 按照题目的要求,造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。② 用穷举法解决这个问题。

穷举法是最简单、最常用的编程方法,它充分利用了计算机处理的高速性。穷举法的关键是要确定穷举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而产生错误。

设计思路:

(一)11 11

到 11

99在 99 11 这样穷举

判断是否一个

数字的平方就是数字的平方

取整再取平方是否还是原来的数

(二)此题需要满足三个条件:①前两个数相同,后两个数相同;② 前后两数分别不相同;③这个数是一个整数的平方。需要每个条件都满足,if 才为真。

(三)主要思路是穷举。穷竭是指给出一个在适当范围内的数字。 运行效果截图 :

附源程序如下: #include void main() 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() for(i=0;i

a=%d",maxh,maxl,a); }

题目9题目描述:一个班的期末考试科目是高数学、英语、物理,共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() 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() for (j=i+1;j=i;j--) for (j=n-i-2;j>=i+1;j--) } for (i=0;i

printf("%5d", a); printf附:

实习总结与心得体会

经过 c 语言实习,让我加深了对 c 语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。但是,通过几天的实践,逐渐积累了一些经验,一些错误很快就可以看出。 这次实习有很大的收获,让我对 c 语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。

如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对 c 语言有了浓厚的兴趣和更深层的认识。 c 语言是一个有序的学习, 学了最基本的替换, 然后扩展到循环, 嵌套, 条理很清楚, 不是一个零散的知识, 实际上所有的课程都如此, 不过通过实习我也知道了自己的不足,存在的很多问题。比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙,但是会养成一种依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以

以后要多多锻炼自己的信心和增加自己的能力, 争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。 还有自己的基础知识不扎实, 遇到的问题, 没有很好的逻辑思维, 亲自编写一个陌生的程序的时候会有种无法下手的感觉, 找不到突破口。通过实践,我们逐步理清了顺序。对于简单的程序和一些相对繁琐的嵌套和循环,我们并不感到困惑。

其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,c 语言还是很有意思的课程。 自己亲自动手编写程序让我增加了对 c 语言程序开发环境的了解,在上课的时候老师就讲,学习 c 语言最重要的是学习 c 语言的逻辑思维,不管以后从事什么行业,学习 c 语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用 c 语言,但是拥有扎实的 c 语言基础是对工作很有用的。 当初在初步接触 c 语言的时候,看着一堆“奇形怪状”的符号, 觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!

感谢学校安排这次实习和老师的耐心讲解,让我学到了很多知识,在实习过程中,同学之间的相互**,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之间的感情。希望以后还会有更多类似的实习课程,在有限的大学时间内学到更多的实用技能,为以后的生活和工作打下一个良好的基础。