2014秋C++第17周 项目 结构体登场

编程入门 行业动态 更新时间:2024-10-27 08:34:06

2014秋C++第17周 项目 <a href=https://www.elefans.com/category/jswz/34/1771419.html style=结构体登场"/>

2014秋C++第17周 项目 结构体登场

课程主页在 ,课程资源在 云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 


【项目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;//计算dayscout<<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菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====





更多推荐

2014秋C++第17周 项目 结构体登场

本文发布于:2024-03-23 21:55:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1743283.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:结构   项目

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!