| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 709 人关注过本帖
标题:求助 ¤c++函数改错
只看楼主 加入收藏
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
 问题点数:0 回复次数:6 
求助 ¤c++函数改错

#include <iostream>
#include <string>
#include <iomanip>
#define N 3
#define M 5
using namespace std;


struct stu
{string name;
float score[M];
int mingci;
float ave;

}student[N];

float ave[M];
string kemu[M];

void getin() //主录入函数
{
float sum=0;
int i=0,j;
while (i<N)
{cout<<"###################################"<<endl;

cout<< "输入学生的姓名:";
cin>>student[i].name;

cout<<"输入学生的五科成绩:";
for(j=0;j<M;j++)
cin>>student[i].score[j];
i++;
}
}


void getinkm() //录入科目名
{

kemu[0]="电路";
kemu[1]="高数";
kemu[2]="c++";
kemu[3]="线代";
kemu[4]="英语";

}

void serch()//找出最高的分数所对应的学生和课程并输出
{
int j=0,i,k,max;
getinkm();
cout<<endl<<endl<<"各科目最高分:\n";

do
{ for(i=0;i<N-1;i++)
{
max=i;
for(k=i+1;k<N;k++)
if(student[max].score[j]<=student[k].score[j])
max=k;

cout<<setw(8)<<kemu[j]<<setw(8)<<student[max].name<<':'<<student[max].score[j]<<endl;

++j;
}
}while(j<M);
}


int main()
{
getin() ;

serch();
}

**************************************************************
结果如下
###################################
输入学生的姓名:yy
输入学生的五科成绩:99 88 77 66 55
###################################
输入学生的姓名:pp
输入学生的五科成绩:99 98 65 88 55
###################################
输入学生的姓名:uu
输入学生的五科成绩:55 88 77 98 23


各科目最高分:
电路 pp:99
高数 pp:98
c++ uu:77
线代 uu:98
英语 pp:55
uu:0
Press any key to continue
************************************************************
问题
serch();函数运行结果不对,达不到我预定的结果
输出后还多出最后一个结果 uu:0

当最高分成绩相同时也不能全部把他们的名字输出(我选者了输出后面的名字)

有时输出的个别结果甚至根本不是最高分

小弟做了 3天了也没找出毛病
遗憾啊!!

希望高手指点一下,只修改serch();函数,小弟万分感谢!!!!

再谢!!!
再谢!!!!

搜索更多相关主题的帖子: 函数 改错 
2007-09-11 09:59
远去的列车
Rank: 1
等 级:新手上路
威 望:2
帖 子:205
专家分:0
注 册:2007-8-7
收藏
得分:0 
我编译怎么不出现 uu:0?

这样查找比较:

void serch()
{
int i,k,max;
getinkm();
cout<<endl<<endl<<"各科目最高分:\n";

for (i=0; i<M; i++)
{
max = 0;
for (k=1; k<N; k++)
if (student[k].score[i] > student[max].score[i])
max = k;
cout<<setw(8)<<kemu[i]<<setw(8)<<student[max].name<<':'<<student[max].score[i]<<endl;
}
}

[此贴子已经被作者于2007-9-11 10:23:50编辑过]


C++学习
2007-09-11 10:05
远去的列车
Rank: 1
等 级:新手上路
威 望:2
帖 子:205
专家分:0
注 册:2007-8-7
收藏
得分:0 

对你的程序很多疑问:

kemu[M]定义的时候为什么不直接初始化,偏要写个函数
C++用类代替C的Struct
输入比较繁锁,而且输入数据或个数不对时没有处理


C++学习
2007-09-11 10:28
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
得分:0 
kemu[M]定义的时候为什么不直接初始化
是因为这个程序只是我找出来出错的部分
老师要我们用结构体编一个大点的程序
整个程序不是这个样子的
我把错的函数抠出来咯





谢谢你 帮助哦!!!

for(int i=0;i<无穷大;i++){我问牛鬼蛇神:我这样快乐好???答曰:你不快乐吗??}
2007-09-11 13:12
远去的列车
Rank: 1
等 级:新手上路
威 望:2
帖 子:205
专家分:0
注 册:2007-8-7
收藏
得分:0 
呃,当最高分成绩相同时 全部输出,用这种笨方法吧(得到最高分后再查询)

void search()
{
int i,k,max;
getinkm();
cout << endl << endl << "各科目最分:" << endl;

for (i=0; i<M; i++)
{
max = 0;
for (k=1; k<N; k++)
{
if (student[k].score[i] > student[max].score[i])
max = k;
}

cout << setw(8) << kemu[i] << endl;
for (k=0; k<N; k++)
{
if (student[k].score[i] == student[max].score[i])
cout << setw(16) << student[k].name << ':'
<< student[k].score[i] << endl;
}
}
}

C++学习
2007-09-11 14:16
如果快乐↑
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-6-25
收藏
得分:0 
谢谢你拉

搞定咯

for(int i=0;i<无穷大;i++){我问牛鬼蛇神:我这样快乐好???答曰:你不快乐吗??}
2007-09-11 14:51
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
开学了,论坛人就多了!

Fight  to win  or  die...
2007-09-11 22:17
快速回复:求助 ¤c++函数改错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045193 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved