You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言中使用for循环实现简单除法的代码运行问题

C语言中使用for循环实现简单除法的代码运行问题

嘿,我瞅了下你这段练手的C代码,这几个小坑应该就是你运行出问题的根源,咱们一个个掰扯清楚:

  • 变量未初始化就瞎用:你定义了float divisionEnd;但没给初始值,第一次进循环就直接把它塞去printf里输出,这时候它的内存里是随机的垃圾值,肯定不是你想要的除法结果。
  • 循环体的执行顺序完全搞反了:你现在是先打印,再改除数,最后才计算除法——这就导致每次打印的要么是上一轮的结果,要么第一次就是垃圾值,完全错位了!正常逻辑应该是先算当前除数的除法结果,再打印,最后调整除数才对。
  • 整数除法的隐形陷阱baseNumdivisor都是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

火山引擎 最新活动