你这个程序的问题:
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申请的动态内存没有释放,这个不会导致运行报错,但是如果程序很多地方都是这样的话,内存泄露会很严重
#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;jcout<
delete[] b;//加这个
}
i,k要有初值,new用完要delete