你是不是不也碰过这种时候?做 C 语言课后习题,翻遍书后的附录、搜遍网页都找不到答案,对着题目抓耳挠腮,不知道自己写的对不对。其实啊,找不到答案也不用慌,关键是学会自己分析题目、找出错误。兔子哥今天就教你几招,就算没有标准答案,也能把习题搞定,还会总结那些容易踩的坑,一起往下看吧!
基础语法题:自己验证答案的小技巧
就拿 “用 printf 输出各种格式的数据” 这道题来说,很多教材都有,但答案不一定详细。比如题目要求 “输出一个整数、一个小数、一个字符,中间用逗号隔开”。
你可以先自己写代码:
int a = 10;
float b = 3.14;
char c = 'A';
printf ("% d,% f,% c", a, b, c);
运行之后看看结果对不对,如果整数输出成了乱码,可能是把 % d 写成了 % f;如果小数后面带了一串零,那是正常的,% f 默认保留六位小数,想改的话可以写成 %.2f 保留两位。
这种题不用非得找答案,自己多试几次,看看输出结果和预期一样不一样,一样的话基本就对了。易错点主要是格式符用错,这里有个小表格帮你记:
| 数据类型 | 格式符 | 常见错误格式符 |
|---|---|---|
| int | %d | %f、%c |
| float | %f | %d |
| char | %c | % d(会输出 ASCII 值) |
循环结构题:画流程图帮你理清思路
“用 while 循环计算 1 到 10 的乘积” 这道题,找不到答案的话,很容易在循环条件和累加方式上出错。
有个同学写的代码是这样的:
int i = 1, product = 0;
while (i <= 10)
{
product = product * i;
i++;
}
printf ("% d", product);
运行结果是 0,显然不对。问题出在哪?哦,乘积的初始值设成 0 了,任何数乘以 0 都是 0,应该设成 1 才对。
这种时候,画个流程图特别管用:先写开始,然后是初始化 i=1、product=1,接着判断 i 是否小于等于 10,是就计算乘积、i 加 1,不是就输出结果。一步步画下来,哪步错了一眼就能看出来。
易错点总结:
- 循环初始值设置错误,比如乘积设 0、和设 1
- 循环条件写反,比如把 i <= 10 写成 i>= 10
- 忘记在循环里更新变量,导致死循环
数组操作题:打印中间结果排查错误
“将数组中的元素逆序存放” 这道题,找不到答案时,很多人会在交换次数上出错。比如数组有 5 个元素,有人会循环 5 次,其实只需要循环 2 次(5/2)就行。
代码可以这样写,并且打印中间结果:
int arr [5] = {1,2,3,4,5};
int i, temp;
for (i=0; i<5/2; i++)
{
temp = arr [i];
arr [i] = arr [4-i];
arr [4-i] = temp;
printf ("第 % d 次交换后:% d,% d,% d,% d,% d\n", i+1, arr [0], arr [1], arr [2], arr [3], arr [4]);
}
通过打印每次交换后的结果,你就能知道交换是否正确。如果发现最后一个元素没换过来,可能是下标算错了,比如把 4-i 写成了 5-i。
有人可能会问,找不到答案的话,怎么确定自己写的是最优解呢?其实刚开始不用追求最优,先保证能运行、结果正确就行。等熟练了,再想办法优化,比如减少循环次数、少用变量。
还有同学说,有时候代码能运行,但结果不对,该怎么办?这时候可以用 “分段测试” 的方法,把代码分成几部分,一部分一部分测试。比如计算斐波那契数列,先测试前 5 项对不对,再测试前 10 项,哪里出错了就重点查哪里。
兔子哥觉得,找不到答案反而是好事,能逼着你自己动脑筋、想办法。刚开始可能慢一点,但练多了,你会发现自己分析问题、解决问题的能力越来越强。那些易错点,记在本子上,下次做题前翻一翻,能少走很多弯路。你要是哪道题卡壳了,按我说的方法试试,说不定就解开了。实在不行,找兔子哥聊聊,咱们一起想办法。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~