考试前夜遇到的有趣代码及思考

> 开场
是一个非同寻常的夜晚,第二天即将考试,我一改往日悠闲刷手机的习惯,转而焦虑地刷着手机,突然微信传来通知

636a7089-2a6a-4ccf-977d-eb00a32dd72c

我仔细一看,我去!这不就是我闲的没事做的实验题吗?!,为了检验自己的水平,顺便help my classmate,我毅然决然地接下了这份任务。

590d1ab5-0ff5-4f11-ab9c-253679115a52


> 一.

在我通过了那位同学的好友申请后,我收到了一份代码,其内容如下

#include <stdio.h>
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0 && m==0)
        {
            break;
        }
        int num[101];
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
        }
        int pos=n;
        for(int i=0;i<n;i++)
        {
            if(num[i]>m)
            {
                pos=i;
                break;
            }
        }
        for(int i=0;i<pos;i++)
        {
            printf("%d",num[i]);
        }
        printf("%d",m);
        for(int i=pos;i<n;i++)
        {
            printf("%d",num[i]);
        }
        printf("\n");
    }
    return 0;
}

  事情开始变得有趣起来了,"四个for循环?!"我暗想道。
  同学:"帮忙看看我代码哪里出问题了呗"
  我:"善"。

  在经历了长达十多分钟的分析后,我彻底看懂了这份代码,作者在Output那一部分的创新让我十分认可,正常的Output应该是输出一个数组里的全部元素,但我这位同学却不同,她别具新意地将Output分为了三部分----"数组前半部分,被插入的数字,数组后半部分"

微信图片_20251110185425_50_6

  经一番尝试,我找到了她代码中的问题:存入数组的元素下标写错了
  我给了她2个解决方案: 1.修改Output使输出正确
            2.修改Input的存入数组部分(更优)

  但是问题真的就这么简单吗?


>二.
  在解决她的代码时,我发现了一个令我疑惑的问题

03c47990-d083-4873-8d88-92177720c17a

上图为错误代码的输出 

  奇怪?输入的是1 2 4 那么这个0从何而来?

dac13cdf-4512-4710-bb72-d45cb9ec00c4

上图为我与Deepseek的对话

  既然如此,那么错误输出的num[0]理应是一个随机数啊,为何是0?
  一开始我以为是Deepseek又在胡言乱语了,但随着对话的进行,我发现并没有那么简单。


>三.
  在我的层层盘问之下,Deepseek居然说出"没准是这个随机数刚好随机到0了"这种胡话,动脑子想想就知道,在int范围内刚好随机到0,这几乎是一个不可能事件!

5e3c1d98-4707-4d56-8e6f-6763ff372407
d3d59d94-856d-41eb-b83a-ed6054455d27

上图为我连续追问后,Deepseek给出的回答

`

  识别关键词:调试模式 ."何为调试模式? "我继续追问道。

`

6984b2ef-7a2d-41a3-aaef-dc026c2b4ff2

真相已渐渐浮出水面!


>四.
  所以Deepseek之前说数组元素本应是随机数是对的!但它说的那种情况是发布模式,Codeblocks默认的调试模式只会使得数组内元素初始值为0,我终于搞懂了num[0]为什么是0这一问题!
  或许这点小问题在某些大神眼里根本算不上什么问题,但对于我来说这的确是个不错的挑战,我收获了新的知识,也获得了关于如何解决问题的一些经验,对于我这个编程爱好者来说,这个"解决问题"的过程已是一份相当有趣的经历,我悠然自得。
  有趣,下一次会有什么问题等着我呢?

posted @ 2025-11-10 19:47  ysdd  阅读(33)  评论(0)    收藏  举报