有哪位高手帮我解决一下两个C++问题,万分感谢!

1.已知一个二维数组中存放一个班30人三门课学生的成绩,求每个人的平均成绩,每门课程的平均成绩。(用指针实现)
程序:
#include"iostream.h"
void pcave(double *t);
void psave(double *t);
void main()
{
double s[30][3]={{88,71,90},{94,93,79},{81,75,67},{72,69,83},{81,78,77},{89,69,71},{85,89,83},{78,67,69},{90,98,89},{83,77,79},{66,80,65},{77,79,85},{92,95,99},{99,75,78},{98,96,85},{87,68,69},{63,89,78},{95,94,91},{95,96,92},{93,98,82},{86,97,83},{84,78,72},{86,84,72},{76,96,81},{95,86,72},{73,86,87},{87,84,82},{91,68,69},{96,67,82},{83,84,99}};
double *p;
p=*s;
cout<<"全体学生三门课的成绩"<<endl;
for(int i=0;i<90;i++)
{ cout<<*p++<<" ";
if((i+1)%3==0) cout<<endl;
}
p=*s;
cout<<"每门课的平均成绩为:"<<endl;
pcave(p);
p=*s;
cout<<"每个学生的平均成绩为:"<<endl;
psave(p);
}
void pcave(double *t)
{
double sum[3];
for(int i=0;i<3;i++)
{ for(int j=0;j<30;j+=3)
sum[i]+=*t;
t+=3;
}
for(i=0;i<3;i++)
{ cout<<sum[i]/30;
cout<<endl;
}
}
void psave(double *t)
{
double sum[30];
for(int i=0;i<30;i++)
{
for(int j=0;j<3;j+=3)
sum[i]+=*t;
t++;
}
for(i=0;i<30;i++)
{ cout<<sum[i]/3;
cout<<endl;
}
}
2.六个学生的资料,要求先算出每个学生的平均成绩,再按平均成绩从大到小排列,依次输出。
程序:
#include "iostream.h"

struct student
{
int num;
char name[10];
double score_chinese;
double score_english;
double score_math;
}stu[6];

void ave(struct student stu[6]);
void arrange(struct student stu[6],double scroe[6]);

void main()
{
stu[6]={{001,"zhang",88,95,83},{002,"wang",98,95,77},{003,"li",76,84,97},{004,"zhao",85,95,87},{005,"sun",98,88,86},{006,"qian",74,82,90}};
cout<<"学生数据如下:"<<endl;
for(int i=0;i<6 ;i++)
cout<<stu[i].num<<stu[i].name<<stu[i]. score_chinese <<stu[i]. score_english <<su[i]t. score_math <<endl;
ave(struct student stu[6]);
arrange(struct student stu[6],double scroe[6]);
cout<<"学生成绩排序如下:"<<endl;
for(i=0;i<6;i++)
cout<<stu[i].num<<stu[i].name<<stu[i]. score_chinese <<stu[i]. score_english <<su[i]t. score_math <<endl;
}

void ave(struct student stu[6])
{
double ave[6] ;
for(int i=0;i<6;i++)
ave[i]=(stu[i]. score_chinese+ stu[i]. score_english+ su[i]t. score_math)/3;
cout<< "每个学生的平均成绩是:"<<endl;
for(i=0 ;i<6;i++)
cout<<stu[i].num<<stu[i].name<<ave[i]<<endl;
}

void arrange(struct student stu[6],double scroe[6])
{
struct student temp,*p ;
for(int i=0;i<5;i++)
for(int j=1;j>i;j++)
{if(score[i]<score[j])
{temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;
}
}
}

