关于C语言 初始化变量的值的正负 的问题,求教!

wqmwuhao 2018-01-12 03:52:44

如图,我在网易云课堂的C语言练习中做题,做到这道题的时候有点不解
我知道如果C语言中,局部变量没有初始化那么是内存中的随机的值,但是按照这道题的描述,这个随机值一定是正数么?
不能是负数么?
还是这道题答案有问题?
...全文
828 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
linovce 2018-01-14
  • 打赏
  • 举报
回复
答案解析说的很清楚了,k无初始化,但是会随机一个数,只有在k=0的时候输出。但个人认为这种题没意义
自信男孩 2018-01-14
  • 打赏
  • 举报
回复
引用 10 楼 wqmwuhao 的回复:
[quote=引用 2 楼 cfjtaishan 的回复:] 可能是否负数,但是如果要输出的,只会是在while循环不满足条件时才会输出。题目的要求是输出,既然输出只可能输出k = 0; 然后在考虑k 随机值是一个负值时,(如果不是负值,那么就会输出0,不论是执行多少次循环)如下:
#include <stdio.h>

int main(void)
{
    int k = -1;

    while (k != 0) {
        if (k > 0)
        printf("k = %d++\n", k);
        k = k - 1;
    }

    printf("k = %d\n", k);

    return 0;
}
可以看到输出的结果时,k最终会是非负值,因为k是int类型,它总有一个取值范围,而不是无限的负值下去(超过了int类型的范围之后就会被截断)。
好的,多谢。。。不过刚才试了一下电脑就卡住了= =[/quote] 循环次数比较多,多等一会试试。如果还是不行,建议直接杀死进程,这个是一个很大的循环,会很占CPU
开心秋水 2018-01-14
  • 打赏
  • 举报
回复
这种题目不好,不建议再看了
wqmwuhao 2018-01-14
  • 打赏
  • 举报
回复
引用 2 楼 cfjtaishan 的回复:
可能是否负数,但是如果要输出的,只会是在while循环不满足条件时才会输出。题目的要求是输出,既然输出只可能输出k = 0; 然后在考虑k 随机值是一个负值时,(如果不是负值,那么就会输出0,不论是执行多少次循环)如下:
#include <stdio.h>

int main(void)
{
    int k = -1;

    while (k != 0) {
        if (k > 0)
        printf("k = %d++\n", k);
        k = k - 1;
    }

    printf("k = %d\n", k);

    return 0;
}
可以看到输出的结果时,k最终会是非负值,因为k是int类型,它总有一个取值范围,而不是无限的负值下去(超过了int类型的范围之后就会被截断)。
好的,多谢。。。不过刚才试了一下电脑就卡住了= =
leetow2006 2018-01-13
  • 打赏
  • 举报
回复
上机测试下,情况是怎么样的
Magic丶旭 2018-01-13
  • 打赏
  • 举报
回复
就算是负数,也会满足循环条件,所以负数到达int类型的边界的时候再-1就会变成int类型的最大值。
sfzhaolv 2018-01-13
  • 打赏
  • 举报
回复
这道题相当于一个脑筋急转弯。 k的值是随机的。如果随机值是正的,会递减到0,然后跳出循环。如果是负数,也会递减到负数的临界值,然后变成正数,再递减到0. 所以无论如何,都会输出0
codedoctor 2018-01-13
  • 打赏
  • 举报
回复
。。只要有输出。就肯定是0
幻夢之葉 2018-01-13
  • 打赏
  • 举报
回复
一个数到达临界值(即最大最小值),对其加/减,会导致数据溢出。相当于一个循环
自信男孩 2018-01-12
  • 打赏
  • 举报
回复
可能是否负数,但是如果要输出的,只会是在while循环不满足条件时才会输出。题目的要求是输出,既然输出只可能输出k = 0; 然后在考虑k 随机值是一个负值时,(如果不是负值,那么就会输出0,不论是执行多少次循环)如下:
#include <stdio.h>

int main(void)
{
    int k = -1;

    while (k != 0) {
        if (k > 0)
        printf("k = %d++\n", k);
        k = k - 1;
    }

    printf("k = %d\n", k);

    return 0;
}
可以看到输出的结果时,k最终会是非负值,因为k是int类型,它总有一个取值范围,而不是无限的负值下去(超过了int类型的范围之后就会被截断)。
老马何以识途 2018-01-12
  • 打赏
  • 举报
回复
鑒於計算機對整數的存儲方式,它是有邊界的,負數減到最小時,就會回到最大的正數,它是一個循環。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