V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yuann72
V2EX  ›  问与答

C 语言老师的一道改错题目的问题

  •  
  •   yuann72 · 2015-12-12 08:55:13 +08:00 · 2295 次点击
    这是一个创建于 3273 天前的主题,其中的信息可能已经有所发展或是发生改变。

    C 语言的一道改错题目 题目说有 4 个错误,前 3 个错误不管他 主要是第四个

    编程输入 10 个数,找出其中的最大值及其所在的数组下标位置。(4 个错误)

    include <stdio.h>

    int FindMax(int num[], int n, int *pMaxPos);
    main()
    {
    int num[10], maxValue, maxPos, minValue, minPos, i;
    printf("Input 10 numbers:\n ");
    for (i=0; i<10; i++)
    {
    scanf("%d", num[i]); //加取地址符号

    }                        
    maxValue = FindMax(num, 10, maxPos);  //加取地址符号
    printf("Max=%d, Position=%d\n",maxValue, maxPos);
    

    }
    int FindMax(int num[], int n, int pMaxPos); //去掉分号
    {
    int i, max;
    max = num[0];

    /*主要是这第四个错误 老师说要增加初始化语句*pMaxPos=0 说是逻辑上的错误,这个时候不加这一条语句程序已能正常运行并实现功能
    我只想知道这个真的算一个错误吗?
    /
    for (i = 1; i < n; i++)
    {
    if (num[i] > max)
    {
    max = num[i];
    *pMaxPos = i;
    }
    }

    return max;
    }

    8 条回复    2015-12-12 17:46:23 +08:00
    wy315700
        1
    wy315700  
       2015-12-12 09:02:35 +08:00
    max 有初始值,如果后面的都 < max
    那么 *pMaxPos=i 就不会被执行
    aivier
        2
    aivier  
       2015-12-12 09:02:45 +08:00
    不懂 C ,只知道 JavaScript 不这样做变量会变成 NaN(Not a Number)
    Hyperion
        3
    Hyperion  
       2015-12-12 09:09:19 +08:00
    不应该是函数实现的时候,最后一个指针参数类型错误吗?

    要不要初始化指针式是规矩问题。
    fractal314
        4
    fractal314  
       2015-12-12 09:42:35 +08:00 via Android
    测试一下 10 9 8 7 6 5 4 3 2 1 这组数就可以了
    zmj1316
        5
    zmj1316  
       2015-12-12 09:53:09 +08:00
    可能未被初始化,顺便一提 lz 发帖前应该预览一下,不然不知道 MD 就是这种结果 2333
    iamleung
        6
    iamleung  
       2015-12-12 10:07:48 +08:00
    假设 FindMax 的实现函数,最后那个参数错误只是笔误;
    然后,程序之所以正常运行,在于未初始化的 maxPos 被编译器默认成 0 了,当它被作为参数传给 FindMax 函数时,相当于*pMaxPos=0 ,所以即使输入 10 9 8 7 6 5 4 3 2 1 ,输出结果也是对的;
    但是,如果碰上某些编译器或者使用某些编译参数,使得不给未初始化变量赋 0 ,而是随机值,那程序就会出错
    Comdex
        7
    Comdex  
       2015-12-12 11:29:07 +08:00
    最好初始化
    Shy07
        8
    Shy07  
       2015-12-12 17:46:23 +08:00
    算, pMaxPos 只在 if 语句中赋值,如果没有满足 if 语句的条件,那么 pMaxPos 就不会被赋值,这时候必须有容错处理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3337 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:05 · PVG 20:05 · LAX 04:05 · JFK 07:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.