📜  门| GATE-CS-2000 |问题24(1)

📅  最后修改于: 2023-12-03 15:42:14.877000             🧑  作者: Mango

门 | GATE-CS-2000 | 问题24

该问题是由印度教育测试服务机构(Indian Institute of Technology)发布的计算机科学入门门考试(GATE-CS-2000)的第24个问题。

问题描述

下面的程序代码(使用C语言编写)有什么错误?该程序的目的是计算一个一维数组的平均值,该数组的尺寸为N。

float average(int *array, int n)
{
    int sum = 0;
    float avg;
    for(int i = 0; i <= n; i++)
    {
        sum += *(array+i);
    }
    avg = (float)sum/n;
    return avg;
}
解答

该程序的错误在于计算平均值时的除法运算,应该使用浮点数进行运算而不是整数。另外,在for循环中,由于i是从0开始循环到n,因此应该用小于号(<)而不是小于等于号(<=)来判断循环的结束条件。

下面是修改后的程序代码:

float average(int *array, int n)
{
    int sum = 0;
    float avg;
    for(int i = 0; i < n; i++)
    {
        sum += *(array+i);
    }
    avg = (float)sum/n;
    return avg;
}

该程序的时间复杂度为O(N),空间复杂度为O(1)。

总结

此问题测试的是程序员对for循环、指针和除法运算的掌握情况。在编写计算平均值函数时,需要格外注意除法运算的类型。