C++程序设计-第2周结构体应用

来源:互联网 发布:c 网络验证源码 编辑:程序博客网 时间:2024/06/06 01:48

第一部分 程序阅读

  下面的程序建立起了如图所示的动态链表。阅读程序,在草稿纸上画出链表建立的过程,借此学会如何建立链表。可以通过单步执行以辅助理解

#include  <iostream>using namespace std;struct Student{ long num;float score;struct Student *next;};int main( ){ Student *head=NULL,*p,*q;//下面的程序建立起一个有三个节点的动态链表for(int i=0;i<3;i++){p = new Student;  //分配结点的存储单元cin>>p->num>>p->score;p->next=NULL;if (i==0) head=p;   //如果是首结点,令head取得值elseq->next=p;  //不是首结点,建立起链接来q=p;  //p是新建立的结点,q始终是要加入结点的前一个结点}//输出所有的节点p=head;while(p!=NULL){cout<<p->num<<" "<<p->score<<endl;p=p->next;}}

第二部分 上机实践
【项目1-有序的结构体数组】在程序中提供了一个已经初始化的结构体,包括学生的学号、C++、高数、英语成绩。编程序,要求对结构体排序并输出。请完成函数的定义。
/** 程序的版权和版本声明部分* Copyright (c)2013, 烟台大学计算机学院学生* All rightsreserved.* 文件名称:score.cpp                           * 作    者:                            * 完成日期:  年  月   日* 版本号: v1.0      * 输入描述:已经在程序中初始化* 问题描述:将学生成绩信息存储在结构体数组中,对结构体排序并输出* 输出:按C++降序和按学号升序排序后的学生成绩单*/#include <iostream>using namespace std;struct Score{char num[14];int cpp;int math;int english;};void sort1(Score [],int);  //要自定义的函数void sort2(Score [],int);void output(Score [],int);int main(){Score score[]={{"201152501104",65,69 ,68 },{"201152501114",94 ,89 ,63 },{"201152501138",67 ,62 ,84 },{"201152501204",100 ,65 ,91 },{"201152501202",59 ,80 ,55 },{"201152501115",92 ,84 ,60 },{"201152501201",80 ,92 ,71 },{"201152501145",88 ,56 ,67 },{"201152501203",62 ,62 ,95 },{"201152501140",80 ,60 ,86 },{"201152501205",73 ,90 ,94}};int stuNum=sizeof(score)/sizeof(score[0]);//将所有同学按C++降序排序后输出sort1(score,stuNum);cout<<"按C++降序排序后:"<<endl;output(score,stuNum);//将所有同学按学号升序排序后输出sort2(score,stuNum);cout<<"按学号升序排序后:"<<endl;output(score,stuNum);return 0;}

【项目2-读取数据到结构体数组】score.txt(从本文后粘贴自建)中是一些同学的学号、姓名、C++、高数、英语成绩,定义一个学生成绩的结构体数组,其中的成员包括学号(char num[12])、姓名(name)、三门课的成绩(grade)、总分(score))。
(1)从文件中读出数据,存放到你定义的结构体数组中;
(2)输出结构体数组中所有同学的记录。

  提示:我们初次对文件的操作,在上学期的第11周上机实践中,见http://blog.csdn.net/sxhelijian/article/details/8167913 和http://blog.csdn.net/sxhelijian/article/details/8141924,关于文件操作的指导,见博文“C++文件操作初体验”http://blog.csdn.net/sxhelijian/article/details/8126812。

  数据文件中的部分数据见本文最后,可自行复制建文件。


【项目3-用结构体数组作计算】接项目2,
(1)从文件中读出数据,存放到你定义的结构体数组中,即项目2(1);
(2)求出每名同学的总分(可以在读入过程中“顺便”计算);
(3)按总分排序(降序);
(4)输出排序后的成绩单;
(5)有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。
(6)选做:统计各门课及总分的平均成绩、最高和最低成绩、标准偏差,并输出。 
  建议做两个版本:(1)所有功能全在main()函数中;(2)用自定义函数实现各任务


【项目4-动态链表初试】数据依然来自score.txt,在程序中建立一个动态链表:每读入一个同学的数据,计算总分,分配结点的存储空间并赋值,并建立起前后相链的关系。在建立链表的同时,要进行统计,以便于求出所有同学总分的平均成绩。动态链表建立后,从头结点开始,依次输出所有总分高于平均总分且没有挂科的同学的学号、姓名、总分。
  本周第一部分阅读程序部分给出的程序,可以作为项目4的参考。务必请认真阅读,仔细领会。显然项目4要复杂一些:(1)结构体中的成员多些;(2)从文件中读入数据;(3)一边读数据一边得计算总分,为计算总分的平均值也得做些准备;(4)并不是输出所有的节点。不过,沉下心来,用我们已有的知识,这些任务都能解决。玩熟链表,对专业学习很重要,链表在将来的用处将很广,更实用的数据结构也有赖于你对链表的理解。

  

