C博客作业01--分支、顺序结构
1.本章学习总结
1.1 思维导图
1.2 本章学习体会及代码量学习体会
1.2.1 学习体会
由于暑假有刷一部分PTA所以对于目前C语言的学习还算轻松,但是在上课时发现还存在很多盲点,比如驼峰命名法以及浮点误差等一系列问题,其中驼峰命名法让我明白写代码不仅是为自己也是为了让后来者方便阅读,体现程序严谨简洁的重要性。在大学第一次接触课堂派,在课上即使反馈效果显著。C语言所需要的思维逻辑和平时有些许不同,刚开始感到陌生,这需要通过多次实践才能训练出来,学习编程最重要的便是实践,以及观看他人的算法总结套路才是制胜的关键。
难点:浮点运算,例如判断两个浮点数是否相等,可以fabs(a-b) <= 1e-6,还有变量类型的区别。
1.2.2 代码量
2.PTA总分
2.1截图PTA中顺序结构、分支结构的排名得分
2.2 我的总分:
PTA总分:225分
3.PTA实验作业
3.1 PTA题目1
实验3-1-if-else 求一元二次方程的根
本题目要求一元二次方程的根,结果保留2位小数。
根据系数情况,输出不同结果:
1.如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2.如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3.如果方程只有一个根,则直接输出此根;
4.如果系数都为0,则输出"Zero Equation";
5.如果a和b为0,c不为0,则输出"Not An Equation"。
3.1.1 算法分析
1.定义double一元二次方程系数a,b,c以及对称轴axis,判别式delta,虚部imaginary。
2.输入在一行中给出3个浮点系数a、b、c,中间用空格分开。
3.先从简单的下手,分别列出a=b=c=0以及a=b=0和a=0的特殊情况,其中a=0即线性函数求解。
4.再分三种情况分别是判别式大于零等于零小于零。
5.用求根公式求根。
6.按格式输出结果。
3.1.2 代码
3.1.3 测试数据
3.1.4 PTA提交列表及说明
-
Q1:如何得到一元二次方程的复数根?
A1:Δ=b²-4ac<0,x=[-b±根号下-(b²-4ac)i]/2a(通过浏览器搜索)
-
Q2:当存在纯虚数时,答案错误。
A2:通过编译器查看发现当b=0时,即实数部为零,但是再最开始给axis赋值时带有负号,并且当结果为零时输出-0,所以单独把零的情况调出。
-
Q3:刚开始忘记考虑a=0的情况,一直部分正确
A3:学习编程最重要的就是清晰的思路,看到题目就下手会大大降低效率,把所有情况考虑清楚。
3.2 PTA题目2
实验2-2-9-if-else/输入输出格式化控制 计算火车运行时间
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。假设出发和到达在同一天内。
3.2.1 算法分析
方法一(下列代码采用此方法)
1.定义int 出发时间time1,到达时间time2,出发时间小时部分hour1,到达时间小时部分hour2,出发时间分钟部分minute1,到达时间分钟部分minute2,小时时差hDifference,分钟时差mDifference;
2.输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59)。
3.通过取千位和万位得到小时部分,再通过取余取分钟部分。
4.小时部分和分钟部分分别相减
方法二
主要算法是通过将小时部分化为分钟,再相减,最后转化成标准小时分钟时差,起先是采用这种方法,但是算法复杂遂采用上例。
.2.2 代码
3.2.3 测试数据
3.2.4 PTA提交列表及说明
-
Q1:清楚解决时间错位问题
A1:算分钟时差,倘若分钟为负数则,则加上60补齐,同时小时部分减1。
-
Q2:如小时或者分钟不足两位数,如何补零。
A2:这里写题时也不是很明白只是照着网上模仿,看来书才知道要加宽度限定词,指定数据的输出宽度,但是如整形输出控制说明%md指定输出宽度为m(包括符号位),实际位数小于m,则左端补空格,如果为%0md则补齐0。
-
Q3:为什么答案正确后还有编译错误
A3: 因为当时没用采用驼峰命名法。。。
3.3 PTA题目3
C练习–第一章顺序结构练习
IT协会举办程序设计竞赛,准备购买U盘作奖品。请编写程序,根据活动经费和U盘单价预估可购买U盘的最大数量。
3.3.1 算法分析
1. 定义活动经费money(double),U盘单价price(double)、可购数量number(int)。
2. 输入经费和U盘单价。
3. 计算number,取整输出。
3.3.2 代码截图
3.3.3 测试数据
3.3.4 PTA提交列表及说明
-
Q1:刚开始输入660.8和47.2输出少了一。
A2:浮点误差的存在,十进制的浮点数在二进制中是无限循环,所以在+1e-6刚好补齐进一。
-
Q2:以为是四舍五入的问题。
A2:算能买几支笔不存在四舍五入,而是直接取整,这里用%d即取整,如果用%.0f将四舍五入。
-
Q3:最后我试用了很多方法依旧部分正确,编译出现的数字也是不明白。老师讲后试用了除1e-6以外的数字发现有错
A3:不同数精度不一样,如float可以保留小数点后六位,超过限度数值出现偏差,double精度更广,所以一半以1e-6为宜。