C-c语言求一元多项式的算法for循环那里无限输入

C-c语言求一元多项式的算法for循环那里无限输入

夜无邪 发布于 2017-04-11 字数 170 浏览 1195 回复 4

c语言求解,这是我写的求一元多项式的算法,但是for循环那里会无限输入,真心求解~~

1

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

灵芸 2017-10-15 4 楼

我来稍微做下补充,就是关于输入3时,打印出来为什么是1077936128

可以看到,描述的情况是一样的,然后我们取出n的地址以及n的地址出存储的内容

首先,由于格式化字符串指定的是%f,也就是float类型,所以用户输入的数会暂存在一个float类型的临时变量中,然后直接放到地址为0x0026F9B0的这块内存中。可以看到图片中,n的地址是0x0026F9B0,其中内存是00 00 40 40 由于是小端表示,所以其十六进制表示的值是0x40400000,也就是1077936128。转换为二进制表示,分析一下机器的浮点数表示,也就是0100 0000 0100 0000 0000 0000 0000 0000,其中,最高位(31位)是符号位,3是正数,所以为0。3用二进制表示就是11,按照浮点数的规范化表示也就是1.1*2,所以解码值就是1,其移码表示也就是100 0000 所以第23位到30位为1000 0000,后23位表示的小数点后面的23位有效位,因为只有1,所以补齐22个00,所以就是100 0000 0000 0000 0000 0000,这也就是为什么会出现这个值的原因了

浮生未歇 2017-10-10 3 楼

求一元多项式方程?
上面兄台已经说了,输入n值时有误
第5行,a[0]是x的0次幂的系数,那么i应该等于1
第6行不应该是p=p+(a+i)x么?
按照第5行,第17行循环结束条件也应该是i<=n

甜柠檬 2017-09-27 2 楼

你读取的方法不对scanf("%f",&n),你需要的是整形,读入的却是一个浮点型。会把读入的浮点数直接存在&n这个地址上(注意是直接存入,而不是类型转换),所以会导致读出来的n会很大。
看下面的代码你就知道了

#include <stdio.h>

int main(){
int n=0;
scanf("%f",&n);
printf("%d",n);

}

我输入3,打印出来的却是1077936128。
也就是说,你的问题是输入的数字会变得很大,所以看起来就像是死循环了。
所以对应的类型要用对应的输入方式,你把scanf("%f",&n),改成scanf("%d",&n)就可以了。

泛泛之交 2017-09-05 1 楼

除了不直接贴代码,输入是什么输出是什么,也不解释清楚,代码也没注释。唉。
输入n的时候,为什么用%f来输入呢?
目测造成你说的情况(对你的描述其实不是很相信,请证明你怎么知道是无限输入了)可能性较大的是你的测试数据,所以请给出测试数据。