【项目4扩展(选做)】(1)链表建立起来后,将总分低于总均总分的节点删除(注意删除后前后链仍然能够连起来,不用的空间也能正常释放);(2)问题:在完成项目2、3和项目4基础上,请说出利用结构体数组和动态链表实现此类应用各自的优劣,可以将你的体会写到各任务的体会中。



【项目5-玩日期】
  定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能(可以在一个main函数中完成,也可以用函数求解,main函数调用即可):
  (1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
  (2)输出该日在本年中是第几天(注意闰年问题);
  (3)输出这是这一天中的第几秒;
  (4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
  (5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多,第三个万日,谁敢说一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000,可以算出你的万日,大概在26岁多。
  (6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;


【项目5扩展(选做】用结构体变量给定两个时间,求(1)相差多少天?(2)相差多少秒?


【项目6-点结构体与枚举】读程序,写出函数的定义,注意其中枚举类型的用法
enum SymmetricStyle {axisx,axisy,point};//分别表示按x轴, y轴, 原点对称struct Point{double x;  // 横坐标double y;  // 纵坐标};double distance(Point p1, Point p2);   // 两点之间的距离double distance0(Point p1);Point symmetricAxis(Point p,SymmetricStyle style);   //返回对称点int main( ){Point p1={1,5},p2={4,1},p;cout<<"两点的距离为:"<<distance(p1,p2)<<endl;cout<<"p1到原点的距离为:"<<distance0(p1)<<endl;p=symmetricAxis(p1,axisx);cout<<"p1关于x轴的对称点为:"<<"("<<p.x<<", "<<p.y<<")"<<endl;p=symmetricAxis(p1,axisy);cout<<"p1关于y轴的对称点为:"<<"("<<p.x<<", "<<p.y<<")"<<endl;p=symmetricAxis(p1,point);cout<<"p1关于原点的对称点为:"<<"("<<p.x<<", "<<p.y<<")"<<endl;return 0;}
课程主页在:http://blog.csdn.net/sxhelijian/article/details/7910565

附:score.txt中的数据

201152501104田程65 69 68 
201152501114杨金龙94 89 63 
201152501115周琳霄92 84 60 
201152501138张强67 62 84 
201152501140郑好80 60 86 
201152501145曹为尚88 56 67 
201152501201倪婷80 92 71 
201152501202李奥59 80 55 
201152501203张佳怡62 62 95 
201152501204邓臣冬100 65 91 
201152501205汪美娟73 90 94 
201152501206赵格君96 80 58 
201152501207张文韬91 63 91 
201152501208车宜霖88 84 79 
201152501209刘正61 79 99 
201152501210李东航62 58 66 
201152501211李华96 96 83 
201152501212李晓鹏73 88 93 
201152501213姜君孝69 64 62 
201152501214董越74 59 69 
201152501215赵浚源63 58 96 
201152501216宫凡奇89 82 60 
201152501217张咏晖94 89 77 
201152501218丁梦瑶78 93 58 
201152501219金婷75 87 84 
201152501220张娟90 65 62 
201152501221姜莉76 78 81 
201152501222孙亚雯90 87 73 
201152501223郭重88 68 63 
201152501224王潇哲85 94 97 
201152501225宋心洁99 69 82 
201152501226杜婧霏91 80 98 
201152501227于晓霞69 72 99 
201152501228王莉莉84 95 94 
201152501229万雅璐98 95 64 
201152501230曲淑霞67 100 83 
201152501231高晶98 81 67 
201152501232于泽莹67 64 77 
201152501233李婧怡84 72 90 
201152501234姚宇92 78 95 
201152501235于超87 82 86 
201152501236李剑78 86 95 
201152501237孟雨薇66 64 58 
201152501238孙华泽98 98 74 
201152501239朱绮梦73 83 96 
201152501240周易56 69 84 
201152501241蔡庆60 78 71 
201152501242姜懿宸86 94 59 
201152501243孙雪梅64 92 66 
201152501244李芊潭97 100 55 
201152501245周祥100 86 74 
201152501246吐鲁洪江73 94 75 
201153503240王婷婷68 73 69 
201153503242宗雪燕60 82 61 
201153503243于小涵79 60 78 
201153503245钟艺82 91 97 
201153503246耿清敏67 77 60 
201153503248耿梦启79 100 57 
201153503249刘轩辰59 86 90 
201153503251贺巧霞56 87 88 
201153503254张丽芳57 81 87 
201154503207刘蕊57 89 69 
201158501330李涛96 89 73 
201158501332张新明68 59 64 
201158501334曹文战82 89 73 
201160602108孔令涛63 86 80 
201160602124刘大伟96 69 98 
201163501101孟站58 100 70 
201163501102王超奇75 63 89 
201163501104周涛68 95 84 
201163501105贾治国86 84 100 
201163501106杨磊92 66 88 
201163501107万建新71 56 83 
201163501108李宁70 95 73 
201163501110赵江彦58 63 79 
201163501111杜俊一61 75 70 
201163501113邢士峰56 70 66 
201163501114李传良95 90 86 
201163501115宋吉超78 91 80 
201163501118赵方义70 100 94 
201163501119闫鲁梅72 80 100 
201163501121张明珠83 89 65 
201163501122刘沙沙86 94 71 
201163501123张星雨57 82 87 
201163501125王晓佳68 97 65 
201163501129周立军75 89 87 
201163501130周颖颖80 95 68 
201163501131许倩71 69 80 
201163501132于克美57 82 63 
201163501133姜芹89 99 88 
201163501134姚华玲75 80 75 
201163501135杨慧75 73 70 
201163501136于媛73 89 69 
201163501137杨晓61 96 74 
201163501139季莹71 87 68 
201163501140周梦如85 97 77 
201163501228杨芳艳57 70 87 
201163501230吴红丽55 63 84 
201163501231程铭90 77 79 
201163501232刘雪65 86 95 
201163501234黄瑶100 78 71 
201163502202陈佩鸿71 78 76 
201163502204王晓北74 56 60 
201163502205冯科峰57 79 73 
201163502206亢亚伟95 96 79 
201163502207李梦87 55 69 
201163502208何文豪99 73 85 
201163502210王柯60 63 67 
201163502211唐科军99 56 66 
201163502212刘帅67 92 74 
201163502214邓佩云56 55 89 
201163502215尹琪92 98 62 
201163502216丛林67 93 75 
201163502217赵东超59 60 90 
201163502220郭鹏飞83 70 96 
201163502221王金梯64 92 99 
201163502227王学81 63 79 
201163502229莫敏80 55 86 
201163502230李辉60 70 84 
201163502231欧阳燕平75 90 86 
201163502233任金梅83 55 91 
201163502238董文平55 73 89 
201163502239王骎56 60 59 
201163502241陈龙78 72 68 
201163502243杨康迪82 100 67 
201163503120邵娅楠66 73 89 
201163503124盛善爱87 70 90 
201163503125吴秋宇56 94 77 
201163503127赵亚振69 78 89 
201163503128尹源66 79 81 
201163503138张伟凤71 90 73 
201163503143刘超超62 93 95 
201169503132赵雅楠100 86 81 
201169503140高美58 94 57 
201169503141宁晓波98 62 75 
201169503142王丹89 70 89 
201169503143朱影55 64 63 
201169503144杨玉萍73 74 98 
201169503145魏颖颖84 57 57 
201170501147任丽颖84 64 72 
201170501148娄俊杰99 61 86 
201170501155郭宏超57 62 97 
201170501156张伟100 68 66 
201170501201杨茂林55 71 88 
201170501247范雯婷77 94 79 
201170502105齐鹏87 98 89 
201170502106尹承志64 84 75 
201170502107丁友剑89 85 71 
201170502108王旭71 88 64 
201170502113王伟杰100 80 64 
201170502114齐国鑫93 92 71 
201170502115孙琦琦85 74 70 
201170502116孙中华59 61 60 
201170502117马中平93 74 58 
201170502118张秘64 72 74 
201170502119杨其星89 66 83 
201170502120赵加玉69 93 99 
201170502121徐长清98 81 62 
201170502122刘小虎77 65 79 
201170502125柴志军94 61 75 
201170502130张伟平78 92 100 
201170502131丁邱红67 87 100 
201170502134刘盼78 67 93 
201170502135李文洁56 68 81 
201170502136车丽娜99 55 63 
201170502137李馥辛100 77 59 
201170502138刘群69 79 83 
201170502139石雨73 62 93 
201170502140蔡冬雪62 56 71 
201170502141季传贞86 96 71 
201170502222李发庭85 83 82 
201170505101蔡杭84 60 90 
201170505249张倩倩94 82 68 
201170504112徐志娇80 93 76 
201170504113王彦96 99 62 
201170504114夏冬梅91 87 87 
201170504115王晶85 91 57 
201170504116宁新梅59 68 68 
201170504124房饷妤90 79 66 
201170504142王甜57 82 80 

原创粉丝点击