有个C语言编程总是出现INF00什么的数据解决不了

作者&投稿:枕咸 (若有异议请与网页底部的电邮联系)
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]

例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;
}

第一个错误是weight是int类型,不应该用%f
保留五位小数,要这样写printf("体重:%.5f KG
",weight);

scanf("i=%f""p=%f""u=%f",&i,&p,&u); 这句话不好,如果这样用的话,你需要这样输入: i=1p=2u=3 就把1,2,3分别付给i,p和u了 改成这样: scanf("%f%f%f",&i,&p,&u);就行了


为什么有时候C语言编程调试得不出正确结果,退出后再进调试就可以得出正...
一个程序同样输入,同样处理流程,输出不同于预期的多种结果。除非程序运算涉及随机数。否则就说明这个程序不可控,是存在错误的。程序有错,不一定是代码写错了,也有可能是逻辑错误,条件判断有漏洞,地址访问越界。像你这种情况,很大可能有以下错误:1、变量没有给初值,就直接参与循环运算,变量初值为...

C语言编程“一元二次方程求解问题”,为啥总是显示“无实根”_百度...
scanf("%lf,%lf,%lf",&a,&b,&c);double类型对应格式说明符%lf

我初学C语言,用C语言编出来的程序有问题 这个程序是输出三个数中的最...
即 include <stdio.h> void main(){ int a,b,c,max;scanf("%d %d %d",&a,&b,&c);if(a<=b) swap(a,b);if(a<=c) swap(a,c);printf("%d\\n",a);} swap的功能用法相信你应该已经知道了吧。平时多积累这样的实用函数吧。编程之路很长很坎坷的、加油吧 ...

我用c++编程软件编写c语言,编了一道求约数的题目,编译可以但是结果总...
你的错误是 scanf ("%d,%d",&n,&m);应该改为scanf ("%d%d",&n,&m); 就是去掉两个%d中间的逗号 我自己写的一个 include<stdio.h> include<stdlib.h> int main(){int p ,r,n,m,temp;printf("请输入两个正整数n,m :");scanf ("%d%d",&n,&m);while(n!=m){ if(n>m){...

C语言编程的小问题,下面代码的运行结果怎么总是一个2万多的数,请解答...
问一下,你输入的数字多少???是不是你有输入其他非数字字符了?另外你的值打的是2万多少,我看下他的16进制

C语言编程比较两个数的大小,输入数后运行显示出结果总是前面的那个
编译你的程序运行正常呀,例如 .\/a.exe 31415,33333 max=33333 .\/a.exe 3333,3142 max=3333 我估计你输入数据的格式没注意的可能性比较大,碰到这种问题加一句printf 显示一下实际的a,b值往往对解决问题有帮助。例如改成这样:define DEBUG1 1#include<stdio.h>main(){int a,b,c;scanf("%d,...

大家帮我看看这个单片机的c语言编程吧,不知道怎么的用keil编译总是说...
中断中TH0和TL0的赋值应该是整数,比如说:TH0=50000;TL0=50000;相当于定时50ms,或者是 TH0=0Xac;TL0=0x12;此时是将十六进制数转化成十进制数算的,你这样的赋值方式 TH0=(65536-46083)\/256;TL0=(65536-46083)%256;是不正确的,这是它内部寄存器的存储方式,单片机内部只能识别二进制数,所以...

C语言编程,从键盘输入10个学生的成绩,试统计出他们的成绩总和及平均值...
C语言编程,从键盘输入10个学生的成绩,试统计出他们的成绩总和及平均值,怎么操作?  我来答 1个回答 #热议# 为什么孔子像会雕刻在美最高法院的门楣之上?信必鑫服务平台 2022-11-16 · TA获得超过5008个赞 知道顶级答主 回答量:29万 采纳率:100% 帮助的人:257万 我也去答题访问个人页 展开全部...

关于一个很简单的C语言编程,为什么总是不能输出?
int m,n,a,c,x,y;\/\/增加x,y这2个变量 printf("enter two integers:\\n");scanf("%d%d",&m,&n);c=m*n;if(m==n){ printf("两者的最大公约数是%d,最小公倍数是%d\\n",m,m);} if(m>n){ a=m-n;while(a>0)\/\/原来程序的m,n值被改变导致死循环 { x = m;y = n;m...

单片机编程时出现undefined identifier是什么意思? 大哥们教教我吧...
undefined identifier的翻译是,未定义的标识符。意思是在程序内使用了没有被定义的标识符或者变量。解决办法就是找到这个没有被定义的标识或者变量,进行定义。在编译的时候出现错误,会提示错误是什么和错误的位置,根据提示就可以找到。

官渡区18745784243: 有个C语言编程总是出现INF00什么的数据解决不了 -
紫逄盐酸: scanf("i=%f""p=%f""u=%f",&i,&p,&u); 这句话不好,如果这样用的话,你需要这样输入:i=1p=2u=3 就把1,2,3分别付给i,p和u了 改成这样:scanf("%f%f%f",&i,&p,&u);就行了

官渡区18745784243: 请问你关于【c语言程序运行结果为什么出现1.#INF00?】的这个问题是怎样解决的?谢谢 -
紫逄盐酸: 一般是因为除零,或者数据溢出造成的,看看程序里面有没有 a/0, 或者大数相乘的情形.

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

官渡区18745784243: C语言运行结果中出现“1.#INF00”,为什么? -
紫逄盐酸: ascii 码

官渡区18745784243: c语言 输入2.0 输出结果1.#inf00 怎么改 -
紫逄盐酸: 你要实现什么功能?程序的问题是x和y溢出了:如图 x的值超过了double的表示范围!

官渡区18745784243: C++编程运行中结果出现 1.#INF00 之类的错误数据 -
紫逄盐酸: Run Time Error 也就是调用内存错误 比如变量没有初值,数组越界.除0等操作可能导致该现象

官渡区18745784243: C语言,1.#inf00问题
紫逄盐酸: 如果你用的是win-tc, tc2之类的,pow输入参数是float 如果你用vc6之类的,pow输入是double 如果你用最新的支持C99的VC2005, VC2008, VC2010,GCC之类的编译器 才可能支持输入参数是long double类型 所以,是编译器的问题 换double吧,如果不满足精度的话,或者换更高版本. 或者用汇编自己写汇编代码

官渡区18745784243: 简单C程序运行结果为 #INF00,求解答!谢谢 -
紫逄盐酸: double的输入输出类型为lf 另外函数double类型要返回值#include #include double power(double x,int n){ printf("%lf",pow (x,n)); return pow (x,n); } int main(){ double x;int n; printf("Please input two number:"); scanf("%lf %d",&x,&n); power(x,n); return 0; }

官渡区18745784243: c语言 运行结果是1.#INF00 求助 -
紫逄盐酸: 这不是一个正确的做法,1.0/k当k较大时,基本上是0了.

官渡区18745784243: 在线求解:为什么我这个程序会溢出 输出1.#INF00 希望可以帮修正 谢谢! -
紫逄盐酸: u1可能为0,做除数,所以出现错误!并且你的X没有初始化,是无效值,在进入while(x!=0)时也可能会报错!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网