c 课程设计实践报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c程序设计实践报告”。
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”,&capital,&years);switch(years){ case 1:sum=capital*pow(1+*,12);break;
case case 2:sum=capital*pow(1+*,24);break;3:sum=capital*pow(1+*,36);break;
case 4:sum=capital*pow(1+*,48);break;case 5:sum=capital*pow(1+*,60);break;case
case case 6:sum=capital*pow(1+*,72);break;7:sum=capital*pow(1+*,84);break;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”,&data1,&op,&data2);//输入
printf(“请输入运算符+、-、*、/”);// 打印 switch(op)//switch(){case stick:break;} 这个是个选择结构
如果 OP = stick 则执行这一句 如果没有 则执行 default 后面 的语句 { case '+':c=data1+data2;break;case
'-':c=data1-data2;break;
case case '*':c=data1*data2;break;'/':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;
do{c=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 求余”,用&转化。
(三)运算符:>是指右移一位,a 是指 b 向右移 a 位,左移一位相当于乘 2 右移 1 位相当于除 2(四)在交换时,用的是中间法
运行效果截图: 附源程序如下:#include “” void main(){ int i,j,s=1,a;printf(“请输入一个整数 i:”);scanf(“%d”,&i);for(j=0;j
printf(“%d”,(a>1)|(a>>3)|(a>>5)|(a>>7));}
题目五 题目描述:编写程序,抓交通肇事犯。一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没 有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相 同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位 数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索求 出车号。提示: ① 按照题目的要求,造出一个前两位数相同、后两位数相同且相互 间又不同的整数,然后判断该整数是否是另一个整数的平方。② 用穷举法解此题。穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特征。穷举法的关键是要确定穷 举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的 范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而 产生错误。
设计思路:
(一)11 11
到 11
在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);} } && b%100/10==b%10 &&
题目六 题 目 描 述 : 从 终 端 输 入 实 数 ex=1+x+x2/2!+x3/3!+?+xn/n!的值。设计思路: 先输入一个 x 的值;再设计一个子函数,计算 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
1 89
-3 101
(2)二维数组没有鞍点: 9 80 205 90-60 210 40 1 89
196
-3 101 7
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”,&m,&n);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 语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实习我也知道了自己的不足,存在的很多问题。比如自己写 的写的小程序出了问题,不会解决了就叫老师帮忙,但是会养成一种 依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以
以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身 边的时候也可以完成一些简单的程序编写与错误排除。还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破 口。通过实习,逐渐理清了顺序,对于简单的程序和一些相对比较繁 琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基 础知识掌握了,然后有条不紊的分析,一步一步理解,C 语言还是很 有意思的课程。自己亲自动手编写程序让我增加了对 C 语言程序开发环境的了 解,在上课的时候老师就讲,学习 C 语言最重要的是学习 C 语言的 逻辑思维,不管以后从事什么行业,学习 C 语言都对自己的职业很 有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的 编程工作可能不用 C 语言,但是拥有扎实的 C 语言基础是对工作很 有用的。当初在初步接触 C 语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!感谢学校安排这次实习和老师的耐心讲解,让我学到了很多知 识,在实习过程中,同学之间的相互探讨,老师的循循善诱,最终让 我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之 间的感情。希望以后还会有更多类似的实习课程,在有限的大学时间 内学到更多的实用技能,为以后的生活和工作打下一个良好的基础。
中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)题 目 理想世界 学生姓名 李杰 指导教师 邵自然 学 院 湘雅医学院 临床医学与医学技术专业班级 1105班学生......
北京理工大学珠海学院 C语言程序设计实践报告2014—2015学年第1学期学 院: 计算机学院 专业班级: 软件工程5班 学 号: ***6 学生姓名: 陈洪阳 指导教师: 戴俊雅 成......
一、课程设计的目的掌握电力系统潮流计算的基本原理。 掌握并熟练运用MATLAB仿真软件。采用MATLAB仿真软件,做出系统接线图的潮流计算仿真结果。二、课程设计要求1、在读懂程......
项目实践、设计与产品制作本专题实践是专为电气工程专业的高年级学生,进入专业学习前所进行的专题培训,目的是为了更好地使学生适应专业学习和毕业设计,重点培养同学们动手实践......
《市场营销课程设计》实践课实习报告一、过程概况1.登陆simmarketing软件后,我了解到公司的主营产品是护肤品,我需要在四个季度的销售过程中与同行业的四位竞争对手在市场中进......