关于实验楼给出的一个小程序里面除法永远结果都为0的探索
2016-09-27 22:12
363 查看
首先针对代码设置断点调试了一下。
从下图进入div.c调试的时候可以看出,%lf,也就是double类型的除数输出是0,但是%d,也就是整数除数是正确的结果。
怀疑是由于类型转换的原因,于是我就增加了一行强制转换类型的代码:
可以看出,这一次在函数内部单步调试的时候,强制转换后除的结果并不为0,但是在main函数里的输出结果依旧是0!
这就很奇怪了,我明明把div.c中
难道是因为链接出了问题吗?这不科学……我尝试着把所有函数移到了主函数里:
WHAT!!!!为什么这次又可以了!而且很奇怪的是之前单步运行的时候在函数中不加类型转换直接a/b的话得出的值是0,但是这次
单步调试之后更加茫然……
1.main.c中缺少之前定义的head.h头文件,就是因为在编程的时候也没有加,因此才会在编译的时候出现一堆隐式函数声明的警告。
2.在编译运行多个c文件组成的代码时,一定要记得加上
二、对程序除法的优化
1.从这次的程序本身的角度来看,有一个可以改进的地方,我们得到的除法值是整除的值,但是我们更期待能精确到小数。
2.return a/b的时候,因为a和b都是int型的,所以先得出a/b的整除值,然后进行反回,由于div是double型的所以把整除值转换为double类型,举例来说,如果是5/4,由于整除结果为1,输出就只能得到1.000000。
3.有两个方法可以解决这个问题,
(1)将返回改为:
(2)将返回改为:
从下图进入div.c调试的时候可以看出,%lf,也就是double类型的除数输出是0,但是%d,也就是整数除数是正确的结果。
怀疑是由于类型转换的原因,于是我就增加了一行强制转换类型的代码:
(double)a/(double)b
可以看出,这一次在函数内部单步调试的时候,强制转换后除的结果并不为0,但是在main函数里的输出结果依旧是0!
这就很奇怪了,我明明把div.c中
return a/b改成了
return (double)a/(double)b,为什么main中还是得不出正确结果?
难道是因为链接出了问题吗?这不科学……我尝试着把所有函数移到了主函数里:
WHAT!!!!为什么这次又可以了!而且很奇怪的是之前单步运行的时候在函数中不加类型转换直接a/b的话得出的值是0,但是这次
return a/b得出的值却是正确的。。。
单步调试之后更加茫然……
问题已解决,谢谢各位
http://group.cnblogs.com/topic/75520.html总结
一、程序程序除法结果为0的根本原因1.main.c中缺少之前定义的head.h头文件,就是因为在编程的时候也没有加,因此才会在编译的时候出现一堆隐式函数声明的警告。
2.在编译运行多个c文件组成的代码时,一定要记得加上
include "xxx.h",将程序链接起来,否则就会出现很多不必要的麻烦。
二、对程序除法的优化
1.从这次的程序本身的角度来看,有一个可以改进的地方,我们得到的除法值是整除的值,但是我们更期待能精确到小数。
2.return a/b的时候,因为a和b都是int型的,所以先得出a/b的整除值,然后进行反回,由于div是double型的所以把整除值转换为double类型,举例来说,如果是5/4,由于整除结果为1,输出就只能得到1.000000。
3.有两个方法可以解决这个问题,
(1)将返回改为:
return (a+0.0)/(b+0.0);就可以得到精确的值,这是因为当小数参加运算会转成double型。
(2)将返回改为:
return (double)a/(double)b;通过强制类型转换,实现double型运算。
相关文章推荐
- 关于用java创建一个.properties文件,程序结果为空的问题
- 关于,VS2010 里面 一个解决方案包含多个win32程序,调试的问题~~~happy
- Java入门学习-学会try/catch/throw的用法。做出一个计算器除法功能,除以0时程序必须给出提示。
- 关于继承的一个小程序
- 经过测试的 可以使用的远程注入代码!!!!!我的VC里面缺少一个stdafx.h需要拷贝一个到程序
- 发现一个很奇怪的现象--关于VB程序的内存占用
- 写一个程序,语言不限,打印出100的阶乘(即1*2*3*…*100)的精确数值结果(不能是浮点数)。如5的阶乘是1*2*3*4*5=120
- 关于异步事件的一个测试及其分析结果
- 由一个朋友遇到的问题想到的关于程序的架构
- jbuilder2006中web程序关于jdk版本的一个问题
- 关于一个多线程、断点续传的FTP服务程序!
- 一个applet程序,没有结果
- >>关于.NET CF 的一些知识——启动同一个程序的多个拷贝
- 关于vb.net里面api Unicode/ANSI调用一个问题解答
- 小程序大问题,MSDN中一个小小示例所带来的疑问,一个关于DataList的一个简单应用
- 由一个朋友遇到的问题想到的关于程序的架构
- 关于javascript程序内存占用的一个有趣的实验
- 一个关于日历的JSP程序!
- 基于AjaxHelper0.41的相册范例程序演示及一个关于博客园的功能建议
- 学习类,笔记!关于一个函数里面定义多个类以及相互访问的问题