C++程序,有关数组,这个程序通过编译但无法正常运行,高手帮忙看看

2025-03-06 20:03:03
推荐回答(3个)
回答1:

你这个程序的问题:
1、首先是这一句:int T,i,k,j,n,sum=0,ave,count=0;定义的变量i和k没有初始化,没有初始化之后就直接用了:

double *a=new double[i];
double *b=new double[k];
没有初始化的变量它的值都是不确定的!但是在Windows下编译的时候,通常没有初始化的值都是一个负数,你动态申请创建有负数个元素的数组,运行程序的时候能不报错么?

2、就是你的程序要正确运行还有一些隐含条件:
k必须大于或者等于T,而且i必须大于或者等于n

这是因为你的循环里是以T和n为循环条件,如果k小于T或者i小于n,就会数组越界,虽然运行不一定报错,逻辑上已经错了

3、你new申请的动态内存没有释放,这个不会导致运行报错,但是如果程序很多地方都是这样的话,内存泄露会很严重

回答2:

#include
using namespace std;
void main()
{
    int T,i,k,j,n,sum=0,ave,count=0;
    double *a;//=new double[i]; //去掉这里
    double *b;//=new double[k];//去掉这里
    cin>>T;
    b=new double[T];//放这里
    for(k=0;k    {
        cin>>n;
        a = new double[n];//放这里
        for(i=0;i        {
            cin>>a[i];
            sum+=a[i];
        }
        ave=sum/n;
        for(i=0;i        {
            if(a[i]>ave)
                count++;
        }
        b[k]=count;
        delete[] a;//加这个
    }
    for(j=0;j        cout<
    delete[] b;//加这个
}

回答3:

i,k要有初值,new用完要delete