C语言中使用for循环实现简单除法的代码运行问题
C语言中使用for循环实现简单除法的代码运行问题
嘿,我瞅了下你这段练手的C代码,这几个小坑应该就是你运行出问题的根源,咱们一个个掰扯清楚:
- 变量未初始化就瞎用:你定义了
float divisionEnd;但没给初始值,第一次进循环就直接把它塞去printf里输出,这时候它的内存里是随机的垃圾值,肯定不是你想要的除法结果。 - 循环体的执行顺序完全搞反了:你现在是先打印,再改除数,最后才计算除法——这就导致每次打印的要么是上一轮的结果,要么第一次就是垃圾值,完全错位了!正常逻辑应该是先算当前除数的除法结果,再打印,最后调整除数才对。
- 整数除法的隐形陷阱:
baseNum和divisor都是int类型,C语言里整数之间做除法会直接砍掉小数部分,哪怕你把结果赋值给float变量也没用。比如10/9会先得到int类型的1,再转成float的1.0,而不是你期待的1.111... - 除数为0的致命错误:按你现在的循环逻辑,最后一次循环(i=9)的时候,你会先把
divisor减到0,然后执行divisionEnd = baseNum / divisor;,这直接触发除0异常,程序会直接崩掉。
给你改好的代码,我加了注释方便你理解:
#include <stdio.h> int main(){ int baseNum = 10; int divisor = 10; // 先给浮点变量初始化,避免垃圾值 float divisionEnd = 0.0f; int i; // 循环9次,让除数从10降到1,避免出现0 for (i = 0; i < 9; i++) { // 强制把baseNum转成float,触发浮点数除法,保留小数 divisionEnd = (float)baseNum / divisor; // 先算好结果再打印,顺序才对 printf("%i by %i is %.3f\n", baseNum, divisor, divisionEnd); // 最后再调整除数 divisor = divisor - 1; } return 0; }
再补个小提醒:如果你就是想验证从10除到1的结果,循环9次就够了;要是非得碰除数0的情况,那得在计算除法之前加个判断,比如if(divisor == 0) break;,但除0本身是非法操作,实际开发里可千万别这么干哈。
内容来源于stack exchange




