| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 936 人关注过本帖
标题:C语言中,类似 if(2*x==8)的运算,都需要想办法给定一个取值范围,让程序一 ...
取消只看楼主 加入收藏
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
C语言中,类似 if(2*x==8)的运算,都需要想办法给定一个取值范围,让程序一个个去验证才行吗?
(1)https://bbs.bccn.net/thread-457083-1-1.html
上一篇帖子,我贴的程序中

刚发现估计就是因为我的程序没有给出一个大致的取值范围,只是给出一个空洞的式子:if((1.0-1/5.0-5/7.0)*n==303.0)
编译器无法进行穷举代入验证,所以没有结果输出

而书本给的程序想方设法给出一个x,让程序去穷举循环代入,验证哪个结果合适,不过这个x至今没看懂,怎么来的,怎么设定?

(2)类似的问题,刚又碰到一个:
一个塔高8层,下面一层灯的数量是上面一层的两倍,8层公共有765盏灯
然后我直接:if(255*x==765)  发现没法求啊
太坑爹了

最后,不吐槽了,想请教一下大家:
类似的情况该怎么处理?
比如第一篇,我帖子里面https://bbs.bccn.net/thread-457083-1-1.html   里面的x怎么设想出来的?这种参数的设想和假设有没有较好的方法?

[ 本帖最后由 计算机之祖 于 2015-9-8 11:16 编辑 ]
2015-09-08 00:30
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 2楼 边小白
说白了就是数学思想和编程思想的冲突吧
数学思想如:一般给个方程,比如2*x=10,按数学算,一秒钟就出来了
但是编程思想:如果直接if(2*x==10),然后指望程序给你直接算出来,至少我发现C是不行的
所以这是我之前犯的一个错误

所以我们得给这个if()式子设定一个循环条件,让它逐个代入数值去计算,说白了这种方法对人脑来说是最笨的方法,但是C貌似就得这么干才行

但是有个问题就是有时候,你用数学不能很简单算出对应x的值,但是你又想给x或者与x相关的参数设定一个取值范围,以便让程序去穷举循环的话
这个时候,就有点犯难了

这就是我最想问的问题
2015-09-08 11:15
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 5楼 wp231957
这个还好吧
高中数学我还是不错的
不过我上面貌似真的算错了,应该是255*x==765,已改,谢谢

对于 if(255*x==765)这样的式子,是否一定得给这里的x或者和x相关的参数设定一个取值范围,让程序去循环穷举,依次代入验证
这个在人脑看来最笨的方法,貌似C中只能这么干了

但是有个问题就是有时候,你用数学不能很简单算出对应x的值,但是你又想给x或者与x相关的参数设定一个取值范围,以便让程序去穷举循环的话
这个时候,就有点犯难了

这就是我最想问的问题
2015-09-08 11:22
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 4楼 rjsp
亲,位移运算比较强大,程序显得简便多了

但是问个问题:
万一您这个除不尽呢?不需要考虑将变量定位float,然后按float去计算吗?
2015-09-08 11:25
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 9楼 xnattack
1<<8
前面是操作数1,中间<<表示左移,后面的8表示:左移8位
为了方便解释,假设它是short 2个字节的
那么1用二进制表示为0000 0000 0000 0001
左移八位之后变成: 0000 0001 0000 0000
原来是1,现在2^8

每左移一位实际上相当于将原来的数*2
依次……

如果右移的话,就是除以2,原理是一样的
2015-09-12 08:21
计算机之祖
Rank: 2
等 级:论坛游民
帖 子:63
专家分:17
注 册:2015-9-1
收藏
得分:0 
回复 11楼 TonyDeng
你对计算机理解的好深
很多时候确实会有疑问,为什么一个数学上看起来很简单的求解,用程序去表达却不太自然,或者说没有数学那么直接
包括你说的判断一个数n是否为素数,用数学的角度来看,我只需要循环到开根号的值就行了
但是程序不管这么多,直接循环到n-1,照样得到结果而且程序员写起来也很简单,几乎不用多想
当然,如果涉及算法的效率,例如时间复杂度,可能就得稍微考虑下了

计算机确实有时你会觉得不好理解,但是理解之后你又会发现确实神奇
看来我还得更加努力了……
2015-09-12 18:12
快速回复:C语言中,类似 if(2*x==8)的运算,都需要想办法给定一个取值范围,让程 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015617 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved