虽然满分,但是跟题目不大一样,题目是3.375,我是3.375000,谢谢指导!!!
二级必过!!! 圈内达人 2015-09-11 17:45:10
1518 18 0

blob.png

问题来自: 编程题真题

共 18 个回答

    二级必过!!! 圈内达人 3594天前

    第19课 编程题真题

    程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。
    例如:a 数组中的值为
                    |0  1  2  7  9|
                    |1  9  7  4  5|
            a =   |2  3  8  3  1|
                    |4  5  6  8  2|
                    |5  9  1  4  1|
    则返回主程序后s的值应为: 3.375。
    注意: 部分源程序存在文件PROG1.C文件中。
    请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

    double fun (int w[][N])
    {
    int i,j,k=0;
    double av=0.0;
    for(i=0;i<N;i++) 
    for(j=0;j<N;j++)
    if(i==0||i==N-1||j==0||j==N-1) 
    { av=av+w[i][j];
    k++;
    }
    return av/k; 
    }

    【微分析】
    本题要求计算二维数组周边元素的平均值,for循环语句控制循环过程,if条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。
    本题采用逐一判断的方式,周边元素的规律为下标中有一个是0或N-1,所以只要下标中有一个为0或N-1,那么它一定是周边元素。计算周边元素个数的方式是当给av累加一个值时,k也加1。

    最佳答案

    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!!:这两个是一样的,都是浮点型,只是控制台输出都会把后面的0加上的,是一样的,不用去操心这个

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人:答案的for(i=0;i<N;i++) 
    for(j=0;j<N;j++)
    if(i==0||i==N-1||j==0||j==N-1) 
    { av=av+w[i][j];
    k++;
    }
    return av/k; 都不懂

    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!!:那个for语句包括其循环体都是在求周边的和,然后返回值那个式子就是在求平均值啊

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人:哦,我想:

    for(i=0;i<N;i++) 

    for(j=0;j<N;j++)

    if(i==0||i==N-1||j==0||j==N-1) 

    { av=av+w[i][j];

    k++;

    }

    难道不会造成边上四个角的元素分别多算一次?

    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!!:为啥你会这么觉得呢?,i是行变量,四个角都是在行变量为0和N-1的时候加的,如果i不是这两个数中的一个,j怎么也不会加到四个角的,所以不用担心这个,你可以试一试

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人四个角都是在行变量为0和N-1的时候加的,然后列变量为0和N-1的时候再加一次,所以两次。

    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!!:你就光看列变量?四个角要行和列同时满足条件才行的,你自己先试一试再说,光想是没有用地

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人if(i==0||i==N-1||j==0||j==N-1),这边不是||吗?

    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!!:当你i=0的时候算过了一次上角度对不?,然后i就不可能再等于0了撒,所以上边角永远不可能再算一遍了撒,下边角同理;j是在i的循环体里面的,不是随意赋值的

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人||j==0||j==N-1) j==0不就代表第一列   j==N-1不就代表最后一列?

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人:第一列、第二列就包括了那四个边角

    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!!:你怎么就拐不过来也,这是嵌套for循环,只有i和j是11对应的假设是3*3

    ij

    00

    01

    02

    10

    11

    12

    20

    21

    22总共就这么些元素,挨着往下判断,你觉得会有一个元素能判断两次么?

    就算没有后面那个if判断语句,一个元素也只能遍历一次,根本就不会存在有一个元素会遍历两次,所以根本就不存在同一个元素判断两次的情况

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人:明白了,谢谢您!

    二级必过!!! 圈内达人 3594天前

    回复 嘿嘿大人{ av=av+w[i][j];
    k++;
    }
    return av/k; 

    不应该是av/(k+1);吗?k比实际的个数少一个,因为k=0时也算一个。 




    嘿嘿大人 一代宗师 3594天前

    回复 二级必过!!! av=av+w[i][j];
    k++;

    执行了k++才跳出的,不就相等于加了1了么?

    假设一共有3个;k最开始等于0

    执行第一次完了之后执行k++,k=1

    执行第二次完了又执行k++,k=2;

    执行完第三次又执行k++,k=3,然后退出循环了

    二级必过!!! 圈内达人 3593天前

    回复 嘿嘿大人:明白,谢谢您。

    嘿嘿大人 一代宗师 3593天前

    回复 二级必过!!!:不谢,明白就好,加油吧,嘿嘿

您还没有登录,所以不能回复该问题
我要回复

  • 0

    点赞

  • 扫一扫分享朋友圈

    二维码

  • 分享

相关问题