课程主页在:http://blog.csdn.net/sxhelijian/article/details/11890759,由课程主页,可以看到完整教学方案,所有参考解答
第一部分 结构体应用
【项目1-学生成绩统计】
每位同学的信息学号、姓名、C++、高数、英语成绩,定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[12])、姓名(name)、三门课的成绩(grade)、总分(score)、均分(average))。
(1)从键盘上输入N名学生的信息(N定义为常变量);
(2)求出每名同学的总分和均分,并存储在结构体数组中(可以读入过程中“顺便”计算);
(3)输出每位同学的信息学号、姓名、总分和均分。
(4)输出所有同学均分的均值。
#include <iostream> using namespace std; struct Student { char num[13]; char name[10]; int cpp; int math; int english; int grade; double average; }; const int N=5; int main( ) { int i, j, k; //定义结构体数组 Student stu[N]; //写出代码,实现要求的功能 return 0; }
参考运行结果如图:
【项目2-有序的结构体数组】使用同项目1相同的结构体类型,在main函数中已经对结构体数组进行了初始化,请完成相关函数的定义,实现main函数中要求的功能。
struct Student //同项目1 { …… }; void calculate(Student s[],int n); //计算总分和均分,数据在s数组中,共有n个元素 void sort1(Student [],int); //按总分降序排序 void sort2(Student [],int); //按学号升序排序 void output(Student [],int); //输出成绩单 void outputExcellent(Student [],int); //输出优秀者:总分超285,单科不低于90 int main() { Student stu[]= {{"201152501104","Tom",65,69 ,68 }, {"201152501114","Jeery",94 ,89 ,63 }, {"201152501138","Speike",67 ,62 ,84 }, {"201152501204","Tyke",100 ,95 ,91 }, {"201152501202","Tuffy",59 ,80 ,55 }, {"201152501115","Butch",100 ,99 ,89 }, {"201152501201","Lightning",95 ,92 ,99 }, {"201152501145","Topsy",88 ,56 ,67 }, {"201152501203","Droopy",62 ,62 ,95 }, {"201152501140","Drupa",80 ,60 ,86 }, {"201152501205","Buzz",73 ,90 ,94} }; int stuNum=sizeof(stu)/sizeof(stu[0]); //用sizeof运算确定数组中元素个数 //计算总分和均分后输出 calculate(stu,stuNum); cout<<"下面是成绩单:"<<endl; output(stu,stuNum); cout<<"优秀者名单:"<<endl; outputExcellent(stu,stuNum); //按总分降序排序后输出 sort1(stu,stuNum); cout<<"按总分降序排序后:"<<endl; output(stu,stuNum); //按学号升序排序后输出 sort2(stu,stuNum); cout<<"按学号升序排序后:"<<endl; output(stu,stuNum); return 0; }
提示:(1)排序中涉及对数组元素的交换,数组元素可以作为整体赋值,如定义了Student t,赋值t=stu[i]、stu[j]=stu[i]都是合法的;(2)当涉及到字符数组表示的字符串的操作时,相关的函数需要#include<cstring>。
【项目3-文件+结构体实现实用系统】score.txt(本文后提供了一部分数据,自行copy建文本文件)中是一些同学的学号、姓名、C++、高数、英语成绩,利用前两个项目中定义的结构体数组,读取文件中的数据,完成下面的应用:
(1)从文件中读出数据,存放到结构体数组中;
博文“C++文件操作初体验”http://blog.csdn.net/sxhelijian/article/details/8126812中有关于文件操作的指导。不能立刻完成此任务的,可以再次尝试上学期第14周“项目7——体验文件操作”http://blog.csdn.net/sxhelijian/article/details/16993945后再做此题。
为使后续工作能够顺利进行,自行实现实在有困难,可以在本项目后找到读score.txt文件部分的参考代码,用“抄之有道”,突破这一关,学会从文件中读取数据。
(2)求出每名同学的总分(可以在读入过程中“顺便”计算);
(3)输出结构体数组中所有同学的记录。
(4)按总分排序(降序);
(5)输出排序后的成绩单;
(5)有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。
(6)选做:统计各门课及总分的平均成绩、最高和最低成绩、标准偏差,并输出。
所有功能可以在main()函数中实现,更推荐设计自定义函数实现任务。
【项目3-拓展(选做)】你是否可以在项目3基础上拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。(可以参考周末公布的参考解答。)
附:项目3中从文件中读取数据的参考代码
//从文件中读出数据,存放到你定义的结构体数组中; ifstream infile("score.txt",ios::in); //以输入的方式打开文件 if(!infile) //测试是否成功打开 { cerr<<"open error!"<<endl; exit(1); } i=0; while(infile>>stu[i].num>>stu[i].name>>stu[i].cpp>>stu[i].math>>stu[i].english) { stu[i].grade=stu[i].cpp+stu[i].math+stu[i].english; ++stuNum; ++i; } infile.close();
【项目4-玩日期】
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:(1)将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计一个函数,即刻进行测试,以降低复杂度。(2)这个任务与2012级第2周项目5相同(见http://blog.csdn.net/sxhelijian/article/details/8655466),需要时,请"抄之有道"。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多,第三个万日,谁敢说一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000,可以算出你的万日,大概在26岁多。
(6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;
【项目4扩展(选做】用结构体变量给定两个时间,求(1)相差多少天?(2)相差多少秒?
【项目5-点结构体与枚举】读程序,写出函数的定义,注意其中枚举类型的用法
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; } // 求两点之间的距离 double distance(Point p1,Point p2) { double d; …… return d; } // 求点到原点的距离 double distance0(Point p) { double d; …… return d; } // 求对称点 Point symmetricAxis(Point p1,SymmetricStyle style) { Point p; …… return p; }
第二部分 动态链表体验
下面是一个建立动态链表。阅读程序,在草稿纸上画出链表建立的过程,借此学会如何建立链表。然后改造程序,完成项目6的要求
#include <iostream> using namespace std; struct Node { int data; //结点的数据 struct Node *next; //指向下一结点 }; Node *head=NULL; //将链表头定义为全局变量,以便于后面操作 void make_list(); //建立链表 void out_list(); //输出链表 int main( ) { make_list(); out_list(); return 0; } void make_list() { int n; Node *p; cout<<"输入若干正数(以0或一个负数结束)建立链表:" cin>>n; while(n>0) //输入若干正数建立链表,输入非正数时,建立过程结束 { p=new Node; //新建结点 p->data=n; p->next=head; //新建的结点指向原先的链表头 head=p; //链表头赋值为新建的节点,这样,新结点总是链表头 cin>>n; //输入下一个数,准备建立下一个结点 } return; } void out_list() { Node *p=head; cout<<"链表中的数据为:"<<endl; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; return; }
【项目6-动态链表体验】
在上面的程序基础上定义下面的函数,实现相应的功能。为简便起见,每编写一个函数,立刻在main函数中调用进行测试。
(1)编写make_list2()函数建立链表,使建立链表时,后输入的数据,将新输入的数字对应的结点放在链表末尾。若输入为3 5 2 9 4 7 0,建立的链表为:
(2)编写函数void search(int x),输出链表中是否有值为x的结点。
(3)编写函数delete_first_node(),删除链表中的第一个结点。
(4)编写函数delete_node(int x),删除结点值为x的结点。
(5)编写make_list3()函数建立链表,使建立链表时,使结点中的数据呈现升序。若输入为3 5 2 9 4 7 0,建立的链表为:
(6)编写函数void insert(int x),将值为x的结点插入到由make_list3建立起来的有序链表中。
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新) ==|
|== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==|
======== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =======
附: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