C语言新手小白必看(上) -- PTA常见错误与解决方法

新手小白在做PTA上的题目时,提交以后常常出现有下面4种状态

"答案正确"说明你的代码通过了全部的测试点。下面就另外三种错误展开说一下:

(一)部分错误:说明你的代码只通过了一部分测试点。另一部分测试点没有通过。没有通过的原因通常有两种:(1)格式错误,(2)答案错误,如下图所示:

(1)格式错误:说明你没有按照题目给出的输出样例的格式进行输出。最常见的情况就是:输出样例中有空格的地方你的pringf语句中没有,或者输出样例里没空格的地方你在printf语句中多敲了空格。一定要严格按照题目的输出样例的格式,来写你的printf语句中双引号里面那些东西。输出样例中的固定文字,你就copy;输出样例中的变量,你就用对应的格式转换说明符占位,然后再后面的参数中,写上对应的变量就行。例如:

输出样例:cost = 55.00,这个55.00是你算出来的浮点数变量a的值,并且要求保留2位小数。

这时你的printf语句就应该写成 printf("cost = %.2f", a),特别注意,输出样例的等号两边有空格,你的printf语句中也要有。

至于浮点出保留几位小数,用%.n来可控制输出,要保留几位小数,把n换成几就行了。

(2)答案错误:说明你的计算本身错了,这个时候就找自己代码中的逻辑错误了。推荐你可以找一个正确的代码,比较以下别人的代码和你的代码的逻辑有哪些不同。当然这种错误是比较难找的,需要有有点耐心。

(二) 段错误:这种错误通常是和内存有关系的,比如输出时,变量前面没加地址符号,如scanf("%d", N);再有就是数组越界,也可能会出现段错误。

(三)编译错误:这也是新手最常见的错误,其实就是你的语法没写对,编译器编译不了。这种错误,教大家一个办法。看下图:

当出现编译错误时,下面一定会有提示。只要在错误提示中找到error,不用管warning。error前面的数字说明该错误是你的代码的第几行第几个字符出现的,^~~~~直接就给你标记出了错误开始的地方,重点看这个地方。例如图中代码第6行,本意是计算0.54*N的值,但是把*省略了。这种省略在数学上有这种写法,但是在C语言中没有。写成这样编译器不认识,所以就编译错误了。

还有很多的编译错误,比如语句末尾分号没有敲,英文符号敲成中文的了,小括号,花括号少敲另一个等等,都可以很快的通过这个方法找出来。

后面还会有一篇《C语言新手小白必看(下)》,我们会总结更多的新手写C语言源代码是容易出现的错误。

### PTA 身份证查验功能运行时错误解决方案 当遇到PTA平台上的身份证查验功能出现问题时,可以遵循一系列方法来排查并解决问题。确保代码逻辑清晰、结构合理以及输入输出格式正确是关键所在。 #### 1. 输入验证 确保输入的数据格式严格匹配题目要求。对于中国居民身份证号码而言,通常是一个由18位字符组成的字符串,其中可能包含字母X作为最后一位校验码[^1]。因此,在处理前应当先确认输入确实为长度为18的字符串,并且除了第十八位外其余部分均为数字: ```python def validate_id_length(id_number): if len(id_number) != 18 or not (id_number[:-1].isdigit() and id_number[-1].upper() in "0123456789X"): return False return True ``` #### 2. 数据预处理 针对可能出现的不同情况做适当转换,比如将大写字母统一转成小写或将特定符号替换为空格等操作。这里主要指的是如果存在旧版15位身份证号,则需按照一定规则扩展至标准的新版形式;而对于新版身份证则保持不变即可。 #### 3. 函数封装单元测试 为了避免程序复杂度增加带来的维护困难,建议采用模块化编程方式——即将核心算法独立出来形成单独的功能函数。这样做不仅有助于提高代码可读性和重用率,还能方便后续调试工作。例如实现一个用于计算给定日期对应星期几的小工具: ```python from datetime import datetime def get_weekday(year, month, day): try: date_obj = datetime.strptime(f"{year}-{month}-{day}", "%Y-%m-%d") weekday_name = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"][date_obj.weekday()] return f"The given date falls on a {weekday_name}." except ValueError as e: return str(e) ``` 此外,编写若干组简单的测试案例可以帮助快速定位潜在缺陷位置。通过不断调整直至所有预期结果均能正常返回,从而大大降低实际提交过程中遭遇意外状况的概率[^3]。 #### 4. 常见异常捕获 考虑到Python解释器可能会因为非法运算而抛出各种类型的RuntimeError,所以在执行具体业务之前最好能够提前预见这些风险因素并采取相应措施加以规避。像上述提到过的TypeError就是由于尝试对整型变量调用了本应属于对象的方法所引起的典型例子之一[^2]。为此可以在涉及数值计算的地方加入要的类型检查语句防止此类低级失误的发生: ```python import math def calculate_area(a, b, c): s = sum([a,b,c])/2 # Check input types are float/int before calculation to avoid TypeError inputs_are_valid_numbers = all(isinstance(x,(float,int)) for x in [a,b,c]) if not inputs_are_valid_numbers: raise TypeError('All sides must be numbers') area = math.sqrt(s*(s-a)*(s-b)*(s-c)) return round(area, 2) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值