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

C++统计计算程序:首次随机数集合最小值始终为0的问题排查

问题排查与修复方案

核心问题1:未初始化变量导致最小值异常

你在初始化smallest_num和largest_num时,使用了未赋值的rand_num_2:

int smallest_num=rand_num_2, largest_num=rand_num_2;

rand_num_2是main函数的局部变量,未初始化时会包含随机垃圾值,在你的环境中恰好初始为0,而生成的随机数范围是1-100,后续比较时最小值自然一直停留在0。

核心问题2:拼写错误导致循环逻辑异常

循环条件中的rand_num_1-va1是拼写错误,应该是rand_num_1-1:

for (int i=0; i<=rand_num_1-va1; i++)

va1是未定义标识符,会直接导致编译失败,建议把循环条件改成i < rand_num_1,更直观且不易出错。

额外问题:累计变量未重置

当前代码中sum_of_squares仅在初始化时设为0,多次运行程序时会持续累加前一次的统计值,导致结果错误,需要在每次循环开头重置。

修复后的关键调整

  1. 修正最值初始化逻辑
    将最小值初始化为随机数范围的上限(100),最大值初始化为下限(1),确保第一次比较就能正确更新:

    int smallest_num = MAX_SET_2;
    int largest_num = MIN_SET_2;
    
  2. 修正循环条件

    for (int i=0; i<rand_num_1; i++)
    
  3. 重置累计变量
    在do-while循环开头添加:

    sum_of_squares = 0;
    square_of_sum = 0;
    sum = 0;
    
  4. 修复整数除法问题
    原代码中average=sum/rand_num_1是整数除法,会丢失小数部分,需强制转换为浮点数:

    average=static_cast<float>(sum)/rand_num_1;
    

完整修复代码

#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdlib>

using namespace std;

const int SEED_VALUE=5;
const int MIN_SET_1=2;
const int MAX_SET_1=15;
const int MIN_SET_2=1;
const int MAX_SET_2=100;

int main()
{
    int rand_num_1, rand_num_2, sum_of_squares=0, square_of_sum=0,sum=0;
    float average=0, standard_deviation=0;
    string again_value;

    srand(SEED_VALUE);

    do 
    {
        cout<<"The random number are: ";
        int smallest_num = MAX_SET_2;
        int largest_num = MIN_SET_2;
        sum_of_squares = 0;
        square_of_sum = 0;
        sum = 0;

        rand_num_1=MIN_SET_1+(rand()% (MAX_SET_1-MIN_SET_1+1));

        for (int i=0; i<rand_num_1; i++)
        {
            rand_num_2=MIN_SET_2+(rand()% (MAX_SET_2-MIN_SET_2+1));
            cout<<rand_num_2<<"  ";
        
            sum+=rand_num_2;
            sum_of_squares+=(rand_num_2*rand_num_2);
        
            if (rand_num_2<smallest_num)
            {
                smallest_num=rand_num_2;
            }
        
            if (rand_num_2>largest_num)
            {
                largest_num=rand_num_2;
            }
        }

        square_of_sum=sum*sum;
        average=static_cast<float>(sum)/rand_num_1;
        standard_deviation=sqrt((sum_of_squares-(static_cast<float>(square_of_sum)/rand_num_1))/(rand_num_1-1));

        cout<<endl;
        cout<<"Number of values:"<<setw(12)<<rand_num_1<<endl;
        cout<<"Smallest:"<<setw(20)<<smallest_num<<endl;
        cout<<"Largest:"<<setw(21)<<largest_num<<endl;
        cout<<"Sum:"<<setw(25)<<sum<<endl;
        cout<<setprecision(2)<<fixed;
        cout<<"Average:"<<setw(21)<<average<<endl;
        cout<<"Standard deviation:"<<setw(10)<<standard_deviation<<endl<<endl;

        cout<<"Again (Y/N)? ";
        cin>>again_value;
        cout<<endl;

        average=0;
        standard_deviation=0;
    }
    while (again_value=="Y"|| again_value=="y");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:15:42