none
[求助]编个累加程序给电脑搞蓝屏了啊.... RRS feed

  • 问题

  • 求高手帮忙看下这段代码,可以通过编译,但是不能得到结果.

    个人感觉i5处理器算这个应该很快的,但是计算时间很长,还提示除以0的错误,前几次还给电脑整蓝屏了.

    只算第一个循环也不能正确的到5050,大家看看是什么问题啊.

    # include <stdio.h>
    void main()
    {
    int i,j,k,M1=0;
    long M2=0;
    float M3=0;
    for(i=1;i<100,i++;)
    {
    M1+=i;
    }
    for(j=1;j<50,j++;)
    {
    M2+=(j*j);
    }
    for(k=1;k<10,k++;)
    {
    M3+=(1/k);
    }
    printf("%d\n",M1);
    printf("%.2f\n",M1+M2+M3);
    getchar();
    }


    菜鸟飞飞~

    2012年2月13日 3:23

答案

  • Hi 才华大盗,

      i<100,i++;和j<50,j++以及k<10,k++会导致条件永远是true,因为逗号运算实际是以顺序执行这两个语句,导致后面的条件永远为true,所以你这个结果M1,M2都会是2147483647,就是十六进制的7FFFFFFF,四个字节的最大数值,而M3执行到最后会让k变成最大值然后归零导致除零错误。

    # include <stdio.h>
     void main()
     {
     int i,j,k,M1=0;
     long M2=0;
     float M3=0;
     for(i=1;i<=100;i++)
     {
     M1+=i;
     }
     for(j=1;j<50;j++)
     {
     M2+=(j*j);
     }
     for(k=1;k<10;k++)
     {
     M3+=(1/k);
     }
     printf("%d\n",M1);
     printf("%.2f\n",M1+M2+M3);
     getchar();
     }

     


    orichisonic http://blog.csdn.net/orichisonic If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    2012年2月13日 7:06

全部回复

  • Hi 才华大盗,

      i<100,i++;和j<50,j++以及k<10,k++会导致条件永远是true,因为逗号运算实际是以顺序执行这两个语句,导致后面的条件永远为true,所以你这个结果M1,M2都会是2147483647,就是十六进制的7FFFFFFF,四个字节的最大数值,而M3执行到最后会让k变成最大值然后归零导致除零错误。

    # include <stdio.h>
     void main()
     {
     int i,j,k,M1=0;
     long M2=0;
     float M3=0;
     for(i=1;i<=100;i++)
     {
     M1+=i;
     }
     for(j=1;j<50;j++)
     {
     M2+=(j*j);
     }
     for(k=1;k<10;k++)
     {
     M3+=(1/k);
     }
     printf("%d\n",M1);
     printf("%.2f\n",M1+M2+M3);
     getchar();
     }

     


    orichisonic http://blog.csdn.net/orichisonic If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    2012年2月13日 7:06
  • Hi 才华大盗,

      i<100,i++;和j<50,j++以及k<10,k++会导致条件永远是true,因为逗号运算实际是以顺序执行这两个语句,导致后面的条件永远为true,所以你这个结果M1,M2都会是2147483647,就是十六进制的7FFFFFFF,四个字节的最大数值,而M3执行到最后会让k变成最大值然后归零导致除零错误。

    # include <stdio.h>
     void main()
     {
     int i,j,k,M1=0;
     long M2=0;
     float M3=0;
     for(i=1;i<=100;i++)
     {
     M1+=i;
     }
     for(j=1;j<50;j++)
     {
     M2+=(j*j);
     }
     for(k=1;k<10;k++)
     {
     M3+=(1/k);
     }
     printf("%d\n",M1);
     printf("%.2f\n",M1+M2+M3);
     getchar();
     }</stdio.h>

     


    orichisonic http://blog.csdn.net/orichisonic If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    啊,我太粗心了,多谢大侠~!!

    菜鸟飞飞~

    2012年2月13日 10:29