课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。
【项目1-体会函数参数传递】
阅读下面的程序,写出期望中的运行结果。上机运行对照,并用单步执行的方法再次体会,完全掌握用指针和引用作为形式参数的用法。
#include <iostream> using namespace std; void fun1(int &x,int &y); void fun2(int *x, int *y); int main() { int a,b; a=11; b=22; fun2(&a,&b); cout<<"a="<<a<<" b="<<b<<endl; fun1(a, b); cout<<"a="<<a<<" b="<<b<<endl; return 0; } void fun1(int &x,int &y) { int t; t=x; x=y; y=t; } void fun2(int *x, int *y) { int *t; t=x; x=y; y=t; }
【项目2-引用作形参】
设计一个程序,输入3个整数,将其按从大到小的顺序输出,要求
(1)排序功能通过函数实现,3个整数用3个变量,不必定义数组;
(2)写出两个版本的函数,一个采用传地址值的方法,另一个采用引用类型作参数
【项目3 - 胖子伤不起】
根据世界卫生组织推荐的体重标准,男性的标准体重=(身高cm-80)×70﹪,女性的标准体重=(身高cm-70)×60﹪。标准体重正负10﹪为正常体重;标准体重正负10﹪~ 20﹪为体重过重或过轻;标准体重正负20﹪以上为肥胖或体重不足,其中超重计算公式为:超重(%)=[(实际体重-标准体重)/(标准体重)]×100%,体重的单位是kg。
请编程序,输入一个人的姓名、性别、身高、体重,用一句人性味浓的话语输出其体重情况(正常、过重、过轻、肥胖或体重不足),这个程序可以用于体重计上为人们实时报告体重情况。
要求使用结构体类型表示人的相关信息。
【项目4 - 日期结构体】
(1)定义一个结构体变量(包括年、月、日),要求输入年、月、日,计算输出该日是该年的第几天。
#include <iostream> using namespace std; struct Date { int year; int month; int day; }; int main() { Date date; cout<<"input year,month,day:"; cin>>date.year>>date.month>>date.day; int days; //计算days cout<<date.month<<"月"<<date.day<<"日是"<<date.year<<"年的第"<<days<<"天."<<endl; return 0; }
(2)输入两个人的生日,求出他们相差多少天。
【项目5-玩日期时间】
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计一个函数,即刻进行测试,以降低复杂度。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多(现在离第二个万日靠近了),第三个万日,谁敢说一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000,可以算出你的万日,大概在26岁多。
(6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;
(7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
【项目6-学生成绩统计】
每位同学的信息学号、姓名、C++、高数、英语成绩。定义一个学生成绩的结构体数组,其中的数据成员包括学号(char num[13])、姓名(name)、三门课的成绩(grade)、总分(score)、均分(average))。
(1)从键盘上输入N名学生的信息(N定义为常变量);
(2)求出每名同学的总分和均分,并存储在结构体数组中(可以读入过程中“顺便”计算);
(3)输出每位同学的信息学号、姓名、总分和均分。
#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=3; int main( ) { int i, j, k; //定义结构体数组 Student stu[N]; //写出代码,实现要求的功能 return 0; }
参考运行结果如图。
(4)使用相同的结构体类型,在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; }
提示:(a)排序中涉及对数组元素的交换,数组元素可以作为整体赋值,如定义了Student t,赋值t=stu[i]、stu[j]=stu[i]都是合法的;(b)当涉及到字符数组表示的字符串的操作时,相关的函数需要#include<cstring>。
(5)score.txt中是一些同学的学号、姓名、C++、高数、英语成绩,利用前面定义的结构体数组,读取文件score.txt中的数据,完成下面的应用:
- 从文件中读出数据,存放到结构体数组中;
- 求出每名同学的总分(可以在读入过程中“顺便”计算);
- 输出结构体数组中所有同学的记录。
- 按总分排序(降序);
- 输出排序后的成绩单;
- 有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。若符合得将的最后一名同学有重复(例如总分全为S),则总分为S的同学全得奖。
从文件中读取数据的参考代码
//从文件中读出数据,存放到你定义的结构体数组中; 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();
所有功能可以在main()函数中实现,推荐设计自定义函数实现任务,更推荐用多文件组织完成。
(6)(选做)在前面工作的基础拟出新的需求,将程序用一个“菜单”组织起来(如图所示),做成一个“学生成绩管理系统”之类的应用程序。
【项目7-电子词典结构体版】
做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
编程序,由用户输入英文词,显示词性和中文释义。
提示1:定义一个Word结构体表示一个词条,其中的数据成员string english; 表示英文单词,string chinese;表示对应中文意思,string word_class;表示该词的词性;定义Word words[8000]存放所有词条成员,int wordsNum;表示词典中的词条数。
提示2:文件中的词汇已经排序,故在查找时,用二分查找法提高效率。
提示3:这样的项目,相关功能用函数实现,最好用多文件的形式组织
提示4:本项目的参考界面和未来的界面可以是下面的样子。不过暂时黑框框吧。
=================== 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 ===== |