C++题目如图,只需第一题,要用二维数组不能用结构体

作者&投稿:苗屈 (若有异议请与网页底部的电邮联系)
C++ 怎样动态初始化有二维数组的结构体~

结构体这里
struct MGraph
{...};
然后定义处
MGraph *G = new MGraph();

对于网友采纳答案的质疑:
不知道你是如何坦言“不能用“这三个字的?首先,c++中结构体和类唯一的区别在于默认的访问权限不同,其余完全一样。其次,int *p = new int(5),请问我的new新建的是类还是int型变量?最后,既然用了c++,就不要在用malloc这种C语言的机制了。不知道不要装。

最后对于网友采纳的答案,附一段可编译运行的代码,质问关于new不能用于分配内存给结构体

结构体就是个类型,你完全可以定义一个数组指针。

下面程序测试过基本能完成题目的要求,平均成绩精确到十分位。
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<string>
using namespace std;
int join(int **&p){
int num;
char c;
cout<<"要添加的学生数量是:"<<endl;
cin>>num;
p=new int*[num];
for(int i=0;i<num;i++)
p[i]=new int[4];
for(int i=0;i<num;i++){
system("cls");
cout<<"分别输入第"<<i+1<<"个学生的学号,高数,英语,离散成绩:"<<endl;
for(int j=0;j<4;j++)
cin>>p[i][j];}
cout<<"所有学生的信息已添加完毕,按回车键继续..."<<endl;
fflush(stdin);
scanf("%c",&c);
system("cls");
return num;
}
bool make_sure(){
string s;
bool bo=true;
cout<<"确认退出请输入'y',取消退出请输入‘n’,输入其他无效"<<endl;
while(getline(cin,s)){
if(s=="y"){system("cls");
break;}
else if(s=="n"){
system("cls");

bo=false;break;
}
else
{system("cls");
cout<<"确认退出请输入'y',取消退出请输入‘n’,输入其他无效"<<endl;
}

}

return bo;
}
void show_mark(int**&p,int num){
char c;
int i=0,j,t;
bool bo;
while(1){
bo=1;

cout<<"输入排序方式:\n"<<"1.学号降序,2.学号升序,3.高数降序,4.高数升序,5.英语降序,6.英语升序,7离散降序,8离散升序,9.退出排序"<<endl;
while(cin>>c){
fflush(stdin);
system("cls");

switch(c){
case'1':i=0;j=0;cout<<"按学号降序排列:"<<endl;break;
case'2':i=0,j=1;cout<<"按学号升序排列:"<<endl;break;
case'3':i=1,j=0;cout<<"按高数降序排列:"<<endl;break;
case'4':i=1,j=1;cout<<"按高数升序排列:"<<endl;break;
case'5':i=2,j=0;cout<<"按英语降序排列:"<<endl;break;
case'6':i=2,j=1;cout<<"按英语升序排列:"<<endl;break;
case'7':i=3,j=0;cout<<"按离散降序排列:"<<endl;break;
case'8':i=3,j=1;cout<<"按离散升序排列:"<<endl;break;
case'9':if(make_sure())i=4;else {bo=false;cout<<"已经取消退出排序..."<<endl;}break;
default:system("cls");cout<<"输入有误,选择1至8输入"<<endl;break;
}
break;
}
if(!bo)
continue;
if(i==4)
break;
if(j)
for(int k=0;k<num;k++)
for(int z=k+1;z<num;z++)
if(p[k][i]>p[z][i])
for(int x=0;x<4;x++){
t=p[z][x];
p[z][x]=p[k][x];
p[k][x]=t;
}
if(!j)
for(int k=0;k<num;k++)
for(int z=k+1;z<num;z++)
if(p[k][i]<p[z][i])
for(int x=0;x<4;x++){
t=p[z][x];
p[z][x]=p[k][x];
p[k][x]=t;
}

cout<<"学号\t"<<"高数\t"<<"英语\t"<<"离散\t"<<endl;
for(int i=0;i<num;i++){
for(int j=0;j<4;j++)
cout<<p[i][j]<<"\t";
cout<<endl;}
}

}
void subject_avarage(int**&p,int num){
float sum;
cout<<"平均成绩:\n"<<"语文\t"<<"高数\t"<<"离散\t"<<endl;
for(int i=1;i<4;i++){
sum=0;
for(int j=0;j<num;j++)
sum+=p[j][i];
cout<<setiosflags(ios::fixed)<<setprecision(1)<<sum/num<<"\t";
}
cout<<endl;
}
void student_avarage(int**&p,int num){
float sum;
cout<<"学号\t"<<"平均成绩\t"<<endl;
for(int i=0;i<num;i++){
sum=0;
for(int j=1;j<4;j++)
sum+=p[i][j];
cout<<p[i][0]<<"\t"<<setiosflags(ios::fixed)<<setprecision(1)<<sum/3<<"\t"<<endl;
}
cout<<endl;
}
void show_extreme(int **&p,int num){
int mark,k;
cout<<"\t"<<"高数(学号)\t"<<"英语(学号)\t"<<"离散(学号)\t"<<endl;
cout<<"最高\t";
for(int i=1;i<4;i++){
mark=p[0][i];
k=0;
for(int j=1;j<num;j++)
if(mark<p[j][i]){

mark=p[j][i];

k=j;
}
cout<<mark<<"("<<p[k][0]<<")\t\t";
}
cout<<endl;
cout<<"最低\t";
for(int i=1;i<4;i++){
mark=p[0][i];
k=0;
for(int j=1;j<num;j++)
if(mark>p[j][i]){

mark=p[j][i];

k=j;
}
cout<<mark<<"("<<p[k][0]<<")\t\t";
}
cout<<endl;
}
int main(){
int **p;
char c;
int num=join(p);
bool bo1;
while(1){
bo1=1;

cout<<"1.按要求排序输出,2.输出每门科目平均成绩,3.输出每个学生平均成绩,4输出每门科目最高、最低成绩,5.退出...";
while(cin>>c){
system("cls");
switch(c){
case'1':system("cls");show_mark(p,num);cout<<"已经确认退出排序..."<<endl;break;
case'2':subject_avarage(p,num);break;
case'3':student_avarage(p,num);break;
case'4':show_extreme(p,num);break;
case'5':if(make_sure())bo1=false;else cout<<"已经取消退出程序..."<<endl;break;
default:cout<<"输入有误,需要重新输入"<<endl;break;
}
break;
}
if(!bo1)
break;
}
cout<<"已经确认退出程序..."<<endl;
}

