关于PTA中C语言习题中的错情分析和知识点遗漏

学完浙大翁老师的课程之后,觉得自己已经初窥门径,遂跑到PTA刷题测试,结果发现自己不仅错漏百出,有一些东西也确实没有掌握彻底,一些特殊算法和编程思路也缺乏头绪,在边刷边学中,自己对相关知识点也有了更新的认识,记录如下。(只是初级C语言的一些体会)

1.关于判断语句中的==

判断语句中的相等判断,容易错写为=,则判断语句变为赋值语句,恒为真或者假,大部分情况下编译不会出错,所以需要自己在书写过程中加以注意。例如:

7-20简单计算器


7-39龟兔赛跑中就出现此类错误。


2.关于输入输出的格式控制符和类型匹配

PTA中的GCC编译器对于数据类型要求比较严格,在有些情况下,对double型数据用%f进行输入输出会出现测试数据错误,个别题目修改数据为float即通过;double输出为int时一定进行强制类型转换,或者%.0lf;注意scanf的特殊匹配字段用法。例如:

7-18日期转换


7-15厘米换英寸


7-18求组合数


课堂内容,scanf读入GPS识别码


3.double类型数据的临界值及相等判断

double类型不能进行==的判断,会发生不确定的情况,在对[a,b]闭区间的边界值进行判断时,只能采用差小于误差的方法,或者在二者开区间之外再与区间内的确定int值进行比较大小来确定。进行双向判断时,如(0.9,1.1),切记统一系数,改为(0.9,2-0.9),如果直接用0.9和1.1可能出现不确定错误。

7-40你是不是太胖了


7-65消除-0.0


4.循环中的赋初值和退出问题

尽量不要在循环中定义变量,这样会导致运行速度和效率的下降,但是在循环体外定义的变量,如果每次循环都要从新来过的话,一定不要忘记在循环体内进行赋初值的操作,否则该变量会持续参加每一次循环,导致错误;在嵌套循环中,注意break的跳出范围,需要多层break。例如:

7-31掉入陷阱的数字


6-4查找子串


7-38支票面额


5.关于取余取模

在%取余进行范围判断或者获取区间数的过程中,一定一定注意判断0值的存在。例如:

7-7后天问题


6.关于算法

对于预测和成长性问题,可以先模拟出初始一些状态的数据,从中找出数学规律进行编程。例如:7-27兔子繁衍问题即为斐波那契数列。

对于阶段变化的状态模拟,可以参考面向对象编程思路。例如:龟兔赛跑和蠕虫爬井和切分表达式。

对于问题抽象和反向思考,可以模拟手工算法。例如:7-42整除光棍。


7-64最长对称子串,把每个元素看做对称中心进行测试,然后遍历。


对于任意步数的模拟操作,可以简化为操作一步,然后循环。例如:7-52数组循环右移


7.最后一定一定看清楚题意,尤其注意输入输出的空格、回车、格式控制等要求,切记切记。

猜你喜欢

转载自blog.csdn.net/bawangtu/article/details/81050131