课件C程序设计zw7_第1页
课件C程序设计zw7_第2页
课件C程序设计zw7_第3页
课件C程序设计zw7_第4页
课件C程序设计zw7_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+程序设计(第3版)第7章用户自定义数据类型7.1结构体类型7.1.1为什么需要用结构体类型图结构体类型变量的定义方法及其初始化1. 定义结构体类型变量的方法图7.2图7.32. 结构体变量的初始化7.1.3引用结构体变量编写程序:#includeusing namespace std;struct Date/声明结构体类型Dateint month; int day; int year; struct Student /声明结构体类型Studentint num; char name20; char sex; Date birthday; /声明birthday为Date类型的成员 float score;student1,student2=10002,Wang Li,f,5,23,1992,89.5; /定义Student 类型的变量student1,student2,并对student2初始化int main()student1=student2; /将student2各成员的值赋予student1的相应成员 coutstudent1.numendl; /输出student1中的num成员的值 endl; /输出student1中的name成员的值 coutstudent1.sexendl; /输出student1中的sex成员的值coutstudent1.birthday.month/student1.birthday.day/student1.birthdayyearendl; /输出student1中的birthday各成员的值coutstudent1.scoreendl;return 0;运行结果: 10002Wang Lif5/23/1992结构体数组编写程序: #includeusing namespace std;struct Person/声明结构体类型Personchar name20; int count;int main()Person leader3=Li,0,Zhang,0,Sun,0; /定义Person类型的数组,内容为3个候选人的姓名和当前的得票数int i,j; char leader_name20; /leader_name为投票人所选的人的姓名 for(i=0;ileader_name; /先后输入10张票上所写的姓名 for(j=0;j3;j+) /将票上姓名与3个候选人的姓名比较 if(strcmp(leader_name,)=0)leaderj.count+; /如果与某一候选人的姓名相同,就给他加一票 coutendl; for(i=0;i3;i+) /输出3个候选人的姓名与最后得票数 :leaderi.countendl; return 0;运行结果: Zhang (每次输入一个被选人的姓名)LiSunLiZhangLiZhangLiSunWangLi:4 (输出3个候选人的姓名与最后得票数)Zhang:3Sun:2图指向结构体变量的指针编写程序:#include#includeusing namespace std; int main()struct Student/声明结构体类型studentint num; string name; char sex; float score; ; Student stu; /定义Student类型的变量stu student p=&stu; /定义p为指向Student类型数据的指针变量并指向stu stu.num=10301; /对stu中的成员赋值 =Wang Fang; /对string变量可以直接赋值 stu.sex=f; stu.score=89.5; cotstu. num stu.sex stu.scoreendl; coutnum (p).name (p).sex (p).scoreendl; return 0;1. 通过指向结构体变量的指针引用结构体变量中的成员图7.5图7.6图7.7编写程序:#define NULL 0/此行可省略,因为在头文件iostream中已有此定义#include struct studentint num; float score; struct student next;int main()student a,b,c,head,p; a. num=31001;a.score=89.5; /对结点a的num和score成员赋值 b. num=31003;b.score=90; /对结点b的num和score成员赋值 c. num=31007;c.score=85; /对结点c的num和score成员赋值 head=&a; /将结点a的起始地址赋予头指针head a.next=&b; /将结点b的起始地址赋予a结点的next成员 b.next=&c; /将结点c的起始地址赋予b结点的next成员 c.next=NULL; /结点的next成员不存放其他结点地址 p=head; /使p指针指向a结点 do coutnum scorenext; /使p指向下一个结点 while(p!=NULL); /输出完c结点后p的值为NULL return 0;7.1.6结构体类型数据作为函数参数编写程序:#include#includeusing namespace std;struct Student/声明结构体类型Studentint num; char name20; float score3;int main()void print(Student); /函数声明,形参类型为结构体Student Student stu; /定义结构体变量 stu.num=12345; /以下5行对结构体变量各成员赋值 =Li Fang; stu.score0=67.5; stu.score1=89; stu.score2=78.5; print(stu); /调用print函数,输出stu各成员的值 return 0;void print(Student stu)coutstu.num stu.score0 stu.score1 stu.score2endl;运行结果:12345 Li Fang 67.5 89 78.5图用new和delete运算符进行动态分配和撤销存储空间图7.97.2枚举类型编写程序:#include#include /在输出时要用到setw控制符using namespace std;int main()enum colorred,yellow,blue,white,black; /声明枚举类型color color pri; /定义color类型的变量pri int i,j,k,n=0,loop; /n是累计不同颜色的组合数 for(i=red;i=black;i+) /当i为某一颜色时 for(j=red;j=black;j+) /当j为某一颜色时 if(i!=j) /若前两个球的颜色不同 for(k=red;k=black;k+) /只有前两个球的颜色不同,才需要检查第3个球的颜色 if(k!=i) &(k!=j) /3个球的颜色都不同 n=n+1; /使累计值n加1 coutsetw(3)n; /输出当前的n值,字段宽度为3 for(loop=1;loop=3;loop+) /先后对3个球作处理 switch(loop) /loop的值先后为1,2,3 case 1: pri=color(i);break; /color(i)是强制类型转换,使pri的值为i case 2: pri=color(j);break; /使pri的值为j case 3: pri=color(k);break; /使pri的值为k default:break; switch(pri) /判断pri的值,输出相应的“颜色” case red: coutsetw(8)red;break; case yellow: coutsetw(8)yellow;break; case blue: coutsetw(8)blue;break; case white: coutsetw(8)white;break; case black: coutsetw(8)black;break; default : break; coutendl;couttotal:nendl; /输出符合条件的组合的个数return 0;运行结果:1 redyellowblue2 redyellow white3 redyellow black 58 black white red59 black whiteyellow60 black whitebluetotal:607.3用typedef声明新的类型名习题1. 定义一个结构体变量(包括年、月、日),编写程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。注意闰年问题。2. 编写一个函数days,实现上面的计算。由主函数将年、月、日传递给函数days,计算出该日在本年中是第几天并将结果传回主函数输出。3. 编写一个函数print,打印一个学生的成绩数组,该数组中有个学生的数据,每个学生的数据包括num(学号)、name(姓名)、score3(3门课的成绩)。用主函数输入这些数据,用print函数输出这些数据。4. 在第3题的基础上,编写一个函数input,用来输入个学生的数据。5. 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。6. 编写一个函数creat,用来建立一个动态链表。所谓建立动态链表是指在程序执行过程中从无到有地建立起一个链表,即一个一个地开辟结点和输入各结点数据,并建立起前后相连的关系。各结点的数据由键盘输入。7. 编写一个函数print,将第6题建立的链表中各结点的数据依次输出。8. 编写一个函数del,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该学生结点)。9. 编写一个函数insert,用来向动态链表插入一个结点。10. 将以上4个函数组成一个程序,由主程序先后调用这些函数,实现链表的建立、输出、删除和插入,在主程序中指定需要删除和插入的结点。11. 医

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论