1 / 35

Visual C++ 程序设计

Visual C++ 程序设计. 武汉职业技术学院计算机科学系. 万 彪 2004.11. 第三章 C++ 语言基础. 本 章 内 容. 1 、 C++ 语言概述. 6 、函数. 2 、基本数据类型. 7 、指针与数组. 3 、常量和变量. 8 、扩展数据类型. 4 、表达式. 9 、类、对象的表达. 5 、流程控制. 10 、重要的函数. 3.8 扩展数据类型. 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.4 结构成员的访问操作

Download Presentation

Visual C++ 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual C++程序设计 武汉职业技术学院计算机科学系 万 彪 2004.11

  2. 第三章 C++语言基础 本 章 内 容 1、C++语言概述 6、函数 2、基本数据类型 7、指针与数组 3、常量和变量 8、扩展数据类型 4、表达式 9、类、对象的表达 5、流程控制 10、重要的函数

  3. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.4 结构成员的访问操作 3.8.5 结构与函数 3.8.6 结构与链表 3.8.7 共用体

  4. 3.8.1 结构的定义 • 结构体 是一种构造数据类型。 • 用途 把不同类型的数据组合成一个整体-------自定义数据类型。 • 定义 合法标识符 可省:无名结构体 struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct是关键字, 不能省略 成员类型可以是 基本型或构造型

  5. 2字节 num … name 20字节 1字节 sex 2字节 age 4字节 score ….. addr 30字节 3.8.1 结构的定义 例子图解 例 struct student { short num; char name[20]; char sex; short age; float score; char addr[30]; }; 结构体类型定义描述结构 的组织形式,不分配内存 结构体类型定义的作用域

  6. 3.8.1 结构体变量的定义 一般形式: 定义结构体类型的同时定义结构体变量 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;

  7. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.4 结构成员的访问操作 3.8.5 结构与函数 3.8.6 结构与链表 3.8.7 共用体

  8. 3.8.2 结构体变量的初始化 struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据}; 形式一: 例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};

  9. 3.8.2 结构体变量的初始化 形式二: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据}; 例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};

  10. 3.8.2 结构体变量的初始化 形式三: struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据}; 例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};

  11. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.3 结构成员的访问操作 3.8.4 结构与函数 3.8.5 结构与链表 3.8.6 共用体

  12. num num name name 25B stu[0] sex sex age age stu[1] 3.8.3 结构体数组及其初始化 结构体数组的定义 struct student { short num; char name[20]; char sex; short age; }stu[2];

  13. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.3 结构成员的访问操作 3.8.4 结构与函数 3.8.5 结构与链表 3.8.6 共用体

  14. 3.8.2 结构成员的访问操作 • 用.操作符访问 stu1.num=1; stu1.name=“Wang Lin”; stu1.age=19; 例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};

  15. 3.8.2 结构成员的访问操作 例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; • 用->操作符访问(结构体指针作间接访问) student *pa=&stu1; pa->num=112; pa->name=“Wang Lin”; pa->age=19;

  16. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.3 结构成员的访问操作 3.8.4 结构与函数 3.8.5 结构与链表 3.8.6 共用体

  17. 3.8.3 结构与函数 结构体在函数间的传递 • 以结构体变量作为函数参数 函数参数可以为结构体变量或结构体指针变量。 • 结构型函数 函数的返回值为结构体类型或结构体指针类型。

  18. 3.8.3 结构与函数 以结构体变量作为函数参数 • #include<iostream.h> • void func(struct data); • struct data • { int a, b, c; }; • main() • { struct data arg; • arg.a=27; arg.b=3; arg.c=arg.a+arg.b; • cout<<"arg.a="<<arg.a<<",arg.b=" • <<arg.b<<",arg.c="<<arg.c<<endl; • cout<<"Call Func()..."<<endl; • func(arg); • cout<<"arg.a="<<arg.a<<",arg.b=" • <<arg.b<<",arg.c="<<arg.c; • }

  19. 3.8.3 结构与函数 以结构体变量作为函数参数 • cout<<"arg.a="<<arg.a<<",arg.b=" • <<arg.b<<",arg.c="<<arg.c; • } • void func(struct data parm) • { cout<<"parm.a="<<parm.a<<",parm.b=" • <<parm.b<<",parm.c="<<parm.c<<endl; • cout<<"Process..."<<endl; • parm.a=18; parm.b=5; parm.c=parm.a*parm.b; • cout<<"parm.a="<<parm.a<<",parm.b=" • <<parm.b<<",parm.c="<<parm.c<<endl; • cout<<"Return..."<<endl; • }

  20. 3.8.3 结构与函数 以结构体指针作为函数参数 • #include<iostream.h> • struct date{ • int day; • int month; • int year; • int yeardays;}; • void days(struct date *pd); • void main() • { • struct date ymd; • cout<<"Enter year/month/day:"; • cin>>ymd.year>>ymd.month>>ymd.day; • days(&ymd); • cout<<"the passeddays:"<<ymd.yeardays; • }

  21. 3.8.3 结构与函数 以结构指针作为函数参数 • void days(struct date *pd) • { • static int day_tab[2][13]={ • {0,31,28,31,30,31,30,31,31,30,31,30,31}, • {0,31,29,31,30,31,30,31,31,30,31,30,31},}; • int i,lp; • pd->yeardays=pd->day; • lp=pd->year%4==0&&pd||pd->year%100!=0 • ||pd->year%400==0; • for(i=1;i<pd->month;i++) • pd->yeardays=pd->yeardays+day_tab[lp][i]; • }

  22. 3.8.3 结构与函数 结构型函数 • #include<iostream.h> • #include<string.h> • struct datatype • {char s[20]; • int a; • float b;}; • struct datatype function(void); • void main() • { • cout<<"CALL FUNTION..."<<endl; • datatype rev=function(); • cout<<"rev.s[]="<<rev.s<<",rev.a=" • <<rev.a<<",rev.b="<<rev.b<<endl; • }

  23. 3.8.3 结构与函数 结构型函数 • void main() • { cout<<"CALL FUNTION..."<<endl; • datatype rev=function(); • cout<<"rev.s[]="<<rev.s<<",rev.a=" • <<rev.a<<",rev.b="<<rev.b<<endl; • } • struct datatype function(void) • { • struct datatype samp; • strcpy(samp.s,"programm"); • samp.a=256; • samp.b=36.485; • cout<<"samp.s[]="<<samp.s<<",samp.a=" • <<samp.a<<",samp.b="<<samp.b<<endl; • return samp; • }

  24. 3.8.3 结构与函数 结构指针型函数 • #include<iostream.h> • #define NULL 0 • struct sample{ • int num; • char color; • char type; • }car[]={101,'G','c',210,'Y','m',105,'R','l', • 222,'B','s',308,'p','b',0,0,0,}; • struct sample *find(int n); • void main() • { • int number; • struct sample *result; • cout<<"Enter the number:"; • cin>>number;

  25. 3.8.3 结构与函数 结构指针型函数 • cin>>number; • result=find(number); • if(result->num!=NULL) • { cout<<"number:"<<result->num<<endl; • cout<<"color:"<<result->color<<endl; • cout<<"type:"<<result->type<<endl;} • else cout<<"Not Found!"<<endl; • } • struct sample *find(int n) • { • int i; • for(i=0;car[i].num!=NULL;i++) • if(car[i].num==n)break; • return(&car[i]); • }

  26. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.3 结构成员的访问操作 3.8.4 结构与函数 3.8.5 结构与链表 3.8.6 共用体

  27. 3.8.4 结构与链表 链表是一种常用的、能够实现动态存储分配的 数据结构。 • 头指针变量head—指向链表的首节点。 • 每个节点由两个域组成: 数据域—存储节点本身的信息; 指针域—指向后继节点的指针。 • 尾节点的指针域置为“NULL(空)” ,作为链表结束的标志。

  28. 3.8.4 结构与链表 链表节点的结构描述 例如: struct grade { char no[7]; //学号 int score; //成绩 grade *next; //指针域 }

  29. 3.8.4 结构与链表 创建一个新链表 • struct grade • {char no[7]; • int score; • grade *next; • }; • struct grade *create(void) • {grade *head=NULL,*p,*tail; • int count=0; //链表中的节点个数(初值为0) • for( ; ; ) //缺省三个表达式的for语句 • {p=new grade; //申请一个新节点的空间 • cout<<"The number of student No.:"<<count+1<<endl; • cin>>p->no; • if(strcmp(p->no,"000000")==0)

  30. 3.8.4 结构与链表 创建一个新链表 • cin>>p->no; • if(strcmp(p->no,"000000")==0) • {delete p; • break; • } • cout<<"the score of the student No."<<count+1<<endl; • cin>>p->score; • count++; //节点个数加1 • p->next=NULL; • if(count==1)head=p;//是第一个节点,置头指针 • else tail->next=p; //非首节点,将新节点插入到链表尾 • tail=p; //设置新的尾节点 • } • return (head); • }

  31. 3.8 扩展数据类型 3.8.1 结构的定义 3.8.2 结构体变量的初始化 3.8.3 结构体数组及其初始化 3.8.3 结构成员的访问操作 3.8.4 结构与函数 3.8.5 结构与链表 3.8.6 共用体

  32. i ch f 3.8.6 共用体 • 共用体,也叫联合体,是一种构造数据类型。 • 用途:使几个不同类型的变量共占一段内存(相互覆盖)。 • 共用体类型定义: union 共用体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; 例 union data { short i; char ch; float f; }; 类型定义不分配内存

  33. i i ch ch f f a b 3.8.6 共用体变量的定义 形式一: union data { short i; char ch; float f; }a,b; 形式二: union data { short i; char ch; float f; }; union data a,b,c,*p,d[3]; 形式三: union { short i; char ch; float f; }a,b,c; 共用体变量任何时刻 只有一个成员存在 共用体变量定义分配内存, 长度=最长成员所占字节数

  34. 变量的各成员同时存在 struct node { char ch[2]; short k; }a; ch a k ch b k union node { char ch[2]; short k; }b; 任一时刻只有一个成员存在 3.8.6 共用体与结构体 • 区别: 存储方式不同 联系: 两者可相互嵌套

  35. 3.8.6 共用体 • #include<iostream.h> • struct w_tag • { • char low; • char high; • }; • union u_tag • { • struct w_tag byte; • short word; • }u; • void main() • { • u.word=0x1234; • cout<<"word value:"<<u.word<<endl; • cout<<"highbyte:"<<u.byte.high<<endl; • cout<<"lowbyte:"<<u.byte.low<<endl; • u.byte.low=0xFF; • cout<<"word value:"<<u.word<<endl; • }

More Related