设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1464|回复: 4
打印 上一主题 下一主题

新手问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 03:51:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谢谢回  
     统计成绩
[问题描述]
  给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名以及各科成绩组成。对学生的考试成绩进行有关统计,并打印统计表。
[基本要求]
  (1) 按总数高低次序,打印出名次表,分数相同的为同一名次;
  (2) 按名次打印出每个学生的学号、姓名、总分以及各科成绩。
2#
发表于 2009-11-3 03:51:39 | 只看该作者
先设一个学生类,包含各门课程,和总分。再弄个该类数组
再来一个排序算法就行了。自己遍遍吧,看别人写,不如自己写
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 03:51:40 | 只看该作者
谢了,不过平时不努力,这个我写了点,总有错误
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 03:51:43 | 只看该作者
以前写的一个,没写完
程序代码:
/*
    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]]
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 03:51:45 | 只看该作者
用了C++的语法,面向过程的(当然,你也可以把它封装起来),你参考下。

[[italic] 本帖最后由 随心 于 2008-1-9 20:53 编辑 [/italic]]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 15:29 , Processed in 0.129185 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表