下面程序为什么是负数求高手帮忙。。。。

下面程序为什么是负数求高手帮忙。。。。,第1张

num=num2;这是个问题(非常有名的棋盘放麦粒问题):

按这个循环for(int i=2;i<=100;i++)计算的结果,是一个很大的天文数字。

num经过计算,早就超过了int的最大值(溢界),表现为正数变成负数(进位进到符号位上)。

因此,你的计算结果就成了负数。

负数在内存中是以补码的形式存储的,

即 -666

原码:1000 0010 1001 1010

反码:1111 1101 0110 0101 (符号位不变,其它位取反)

补码:1111 1101 0110 0110 (反码+1)

即,实际内存中的数据为0b1111 1101 0110 0110=64870

而a为unsigned short int,所以反馈的应该就是64870正数。

for循环括号写错位置了吧 还有那个分号你是闹哪样?

加了那个分号之后 i的数值是31  2^31-1 是double的精度  就是这个1 直接超出来精度范围 变成了 -2^31  具体原因可以-128~+127 的5位二进制来理解

pow函数记得里面是pow(double,int)类型 返回是 double类型 这些小细节注意一下

代码风格也稍微培养一下吧    乱糟遭的以后代码量大了  调试累死你  

#include<stdioh>

#include<stdlibh>

#include<mathh>

int main()

{

    int  i ;

    double z ,a , n ;

    z = 0;  a = 20;

    for( i=0 ; i<=30 ; ++i )

    {

     n = pow(a,i);

     z = z+n;

    }

    printf("z=%lf\n" , z );

    system("pause");

    return 0;

}

1、打开Dev-c++软件,点击“新建源代码”。

2、具体程序如下:#include <stdioh>,int main(){int a[10];int i,m=0,n=0;printf("请输入10个整数\n")。

3、编写完程序之后,点击运行即可得出结果。最后的结果是根据自己输入的10个整数值为基础来进行运行的,每次输入的数组值不同,结果也会不同。

4、其中for表示循环结构,i 表示循环条件,在编写程序时,注意给赋予增值变量的条件,此次程序的i的初始值从0开始,到9结束,共进行10次循环。

5、if(a[i]>0) m++ 中表示的是,从循环里找出正数,每次找出的正数进行存储在m里。注意这时if里的数组要注意定义为大于0,目的是为了找出10个整数里的正数。

6、最后一点要注意输出结果的那个代码要用到10-m-n,使其算出最后一个我们要求的负数的个数。

楼上的并没有找到错误。x只是应该最好用实型,不过你用整型也没所谓,当表达式中出现浮点数与整数的二元运算时编译器会自动将整型转换为浮点类型在进行运算。所以楼主的程序的问题并不在这儿。而在数组访问越界。楼主,C语言里面数组的下标是从0开始的。所以一个10元素的数组,合法的下标是从0到9。a[0]是第一个元素,a[9]是第十个元素。你的while循环和for循环里面数组的下标都是从1开始的,所以不管是你往数组里面存东西还是从数组里面取东西,你都是从a[1](因为你写的都是a[i])开始的,也就是说数组的第一个元素a[0]你都没有用,然后一直到a[10],而本来a[9]才是你的数组的最后一个元素,结果你非法访问了你的数组的有效范围以外的一个内存单元,即所谓的a[10],这个单元里本来就不在你的数组有小范围之内,所以它里面的值是垃圾值,你打印出来当然就可能是任意值了(这个在不同的运行环境下可能有不同的表现,比如说打印一个很大的值或者一个负数,反正不是你想要的值)。你的程序有两种改法:

1 i=0; while( i < 10 )

for ( i = 0; i < 10; i++ )

2 把循环体里面的a[i]改成a[i-1],这样你的数组访问就不会越界了,i=1的时候,刚好是a[0],i=9的时候,刚好到最后一个元素a[9]。

另外,楼上的说得也没错,你最好把你的运算 *** 作数都改成浮点类型(float或者double),不要依赖编译器帮你做类型转换

在VC C++上是正常啊

将整个程序复上来看看

它是指声明部分是整数吧,

如int c = 1e-3;

printf("%d\n", c);

输出就一定是0,因为int只能保存是整数嘛;修改为float就正常了(输出变成%f)。

以上就是关于下面程序为什么是负数求高手帮忙。。。。全部的内容,包括:下面程序为什么是负数求高手帮忙。。。。、如图:C语言程序中无符号数a的值是负数,为什么作整形输出时的结果是64870、c语言中求救这个程序运行结果怎么有个负号等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10165625.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存