迷茫小玄森 2021-12-04 14:56 采纳率: 0%
浏览 5
已结题

C语言提问:为什么下面这串代码输入一个正奇数不是一个死循环?


# include <stdio.h>

int main(void)
{
    int n, t=-1, s=0;
    
    scanf("%d", &n);   //输入3 
    do
    {
        s += t;
        t -= 2;
    }while(t != n);
    printf("%d %d", s, t);  //输出-4, 3
    
    return 0;
}

从代码上看,t的初始值是负数,后面t也是一直-1,那么t理论上应该一直是负数,也是t不应该会和一个正数n相等,那么循环就不会停止,但是这里为什么输入的n为一个正奇数的时候循环仍会停止、且输出结果显示循环后t==n了,这是为什么?
经过测试,循环次数非常大,也就是循环了超级多次才停止的,这是否与负数补码有关?不明白、求指点!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月12日
    • 创建了问题 12月4日