第一道题检查没错,但是输出结果不对;第二道题检查有许多标点符号的错误,就是不知道怎么改。请各位高手不吝赐教,谢谢!!!
谢谢你的帮助,但是第二道题第二个函数我修改如下,在主函数中为什么调用(arrange(stu,score))不了呢
void arrange(student stu[6],double score[6])
{
struct student *p;
int t[6]={0,0,0,0,0,0},k=0;
for(int i=0;i<5;i++,k++)
for(int j=1;j>i;j++)
{ if(score[i]>score[j])
t[k]=i;
else t[k]=j;
}
cout<<"学生成绩排序如下:"<<endl;
p=stu;
for(i=0;i<6;i++,k++)
{ p+=t[k];
cout<<p->num<<'\t'<<p->name<<'\t'<<p->score_chinese<<'\t'<<p->score_english<<'\t'<<p->score_math<<endl;
}
}

第1个回答  2009-12-08
1.修改后

#include<iostream>

using namespace std;

void pcave(double *t);
void psave(double *t);
void main()
{
double s[30][3]={{88,71,90},{94,93,79},{81,75,67},{72,69,83},{81,78,77},{89,69,71},{85,89,83},{78,67,69},{90,98,89},{83,77,79},{66,80,65},{77,79,85},{92,95,99},{99,75,78},{98,96,85},{87,68,69},{63,89,78},{95,94,91},{95,96,92},{93,98,82},{86,97,83},{84,78,72},{86,84,72},{76,96,81},{95,86,72},{73,86,87},{87,84,82},{91,68,69},{96,67,82},{83,84,99}};
double *p;
p=&s[0][0];
cout<<"全体学生三门课的成绩"<<endl;
for(int i=0;i<90;i++)
{ cout<<*p ++<<" ";
if((i+1)%3==0) cout<<endl;
}
p=&s[0][0];
cout<<"每门课的平均成绩为:"<<endl;
pcave(p);
p=&s[0][0];
cout<<"每个学生的平均成绩为:"<<endl;
psave(p);

}
void pcave(double *t)
{
double sum[3];
double *p;
sum[0] = sum[1] = sum[2] = 0.;

for(int i=0;i<3;i++)
{
p = t + i;
for(int j=0;j<30;j++) {
sum[i]+=*p;
p+=3;
}

}

for(i=0;i<3;i++)
{ cout<<sum[i]/30;
cout<<endl;
}
}
void psave(double *t)
{
double sum[30];
for( int k=0; k<30; k++ )
sum[k] = 0;

for(int i=0;i<30;i++)
{
for(int j=0;j<3;j++ )
sum[i]+=*t;
t++;
}
for(i=0;i<30;i++)
{ cout<<sum[i]/3;
cout<<endl;
}
}

2. 修改化后,指修改了语法错误. 剩下的自己做
#include <iostream>

using namespace std;

struct student
{
int num;
char name[10];
double score_chinese;
double score_english;
double score_math;
};

void ave(struct student stu[6]);
void arrange(struct student stu[6],double scroe[6]);

void main()
{
student stu[6]={
{001,"zhang",88,95,83},
{002,"wang",98,95,77},
{003,"li",76,84,97},
{004,"zhao",85,95,87},
{005,"sun",98,88,86},
{006,"qian",74,82,90}
};
cout<<"学生数据如下:"<<endl;
for(int i=0;i<6;i++)
cout<<stu[i].num<<stu[i].name<<stu[i].score_chinese <<stu[i].score_english <<stu[i].score_math <<endl;
ave( stu );
double score[6];

arrange( stu,score );
cout<<"学生成绩排序如下:"<<endl;
for(i=0;i<6;i++)
cout<<stu[i].num<<stu[i].name<<stu[i]. score_chinese <<stu[i]. score_english <<stu[i]. score_math <<endl;
}

void ave(struct student stu[6])
{
double ave[6] ;
for(int i=0;i<6;i++)
ave[i]=(stu[i]. score_chinese+ stu[i]. score_english+ stu[i]. score_math)/3;
cout<< "每个学生的平均成绩是:"<<endl;
for(i=0 ;i<6;i++)
cout<<stu[i].num<<stu[i].name<<ave[i]<<endl;
}

void arrange(struct student stu[6],double score[6])
{
struct student temp,*p ;
for(int i=0;i<5;i++)
for(int j=1;j>i;j++)
{if(score[i]<score[j])
{temp=stu[i]; stu[i]=stu[j]; stu[j]=temp;
}
}
}本回答被提问者采纳