直接可以用二维数组就可以实现,没细看,大概思想就是定义几个二维数组来代表各科,a[][],b[][],c[][],分别代表高数,英语,..,一维坐标代表学号,比如a[2][],代表学号2的高数成绩。
step1:【取】,利用scanf()获取各学生,各科的成绩,分别存入对应二维数组。
step2:【算】,利用排序算法(比如冒泡),计算出每个数组的最值,和平均分。
step3:【显】,for()循环把答案给显示出来。
over。


初三数学求解。题目如图。要详细过程。最佳答案选最详细的。不要只给...
解:由图形可以看出:第N个图形高为N,底边长为N 所以由:1+2+3+...+N=120 即 :(1+N)*N\/2=120 (N为自然数)由此可解得:N=15

离散数学 题目如图 我只求出值为一 ,但题目叫我先求主合取范式……不...
真值为1的话,主合取范式就是空的式子,然后主析取范式,就是全部的极小项,析取组成主析取范式

线性代数,如图所示题中,验证a1a2a3为R3的一个基,为什么只需验证a1a2...
因为它题目里面问的是R3,即它已经告诉你了这个向量空间的维数是3,或者说如果把向量空间看做向量组的话,题目就已经告诉你了这个向量组的秩是3,所以a1,a2,a3只要它们线性无关,就可以证明它们是R3的一个基。

高数题微分方程初值问题求解。题目如图,写出详细过程在纸上
图一 其实从这里我们可以看出,完全解和通解是不同的,在判断y'的正负号时,我们根据已知条件来取其符号,这样算出来是通解,即满足已知条件的通常解,如果是完全解的话,无论正负都应该考虑的。。。不过书上叫求的一般是通解。

题目如图 微分方程求解 最后根据条件只算出C1 另一个C2如何求解呢_百度...
C2'是一个常数,加上一撇'只是为了与后面的C2区分一下,因为C2'是可以合并为新的常数C2.C2=e^(C2').实际上按照原来的形式y=e^(C1x+C2)也可以,通解的表示式并不唯一,适当的通分、组合等等都可以进行.

高等数学,极坐标下旋转体体积问题。题目和方法如图。由对称性只需考虑0...
回答:注意r的意义 r≥0必须成立 所以cos2θ≥0 θ在第一象限部分[0,π\/2]了, 而应该取[0,π\/4]

题目如图,建设银行,慎重考虑作答
题目太过简单,无需答案,扫一眼题目就可直接写出正确答案。正确答案是“4:不收费”给你精讲下这道题的分析全过程:首先不看题目,只看答案。选项1:找遍全中国,也找不到有哪个银行会收1元\/月手续费。选项2:只有个别商业银行会这样收费,或者部分城市的四大行(工、农、建、中)针对收费标准...

数学题 题目:如图,一只狗被一根12米长的绳子拴在一建筑物的墙角上,这...
=π*12^2*(360-60)\/360+2π*(12-9)^2*120\/360 =π*12^2*5\/6+2π*3^2\/3 =120π+6π =126π ≈396(平方米)

