2014秋C++第14周项目2参考-带姓名的成绩单

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 

【项目2-带姓名的成绩单】
设score[8]数组中存储8名同学的C++成绩,增加一个数组string name[8]并赋初值,表示同学们的姓名。这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C++成绩,否则会张冠李戴)。
(1)输出按成绩排序后的同学的名单;
(2)输出按同学姓名排序后的成绩单(排序对象是字符串)。
(3)数据由score.txt提供,程序该如何改?(成绩值利用EXCEL软件随机产生,高了的可以得意,低了的请不要介意,照顾下那位垫底老同鞋的情绪。)

#include<iostream>
#include<string>
using namespace std;
const int num=8;
int main()
{
    int i,j,t;
    string temp;
    string name[num]= {"zhao","qian","sun","li","zhou","wu","zheng","wang"};
    double score[num]= {79,84,65,89,60,92,78,56};
    //(1)按成绩排序并输出结果

    //(2)按姓名排序并输出结果

}

    提示:排序中交换score中的元素时,只要同时也交换name中的相应元素,就可以实现姓名和成绩的同步(如果交换成绩而不交换姓名,两者的对应关系就被破坏了。)

(1)(2)参考解答:

#include<iostream>
#include<string>
using namespace std;
const int num=8;
int main()
{
    int i,j,t;
    string temp;
    string name[num]= {"zhao","qian","sun","li","zhou","wu","zheng","wang"};
    double score[num]= {79,84,65,89,60,92,78,56};
    //(1)按成绩排序
    for(j=0; j<num-1; j++)
        for(i=0; i<num-j-1; i++)
        {
            if(score[i]<score[i+1])
            {
                t=score[i];
                score[i]=score[i+1];
                score[i+1]=t;
                temp=name[i];
                name[i]=name[i+1];
                name[i+1]=temp;
            }
        }

    cout<<"按成绩排序后的结果是:"<<endl;
    for(i=0; i<num; i++)
        cout<<name[i]<<"\t"<<score[i]<<endl;

    //(2)按姓名排序
    for(j=0; j<num-1; j++)
        for(i=0; i<num-j-1; i++)
        {
            if(name[i]<name[i+1])
            {
                temp=name[i];
                name[i]=name[i+1];
                name[i+1]=temp;
                t=score[i];
                score[i]=score[i+1];
                score[i+1]=t;
            }
        }
    cout<<"按同学姓名排序后有结果是:"<<endl;
    for(i=0; i<num; i++)
        cout<<name[i]<<"\t"<<score[i]<<endl;
    return 0;
}

(3)参考解答:

#include <fstream>   //操作文件必写
#include<cstdlib>   //调用exit(1)需要包含cstdlib
#include<iostream>
#include<string>
using namespace std;
const int N=100;
int main()
{
    int i,j,t;
    string name[N];
    double score[N];
        int num=0;//实际的学生人数
    string temp;

    ifstream infile("score.txt",ios::in);
    if(!infile)
    {
        cerr<<"open error!"<<endl;
        exit(1);
}
    while(infile>>name[num]>>score[num])  //当到达文件尾,则循环处理结束。
    {
         num++;
    }
    infile.close();

    //(1)按成绩排序
    for(j=0; j<num-1; j++)
        for(i=0; i<num-j-1; i++)
        {
            if(score[i]<score[i+1])
            {
                t=score[i];
                score[i]=score[i+1];
                score[i+1]=t;
                temp=name[i];
                name[i]=name[i+1];
                name[i+1]=temp;
            }
        }

    cout<<"按成绩排序后的结果是:"<<endl;
    for(i=0; i<num; i++)
        cout<<name[i]<<"\t"<<score[i]<<endl;

    //(2)按姓名排序
    for(j=0; j<num-1; j++)
        for(i=0; i<num-j-1; i++)
        {
            if(name[i]>name[i+1])
            {
                temp=name[i];
                name[i]=name[i+1];
                name[i+1]=temp;
                t=score[i];
                score[i]=score[i+1];
                score[i+1]=t;
            }
        }

    cout<<endl;
    cout<<"按同学姓名排序后有结果是:"<<endl;
    for(i=0; i<num; i++)
        cout<<name[i]<<"\t"<<score[i]<<endl;
    return 0;
}
=================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====
时间: 2024-08-17 16:07:17

2014秋C++第14周项目2参考-带姓名的成绩单的相关文章

2014秋C++第14周项目5参考-体会棋盘游戏

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目5-体会棋盘游戏中的数据存储]定义一个8行8列的二维数组a[8][8].(1)为二维数组中的数据赋50以内的随机数(程序模板中setdata()函数已经完成,利用产生随机数的系统函数实现),可能的取值如图所示:(2)设计函数out()按行输出二维数组中的数据:(3)设计函数outDia

2014秋C++第14周项目4参考-电子词典

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目4-电子词典]做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用'\t'隔开.编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思.运行程序后,支持用户连续地查词典

2014秋C++第14周项目3参考-多科成绩单

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目3-多科成绩单]某班不超过100名同学.用二维数组score[][4]保存同学们的高数.英语.C++成绩及总成绩(在此假设学生的学号为整型的连续值,用数组的行下标作学号).在此基础上,完成下面的操作:(1)输入学生的实际人数num,在输入各科的成绩时,输入3科成绩后可以自动求出总分,并

2014秋C++第14周项目1参考-折腾二维数组

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-折腾二维数组]创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值: 按行序优先输出数组元素: 将所有元素值乘以3后保存在数组中: 按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"

2014秋C++ 第14周项目 二维数组

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-折腾二维数组]创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值: 按行序优先输出数组元素: 将所有元素值乘以3后保存在数组中: 按列序优先输出(输出的第一行是数组中的第一列--,其实输出的就是"

2014秋C++第5周项目3参考-简单分支问题体验

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833. 课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看. [项目3-简单分支问题体验]至少选择(1)-(3)中的一个完成体验,小组共同完成(4) 阅读课件中"给两个数,求两数中的大者"例子(见课件),结合对

2014秋C++第16周 项目1参考 数组的排序

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目1-数组的排序]按给定部分程序的要求,用指向数组的指针变量作为形式参数编写函数,完成排序.重点体会:(1)排序算法,可以是冒泡,也可以是选择:(2)用指向数组的指针变量作为形式参数,用数组名(即数组的地址)作为实际参数,函数中对于形参的改变实质上也就是对实参对应内存单元的改变:(3)形

2014秋C++第13周项目4参考-数组的排序

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.  [项目4 - 数组的排序](1)编写函数,完成冒泡排序,要求不能改变下面的main函数. //两个函数bubble_sort和output_array的声明 int main( ) { int a[20]={86,76,62,58,77,85,92,80,96,88,77,67,80,68,

2014秋C++第8周项目2参考-加班费

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,实践要求见http://blog.csdn.net/sxhelijian/article/details/39493833. 课程资源在云学堂"贺老师课堂"同步展示,使用的帐号请到课程主页中查看.   [项目2:加班费,要不要?] 小贺刚上班,按工作时间小时制领取周工资,工资标准是,每小时rate元RMB.每周工作时间40小时,如果要加班,超出部分按正常工资的1.