vc++学习困惑,对于初学者怎么才能学好,但求高手指点。
先把C,C++给学好! 注意是学好! 而不仅仅是限于语法知识点的掌握,,,建议先把这些东东搞得非常熟了,,,那你就可以去学VC的Windows应用程序开发,先不要学MFC 吧,,对于初学者MFC把一切给封装起来,,而且那些个类多且关系复杂,如果对Win32应用程序没个大概了解,很难理解,并且也不知变通!

c++语言的学习问题 请过来人帮帮忙啊 copy别人的就算了 分数全部奉上...
c++ Primer 确实是一本相当好的书,我也看了,不过应用于大型工具的那一部分没有看,我觉得你现在可以看看数据结构,还有MFC的一些技术,你如果c++ Primer 看完了,并且了解的很透彻就已经达到中级水平了,因为那本书本身就是写给中级程序员的,要想c++有所突破,你得多编程,学一些数据结构,然后编一...

...的时候出现了如下问题,请大神来解答一下是什么问题,万分感谢...
可能是你的程序在语法上没有错误,但在逻辑上存在问题,比如溢出、读取内存位置错误等。重新检查一下源代码的逻辑功能。

请帮我看看这个c++程序是什么错误 应该怎样改
首先,表示,窗口程序编写没有问题。我想,你的问题是,编译环境设置问题。如果是VC++6.0下,找到属性选项,选择设置 菜单项。进入 链接选项卡 在最下面的一个文本框中,找到console修改成windows就可以编译运行了。

我是软件工程大二学生,选的是C++方向,现在对专业方向十分迷茫。_百度知 ...
普通级c++,做游戏,门槛不太高,脑子够用,经常加班,工资还算过得去。屌丝级C#,木有门槛,毕业生俩周左右上手,工资刚够吃饭(3000-4000北京),也能学到一些东西,但是只是针对C#,对于其他语言作用真的不大,如果进度正常,两个月后就开始后悔,开始想要跳槽。说实话,没必要一心往开发走,我的一...

【C++编程题】求大佬帮忙 求详细过程 万分感谢 急!!!
按下列要求编写程序 (1)从键盘输入若干名学生数据包括学号、姓名、三门课成绩),计算每位学生的总分,将原有数据和计算出的总分存入二进制文件stu.bin。 (2)从二进制文件stu.bin中依次输入每个学生的数据和该数据在 stu.bin文件中的位置指针值(即索引),按总分降序排序后,将已排序的学生数据的...

最高财富值!求两道C++题目的源代码和每个代码的功能详解
一、程序功能简介 该程序是TICACTOE游戏,棋盘为3×3,3个棋子连起来即为赢。输入参数时,如输入的数字超出边界或已有棋子的地方再输入,则提示出错,要求重新输入。二、课程设计要求 (1) 将程序改写成类。(2) 将棋盘扩充成4×4。(3) 统计输赢结果并打印输出。(4) 选做:使游戏更生动。

请懂C++的高手帮个忙~!
返回当天的修正儒略日(modified Julian date)mjd 从1582年10月15开始使用格利高里历(就是阳历)(教皇格利高里十三世丢掉了十天--1582年十月5到14,改进了 闰年算法--400年97闰).\/ void cal_mjd(int mn,double dy,int yr,double *mjd){ static double last_mjd, last_dy;static int last_mn...

C++问题!十万火急 关于 getnameinfo
好了不用想了,你的头文件版本不对,不信自己打开,VC6.0版本是没有这个函数定义的 VC98\\Include\\Ws2tcpip.h头文件,里面没有getnameinfo这个函数和NI_NUMERICHOST的定义 ,换个版本吧

...每次打开都要求输入播放密码 有没有高人帮忙破解 万分感谢...
破解需要深厚的汇编知识,将exe等可执行文件反汇编成汇编源程序,然后修改程序入口

相似回答