You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言编写两数均值方差计算函数的数组赋值问题咨询

问题代码错误梳理
  • 条件判断写为赋值:if (i=0)是赋值操作,返回值永远为假,会永远走else分支,应该改为等值判断i == 0
  • 循环逻辑错误:for循环没有写闭合大括号,return语句被包含在循环体内,第一次循环执行完就直接返回,不会执行第二次赋值
  • 类型不匹配:均值、方差都是浮点数,用int类型数组存储会强制截断小数部分丢失精度;同时main函数中用int类型变量接收函数返回的指针,导致后续数组访问完全非法
  • printf格式化符不匹配:%lf对应double类型参数,原代码传入int类型值会输出乱码
可运行数组实现版本
#include <stdio.h>

double* statistics (float x, float y){
    double mean, var;
    // 用double类型数组存储浮点结果,静态数组保证函数退出后地址有效
    static double Arr[2];
  
    mean = (x + y) / 2;
    var = ((x - mean) * (x - mean) + (y - mean) * (y - mean)) / 2;
    // 无需循环,直接赋值即可
    Arr[0] = mean;
    Arr[1] = var;

    return Arr;
}

int main(){
    int num1 = 10, num2 = 5;
    // 用double指针接收返回的数组地址
    double *result = statistics(num1, num2);
    printf("%lf -- %lf", result[0], result[1]);

    return 0;
}

运行输出:7.500000 -- 6.250000

非数组实现方案

这里给出更安全的输出参数传递方案,避免静态数组线程不安全、多次调用覆盖值的问题:

#include <stdio.h>

// 用指针参数接收外部传入的地址,直接在对应地址写入结果
void statistics(float x, float y, double *mean, double *var) {
    *mean = (x + y) / 2;
    *var = ((x - *mean) * (x - *mean) + (y - *mean) * (y - *mean)) / 2;
}

int main(){
    int num1 = 10, num2 = 5;
    double mean, var;
    statistics(num1, num2, &mean, &var);
    printf("%lf -- %lf", mean, var);

    return 0;
}

如果需要封装为单个返回值,也可以用结构体实现,逻辑更清晰:

#include <stdio.h>

// 定义统计结果结构体
typedef struct {
    double mean;
    double variance;
} StatResult;

StatResult statistics(float x, float y) {
    StatResult res;
    res.mean = (x + y) / 2;
    res.variance = ((x - res.mean) * (x - res.mean) + (y - res.mean) * (y - res.mean)) / 2;
    return res;
}

int main(){
    int num1 = 10, num2 = 5;
    StatResult res = statistics(num1, num2);
    printf("%lf -- %lf", res.mean, res.variance);

    return 0;
}

内容的提问来源于stack exchange,提问作者guiromero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:36:08