| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 822 人关注过本帖
标题:新手问题
只看楼主 加入收藏
mizhu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-11-12
收藏
 问题点数:0 回复次数:4 
新手问题
谢谢回  
     统计成绩
[问题描述]
  给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。
[基本要求]
  (1) 按总数高低次序,打印出名次表,分数相同的为同一名次;
  (2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。
搜索更多相关主题的帖子: 名次 学号 学生 打印 
2008-01-09 10:26
tianwangcccc
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-11-2
收藏
得分:0 
sdfg
先设一个学生类,包含各门课程,和总分。再弄个该类数组
再来一个排序算法就行了。自己遍遍吧,看别人写,不如自己写
2008-01-09 17:50
mizhu
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-11-12
收藏
得分:0 
回复 帖子
谢了,不过平时不努力,这个我写了点,总有错误
2008-01-09 20:15
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
以前写的一个,没写完
程序代码:
/*
    Name:  
    Copyright:  
    Author:  
    Date:   20-11-07   22:16
    Description:
1、add()记录每个学生的各科成绩
2、place()根据总分排出名次
3、aver()求平均分
4、search()根据姓名查询成绩  
5、print_result()打印出成绩单
*/
#include   <iostream>
#include   <fstream>
#include   <string>
#include   <map>
#include   <algorithm>
#include   <utility>

using   namespace   std;

typedef   multimap <string,   pair <string,   float>   >   multi_map;
typedef   multimap <string,   pair <string,   float>   > ::iterator   map_iter;
const   int   subject_num   =   6;

/*=========函数声明===============*/
multi_map   add();
map_iter   search(multi_map   name_score,   string   name,   map_iter   &beg);
float   aver(multi_map   name_score,   map_iter   beg,   map_iter   end);  

/*========1、add()记录每个学生的各科成绩=============*/
multi_map   add()
{
                cout   <<   "添加一个记录: "   <<   endl;
                cout   <<   "姓名: "   <<   flush;
                string   name;
                cin   >>  name;
                cout   <<   "学号: "   <<   flush;
                int   stu_num;
                cin   >>  stu_num;
                //添加成绩
                multimap <string,   pair <string,   float>   >   name_score;
                float   temp;
                string   subject[]   =   { "语文 ",   "数学 ",   "英语 ",   "物理 ",   "化学 ",   "生物 "};
                for   (int   ix   =   0;   ix   !=   subject_num;   ++ix)
                {
                                cout   <<   subject[ix]   <<   ": "   <<   flush;
                                cin   >>  temp;
                                name_score.insert(make_pair(name,   make_pair(subject[ix],   temp)));
                                if   (ix   ==   subject_num-1)
                                                cout   <<   "输入完成! "   <<   endl;
                }
                return   name_score;
}


/*============search()根据姓名查询成绩=============*/
/*它接受三个参数:name_score为存放信息的容器
                              name为要查询的姓名
                              &beg为额外返回的一个name_score.lower_bound(name)产生的迭代器  
                              end函数本身返回一个name_score.upper_bound(name)产生的迭代器
end和&beg用于初始化函数aver()的形参  
*/
map_iter  
search(multi_map   name_score,   string   name,   map_iter   &beg)
{ 
                beg   =   name_score.lower_bound(name);
                map_iter   end   =   name_score.upper_bound(name);
                if(beg   !=   name_score.end())  
                {                                                      
                                cout   <<   "以下是为您查询到的内容: "   <<   endl;  
                                while(beg   !=   end)
                                {
                                                cout   <<   beg-> second.first   <<   flush
                                                                <<beg-> second.second   <<   endl;
                                                ++beg;
                                }
                }
                else
                                cout   <<   "您要查找的数据不存在! "   <<   endl;

                return   end;  
}

/*============aver()求平均分=============*/
float   aver(multi_map   name_score,   string name, map_iter   beg,   map_iter   end)     //
{
                float   sum   =   0;
                beg   =   name_score.lower_bound(name);
                end   =   name_score.upper_bound(name);
                while(end   !=   beg)   
                {
                                sum   +=   beg-> second.second;
                                ++beg;
                }
                float   average   =   sum/subject_num;
                return   average;                                              
}                                
                               

/*=============主函数===========*/  
int   main()
{
                multi_map   add_it;
                add_it   =   add();
                cout   <<   "输入要查找的姓名: "   <<   flush;
                string   name;
                cin   >>  name;
                map_iter   beg,   end;
                end   =   search(add_it,   name,   beg);
                cout   <<   "平均分: "   <<   aver(add_it,   name, beg,   end)   <<endl;  
                system( "pause ");
                return   0;
} 


[[italic] 本帖最后由 随心 于 2008-1-9 20:50 编辑 [/italic]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-01-09 20:47
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
用了C++的语法,面向过程的(当然,你也可以把它封装起来),你参考下。

[[italic] 本帖最后由 随心 于 2008-1-9 20:53 编辑 [/italic]]

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-01-09 20:48
快速回复:新手问题
数据加载中...
 
   



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

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