c语言程序运行结果为什么出现1.#INF00?

程序已经运行成功了 ,这个是什么意思啊?为什么会出现这种个情况,怎么能改能输出正常的数字结果啊 求高人指点啊
#include "stdio.h"
#include "math.h"
void main()
{double p1=420.3,a,D3=114,p=60000.0,b=1.0,M=8900,T0=20,T1=19.7,f1=350,c,n,u=1325.97,v=149,r=489.31,f2=470.76,l=900,z1=210.5,z2=192.6;
double p2,p3,x1,D0,R,k,smin,s[6]={0,0,0,0,0,0},y[6]={0,0,0,0,0,0};
int i;
R=(u*D3)/v;
printf("%f\n",R);
printf("请输入c,n的值");
scanf("%f,%f",&c,&n);
for(i=0;i<6;i++)
{a=0.05+i*0.01;
p2=a*p1*600;
p3=(p1+p2)/2;
if(p3>0.4*p)
break;
x1=(p3*D3)/(2*p*b-p3);
D0=D3+2*x1;
k=(M*r*4)/(3.14*pow(D0,2)*fabs(T0-T1));
y[i]=f1/k-f1*(D0+2*x1)/(c*f2*pow(R,n));
s[i]=(pow((0.5*D0+y[i]),2)-pow((0.5*D0),2))*3.14*l*z1+(pow((0.5*D3+x1),2)-pow((0.5*D3),2))*3.14*l*z2;
}
smin=s[0];
for(i=1;i<6;i++)
{if(s[i]<s[0]&&s[i]>0)
smin=s[i];
}
printf("最小值smin=%lf",smin);
}
运行成功了 但怎么出现1.#INF00啊 高人帮我修改一下吧 定义初值的数可以改变的。我把我所有的分都给你了 呵呵

还是不行啊 高人运行一下啊 帮我改改啊 还是那个结果啊

是因为运算结果溢出。

解决办法,例:

chara=126,则a+45=126+45=172-256=-85

uchara=2,则a-100=-98+256=158

a,b基本类型相同时,有符号与无符号数的转换:

无符号a-->有符号b

if(a<max_count/2)b=a

elseb=a-[max_count]

有符号数a-->无符号数b

if(a>0)b=a

elseb=a+[max_count]

例1chara=-119;ucharb=a;则b=-119+256=137

例2uchara=137;charb=a;则b=137-256=-119

例3signedcharchr=127;

intsum=127;

chr+=10;

sum+=chr;

sum值是

思路先把chr当成无符号数,chr+=10变成137然后把chr转化为有符号数137-256=-119-119+sum(127)=8

扩展资料

溢出的原因,考虑两个非负整数x和y,满足0<=x,y<=(2^w)-1。xy可以被表示为w位无符号数字,然而考虑它们的和的话,我们可以得到0<=x+y<=2^(w+1)-2。这个和需要w+1位来表示。如果再用其他数加上这个结果的话,可能又将需要w+2,w+3位来表示新的结果。

这种持续的“字长膨胀“意味着,如果想要完整地表示算数运算的结果,就不能对字长做任何限制(实际上Lisp就是这样干的)。如果限制了数据类型的字长,溢出的发生是不可避免的。由于溢出后的结果往往不是想要的结果,必须对溢出时的情形另做处理,但在此之前我们必须得先能够判断什么时候发生了溢出。

无符号整数的溢出判断比较简单:对一个字长w的无符号数加法运算,当x+y>=2^w时,第w+1位被程序舍去,相当于在x+y的和的基础上减去了2^w。由于x,y<=(2^w)-1,所以有x+y<x(或者x+y<y)。

intuadd_ok(unsignedx,unsignedy){

unsignedsum=x+y;

returnsum>=x;

}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-23
当你输入的c,n值过大的时候,运算结果就会溢出(数据过大或过小超过计算机所能存储的值。。。),就出现你说的那种情况了
你用0.5,0.2试试。。。本回答被提问者采纳
第2个回答  2013-03-20
我也遇到你说的问题了,你是怎么解决的,求组!!!谢谢
第3个回答  2012-03-07
那你最后是怎么解决的?
第4个回答  2010-05-15
不大明白啊
把程序贴上来看看

c语言程序运行结果为什么出现1.#INF00?
是因为运算结果溢出。解决办法,例:chara=126,则a+45=126+45=172-256=-85 uchara=2,则a-100=-98+256=158 a,b基本类型相同时,有符号与无符号数的转换:无符号a-->有符号b if(a<max_count\/2)b=a elseb=a-[max_count]有符号数a-->无符号数b if(a>0)b=a elseb=a+[max_count...

请问你关于【c语言程序运行结果为什么出现1.#INF00?】的这个问题是怎样...
一般是因为除零,或者数据溢出造成的,看看程序里面有没有 a\/0, 或者大数相乘的情形。

一个简单的c语言程序,输出-1.#IND00..不知道哪里错
简而言之,如果遇到 1.#INF \/ inf,就检查是否发生了运算结果溢出除零,而遇到 1.#IND \/ nan,就检查是否发生了非法的运算。特殊浮点数的判断 很多 C 库都提供了一组函数用来判断一个浮点数是否是无穷大或 NaN。int _isnan(double x) 函数用来判断一个浮点数是否是 NaN,而 int _finite(doubl...

c语言 输入2.0 输出结果1.#inf00 怎么改
x的值超过了double的表示范围!

C语言编译提示#INF00
scanf ("%lf",&a);得改成scanf ("%f",&a);,因为a是float型。当b>=a不成立时,while (b>=a)不执行,e还是初值0,后面的y=pow(e,-1);就产生了被0除错误,显示#INF00。

C语言,1.#inf00问题
用的是什么编译器哦,我在vs2010上试了一下没有任何问题啊,有的太小的编译器可能因为运算太复杂出现问题,你在vs2010或者vc2008或者vc2005或者vc6.0上编译,应该不会有问题的,我的vs2010试了你的表达式,没有任何问题!

我用C语言编了一个程序,是用Turbo C++编的 我想将这个程序保存在F盘...
步骤一:在"任务计划"窗口中双击添加任务计划,下一步,接着点浏览,在选择程序以进行计划的窗口中的C:\\WINDOWS\\SYSTEM32"目录下找到SHUTDOWN.EXE程序并点打开按钮.步骤二:将执行这个任务的时间设置为"每天",点下一步,将起始时间设置为"23:00"并点下一步,按照要求输入用户名及密码,在单击完成时,打开...

MD5是如何编译的?
这些输出结果的含义是指:空字符串””的MD5值是d41d8cd98f00b204e9800998ecf8427e,字符串”a”的MD5值是0cc175b9c0f1b6a831c399e269772661……编译并运行我们的程序:javac –d . MD5.java java beartool.MD5 为了将来不与别人的同名程序冲突,我在我的程序的第一行使用了package beartool;...

文件都变成了Ink文件,打不开,急啊~~
1、你把快捷方式所对应的应用程序移动到了其它地方, 2、你中了病毒或者恶意软件,修改了你快捷方式的参数; 3、你的系统出了问题,导致你的应用程序不能打开。 个人认为第2点的可能性比较大,最近有几个病毒都会感染所有的EXE应用文件,导致程序打不开。建议你升级杀毒软件库到最新版本杀一次病毒! 另外,建议安装...

C语言写二次函数
首先你已经很清楚的说明了你这个程序是用C语言写二次函数的,而当a=0时,就不是二次函数了,应该按照一次函数来进行计算,否则 一个数除以0就没有意义了.~include <stdio.h> include <stdlib.h> include <math.h> int main(){ float a,b,c;float x1,x2,m;printf("input number a=:")...

相似回答