#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int n,m;
n=3,m=3;
string *std = new string[n];
string *cls = new string[m];
int (*src)[m] = new int [n][m];
void main()
{
cout<<"请输入学生个数:"<<endl;
cin>>n; //改变n的大小
cout<<"请输入功课数:"<<endl;
cin>>m; //改变m的大小
inputscore();
studentaverage();
classaverage();
highest();
delete []std;
delete []cls;
delete []src;
}
void inputscore()
{
for(int a=0;a<m;a++)
{
cout<<"请输入科目"<<a+1<<"的名称:"<<endl;
cin>>cls[a];
}
for(int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个学生姓名:"<<endl;
cin>>std[i];
cout<<"请输入学生成绩:"<<endl;
for(int j=0;j<m;j++)
{
cin>>src[i][j];
}
}
}
void studentaverage()
{
int aver1=0,sum1=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
sum1=sum1+src[i][j];
}
aver1=sum1/m;
cout<<std[i]<<"的平均分是:"<<aver1<<endl;
sum1=0;
aver1=0;
}
}
void classaverage()
{
int aver2=0,sum2=0;
for(int j=0;j<m;j++)
{
for(i=0;i<n;i++)
{
sum2=sum2+src[i][j];
}
aver2=sum2/n;
cout<<cls[j]<<"的平均分:"<<aver2<<endl;
sum2=0;
aver2=0;
}
}
void highest()
{
int high=0,num=0;
for(int j=0;j<m;j++)
{
for(int i=0;i<n;i++)
{
if(high<src[i][j])
{high=src[i][j];
num=i;
}
}
cout<<cls[j]<<"的最高分:"<<endl;
cout<<std[num]<<"是最高分"endl;
high=0;
num=0;
}
}
总说数组未定义,完了>>输入号有的还说不对了,怎么回事啊
数组确实没有定义,首先是这里一段:
int n,m;n=3,m=3;
string *std = new string[n];
string *cls = new string[m];
int (*src)[m] = new int [n][m];
你在这里定义了几个全局变量,当然也为他们赋了初值,部分上说也就是
:std 字符串数组3个大小
:cls 字符串数组3个大小
然后,在下一段程序里:
cout<<"请输入学生个数:"<<endl;cin>>n; //改变n的大小
cout<<"请输入功课数:"<<endl;
cin>>m; //改变m的大小
你选择了改变m,n的大小,虽然这些都改变了,可是作为全局变量的字符串数组std或cls的大小都没改变,这样就出现了没有定义数组的错误。
改动措施:输入m,n后使用new 动态分配字符串数组,那样就不会出错了。
PS:
你的程序真差。
追问C++都好久不动了,忘得已经差不多了。
如果把上面的全局放回下面动态分配,子函数调用不了了啊?
还有那个>>,<<出错是怎么回事啊?
大神谢谢教导Q.Q
在主函数里,申明两个字符串数组,然后动态分配就可以了:
main(){
int n=3,m=3;
string *std,*cls;
cout<<"请输入学生个数:"<<endl;
cin>>n; //改变n的大小
std=new string[n]; //动态分配
cout<<"请输入功课数:"<<endl;
cin>>m; //改变m的大小
int (*src)[m] = new int [n][m]
cls=new string[m];
inputscore(std,cls,src,n,m);//里面参数照实际而定
studentaverage(std,cls,src,n,m);
classaverage(std,cls,src,n,m);
highest(std,cls,src,n,m);
delete []std;
delete []cls;
delete []src;
}
至于不使用全局变量,你可以各个函数的参数改动一下。