重赏!八年级下册物理题目求救(需要完整过程)
2.根据标示可以知道,该电池可以提供的电能为W=3.6*1.2=4.32焦。t=W\/P=4.32\/0.5=8.64小时。3.P=W\/t=1.92\/48=0.04(千瓦)=40瓦 4.由题目可以知道,电能表转2500R所用的电量是W=Pt=UIt=220*3*3600=2376000焦。所以50转所用的电能应该是2376000*50\/2500=47520焦。最后,用电器的...

求帮忙,很简单的一个问题,只需要动一下鼠标就可以了,加10分啊...
求帮忙,很简单的一个问题,只需要动一下鼠标就可以了,加10分啊,在线等 请大家在百度里输入“14.5浮力计算题”然后搜索,点有菁优网的那个网址,然后把...(g=10N\/kg) 显示解析26.有一个弹簧测力计挂着一个实质圆柱体,当圆柱体逐渐浸入装有水的柱形烧杯过程中(如图所示),观察记录弹簧测力计的示数变化如下...

临河区15315176292: 求助:3道C++的编程题~!~!~!~!~!!!!! -
车良壮骨: //第一题#include void main() { int a,b,c; for(a=1;a for(b=0;b for(c=1;c if(100*(a+c)+10*(b+b)+a+c==1333) cout}//第二题#include #include int sushu(int n) { for(int i=2;i if(n%i==0) return 0; return 1; } void main() { int n; cout cin>>n; if(n%2!=0||n cout else ...

临河区15315176292: c++ 编程题 2道
车良壮骨: //第一题: #include <iostream> using namespace std; int main() {int i=0;for(int a=0;a<50;a++){for(int b=0;b<50;b++){for(int c=0;c<50;c++){if((a*0.5+b*1.5+c*5==50)&&(a+b+c==50)){i++;cout<<a<<" "<<b<<" "<<c<<endl;}}}}...

临河区15315176292: c++一道简单题目
车良壮骨: int a = 1; int mut(int base,int exponet) { if (base == 0); return 0; if(exponet == 0) return 1; for(int i = 0;i < exponet;i++) a *= base; return a; }int a = 1;应该在函数里面

临河区15315176292: 谁能帮我写一个C++程序啊?下午就要用!题目是:1!+2!+3!+++m!
车良壮骨: 代码: #include<iostream.h> void main() { int i,j,m; long temp,sum=0; cout<<"请输入m的值"<<endl; cin>>m; for(i=1;i<=m;i++) { temp=1; for(j=1;j<=i;j++) { temp=temp*j; } sum=sum+temp; } cout<<"1!+2!+3!+++m!= "<<sum<<endl; } 图:

临河区15315176292: 第一题怎么做,用c++程序做,#include<stdio.h>的形式不要用具体数字,我要用程序任 -
车良壮骨: #include <stdio.h> using namespace std; int main() { double a,b,c; cout<<"请输入a和b的值:"; cin>>a>>b; c=a+b; cout<<"a+b="<<c<<endl; return 0; }#include <stdio.h> using namespace std; int main() { double a,b; cout<<"请输入a和b的值...

临河区15315176292: 1个简单的C++编程题
车良壮骨: #include<stdio.h> #include<string.h> struct xp {char name[10]; int fen; }person[5]={{'T',0},{'Z',0},{'W',0},{'L',0},{'X',0}}; main() {int i,j; char n[10]; for(i=0;i<10;i++) {scanf("%s",&n); for(j=0;j<5;j++) if(strcmp(person[j].name,n)==0)person[j].fen++; } printf(...

临河区15315176292: 求解C++的题目
车良壮骨: 第一题:3,4,3,4,3 第二题:1

临河区15315176292: C++编程2道题目
车良壮骨: 第一题: #include <iostream> #include <iomanip> #include <string.h> using namespace std; class Student { private: char* name; int snum; public: Student(const char* name, int snum); ~Student(); void SetMember(int snum); void ShowMember(); }...

临河区15315176292: C++编程题目
车良壮骨: #include <iostream> using namespace std; main() { int a,num[5],i; cin>>a; i=0; while(a!=0) { num[i]=a%10; a=a/10; i++; } for(i=4;i>=0;i--) { switch(i) { case 4:cout<<"万位:"<<num[i]<<"\n";break; case 3:cout<<"千位:"<<num[i]<<"\n";...

临河区15315176292: C++编程题
车良壮骨: 第一题: #include "iostream.h" int N,R; void NR(int* result,int N,int r) { int i,j,k; for(i=1;i<=N;i++) { if(result[r-1]<i) { result[r]=i; if(r==R) { for(j=1;j<=R;j++) { cout<<result[j]<<" "; } cout<<endl; } else { k=r+1; NR(result,N,k); } } } } void main() { int * result; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网