C语言程序没错但是输出结果错误

#include<stdio.h>
#include<math.h>
int main()
{
float r=0.01,m;
int d,p;
scanf("%d,%d",&d,&p);
m=log(p/p-d*r)/log(1+r);
printf("%f\n",m);
return 0;
}
这是我按照书上的题目和给的关于m的公式写的程序,运行时提示没有错误,但是输出的结果是乱码。
题目是向银行借款d=300000元,每月还款p=6000元,月利率r=1%,计算多久能还清。计算还清月数m的公式在程序里。我是想把程序写成输入式的所以就这么写了。但是输出结果是-1.#IND00。求大神解释。

输入数据时,是输入:300000,6000吗?注意中间的逗号,很重要,如果没有,比如说输入了:300000 6000,结果就出错了。追问

嗯。有逗号。

追答

仔细看了你的程序,d,p为整型,int型最大值为32767,你要输入300000,显然溢出了,将d的类型变为long型就可以了,如果为了保险d,p的类型的都变一下:
long d,p;
scanf("%ld,%ld",&d,&p);
但是运行后,还是溢出。我发现你的公式好像有问题:p/p为1,它减去d*r是一个负数,所以log不能求解,结果实际是个随机数。估计你的公式写错了。我在网上没有搜到相应的公式,你看看你的书,写成正确的c语言表达式。
另外,你要注意c语言里的log是以e为底的,即数学中的ln(x)。数学中的log函数,在c语言中要写成log10(x)。

追问

我把log10(p/p-d*r)拆开成(log10(p)-log10(p-d*r))这样之后发现能得正常答案,答案是69.660716。公式拆开前后区别有点大,不懂是为啥。

追答

公式写成C语言表达式应该是p/(p-d*r),分母是p-d*r。c语言中的“/”是两数相除,不能表示数学中的繁分式。

温馨提示:内容为网友见解,仅供参考
无其他回答

为什么程序正确的c语言运行的时候,计算答案错误?
scanf("%2.2f\\n",&r); \/\/主要是这句出问题了,首先\\n可以去掉,默认输入有\\n结尾,加上有时有不可预知的错误; 其次是%2.2f出错了,我试了%2f是可行的,就是带上.2f就会出错,用debug调试带上了.2f时,输入的半径会变得非 常大,如图, 具体原理不是特别清楚,反正不限制输入的小数位数...

用C语言编程程序没有错误为什么结果不对
1,保存为c或c++文件 2,根据断点调试找到错误处。3,采用F10或F11单步调试找到精确的错误处。其中f10是跳过函数盗用,f11是进入函数体调试。一般是先用f10,确定函数输入输出是否正确(与自己想的一样),如不一样,则用f11进入函数体一步一步调试。4,在调试过程中,肯定得监视程序中的变量。在vc6...

为什么编译运行没问题,输出却报错?
出现这个报错的原因是:代码输入过程中出现全角输入,将代码中括号、分号等用半角字符替换即可。根据题目给出的提示,请检查一下第51行代码,将51行代码中出现的全角符号替换成半角字符,或者输了重新输入就行。

为什么 程序 编译通过 也是正确的 但是运行的结果却不是正确的 我用...
没语法错误,有逻辑错误,特别是指针容易用错。

我的c语言程序没有报错为什么会执行不了?
在C语言中,程序没有报错并不意味着程序一定是正确的。有时候,程序可能会出现逻辑错误或者运行时错误,导致程序无法执行或者输出不符合预期。以下是一些常见的导致程序无法执行的原因:1. 程序陷入死循环:程序在某个地方出现了死循环,使得程序无法继续向下执行。如果程序似乎无法结束,可以检查程序是否存在...

C语言运行结果有问题,程序无错误
&b,&c); \/\/按原先设计需要输入: a=1,b=2,c=1,否则赋值有问题 x=b*b-4*a*c;p=-b\/(2*a);q=sqrt(x)\/(2*a);x1=p+q;x2=p-q; printf("p=%5.2lf,q=%5.2lf\\n",p,q); \/\/如同scanf这里也需要用%lf printf("x1=%5.2lf,x2=%5.2lf\\n",x1,x2);} ...

为什么c语言运行结果对但是又显示有错
请把错误信息发上来啊。结果对说明你的计算过程是对的,但程序报错,很可能是语句使用格式不正确,但不影响计算。并不是所有错误都会中止计算

我的C语言程序在编译器上运行正确,但作业提交上去却是runtime error这...
runtime error是运行时错误。你自己可以成功编译运行,但是提交上去之后报错的原因是你的程序在特定输入的时候出现错误。

c语言编程没有错误但是运行不出正确结果
scanf("%f,%f,%f",&a,&b,&c);你的scanf语句里的逗号是英文逗号 而你运行的时候,有的电脑会自动切成中文输入法所以你输入3,4,5的时候这里的逗号是中文逗号所以就出错了 你在运行的时候注意切成英文输入状态就行了,但还是建议scanf语句里不要添加额外的符号影响输入。

我在编写C语言代码的时候,有时候代码会有一些逻辑上的错误,就是代码可...
比如:老师让你输出:1 你写个程序输出:2 你的代码当然编译不会出错。而且可以很好的运行,但是结果就是2.永远都不会是1,因为你就让他输出的2,结果怎么会是1呢。开发人员都知道:再也没有比修改语法错误再简单的了 直接看看编译器报的错,看看第几行,修改。OK。。太简单了 逻辑错误就得调试...

相似回答