visual c++ 程序设计

35
1 武武武武武武武武武武武武武武 武 武 2004.11 Visual C++ 程程程程 2004.11 程程程程程程程程程程程程程程

Upload: britanni-kinney

Post on 31-Dec-2015

142 views

Category:

Documents


6 download

DESCRIPTION

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 结构成员的访问操作 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Visual C++ 程序设计

1武汉职业技术学院计算机科学系 万 彪2004.11

Visual C++ 程序设计

万 彪

2004.11

武汉职业技术学院计算机科学系

Page 2: Visual C++ 程序设计

2武汉职业技术学院计算机科学系 万 彪2004.11

第三章 C++ 语言基础

本 章 内 容

1 、 C++ 语言概述1 、 C++ 语言概述

2 、基本数据类型2 、基本数据类型

3 、常量和变量 3 、常量和变量

4 、表达式 4 、表达式

6 、函数 6 、函数

7 、指针与数组 7 、指针与数组

8 、扩展数据类型8 、扩展数据类型

9 、类、对象的表达 9 、类、对象的表达

5 、流程控制 5 、流程控制 10 、重要的函数10 、重要的函数

Page 3: Visual C++ 程序设计

3武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 4: Visual C++ 程序设计

4武汉职业技术学院计算机科学系 万 彪2004.11

3.8.1 结构的定义 结构体 是一种构造数据类型。 用途 把不同类型的数据组合成一个整体 ------- 自定义数

据类型。 定义 struct [ 结构体名 ]

{ 类型标识符 成员名; 类型标识符 成员名; …………….} ;

成员类型可以是基本型或构造型

struct 是关键字 ,不能省略

合法标识符可省 : 无名结构体

Page 5: Visual C++ 程序设计

5武汉职业技术学院计算机科学系 万 彪2004.11

3.8.1 结构的定义

例 struct student { short num; char name[20]; char sex; short age; float score; char addr[30]; };

name

num

sex

age

score

addr

2 字节

2 字节

20 字节1 字节

4 字节

30 字节

……

..

结构体类型定义描述结构的组织形式 ,不分配内存

结构体类型定义的作用域

例子图解

Page 6: Visual C++ 程序设计

6武汉职业技术学院计算机科学系 万 彪2004.11

3.8.1 结构体变量的定义

一般形式: 定义结构体类型的同时定义结构体变量

struct 结构体名{ 类型标识符 成员名; 类型标识符 成员名; …………….} 变量名表列;

例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;

Page 7: Visual C++ 程序设计

7武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 8: Visual C++ 程序设计

8武汉职业技术学院计算机科学系 万 彪2004.11

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”};

Page 9: Visual C++ 程序设计

9武汉职业技术学院计算机科学系 万 彪2004.11

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”};

Page 10: Visual C++ 程序设计

10武汉职业技术学院计算机科学系 万 彪2004.11

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”};

Page 11: Visual C++ 程序设计

11武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 12: Visual C++ 程序设计

12武汉职业技术学院计算机科学系 万 彪2004.11

3.8.3 结构体数组及其初始化

struct student { short num; char name[20]; char sex; short age; }stu[2];

num

name

sex

age

num

name

sex

age

stu[0]

stu[1]

25B

结构体数组的定义

Page 13: Visual C++ 程序设计

13武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 14: Visual C++ 程序设计

14武汉职业技术学院计算机科学系 万 彪2004.11

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”};

Page 15: Visual C++ 程序设计

15武汉职业技术学院计算机科学系 万 彪2004.11

3.8.2 结构成员的访问操作

用 -> 操作符访问 ( 结构体指针作间接访问 ) student *pa=&stu1; pa->num=112; pa->name=“Wang Lin”; pa->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”};

Page 16: Visual C++ 程序设计

16武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 17: Visual C++ 程序设计

17武汉职业技术学院计算机科学系 万 彪2004.11

3.8.3 结构与函数

结构体在函数间的传递以结构体变量作为函数参数 函数参数可以为结构体变量或结构体指针

变量。 结构型函数 函数的返回值为结构体类型或结构体指针

类型。

Page 18: Visual C++ 程序设计

18武汉职业技术学院计算机科学系 万 彪2004.11

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;• }

Page 19: Visual C++ 程序设计

19武汉职业技术学院计算机科学系 万 彪2004.11

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;• }

Page 20: Visual C++ 程序设计

20武汉职业技术学院计算机科学系 万 彪2004.11

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;• }

Page 21: Visual C++ 程序设计

21武汉职业技术学院计算机科学系 万 彪2004.11

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];• }

Page 22: Visual C++ 程序设计

22武汉职业技术学院计算机科学系 万 彪2004.11

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;• }

Page 23: Visual C++ 程序设计

23武汉职业技术学院计算机科学系 万 彪2004.11

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;• }

Page 24: Visual C++ 程序设计

24武汉职业技术学院计算机科学系 万 彪2004.11

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;

Page 25: Visual C++ 程序设计

25武汉职业技术学院计算机科学系 万 彪2004.11

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]);• }

Page 26: Visual C++ 程序设计

26武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 27: Visual C++ 程序设计

27武汉职业技术学院计算机科学系 万 彪2004.11

3.8.4 结构与链表

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

链表结束的标志。

Page 28: Visual C++ 程序设计

28武汉职业技术学院计算机科学系 万 彪2004.11

3.8.4 结构与链表

链表节点的结构描述例如: struct grade

{ char no[7]; // 学号 int score; // 成绩 grade *next; // 指针域 }

Page 29: Visual C++ 程序设计

29武汉职业技术学院计算机科学系 万 彪2004.11

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)

Page 30: Visual C++ 程序设计

30武汉职业技术学院计算机科学系 万 彪2004.11

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);• }

Page 31: Visual C++ 程序设计

31武汉职业技术学院计算机科学系 万 彪2004.11

3.8 扩展数据类型

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

Page 32: Visual C++ 程序设计

32武汉职业技术学院计算机科学系 万 彪2004.11

3.8.6 共用体

共用体,也叫联合体,是一种构造数据类型。用途:使几个不同类型的变量共占一段内存

(相互覆盖)。共用体类型定义:

union 共用体名{ 类型标识符 成员名; 类型标识符 成员名; …………….} ;

类型定义不分配内存

例 union data { short i; char ch; float f; };

f

ch

i

Page 33: Visual C++ 程序设计

33武汉职业技术学院计算机科学系 万 彪2004.11

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;

f

ch

i

f

ch

i

a b

共用体变量定义分配内存 ,长度 =最长成员所占字节数

共用体变量任何时刻只有一个成员存在

Page 34: Visual C++ 程序设计

34武汉职业技术学院计算机科学系 万 彪2004.11

3.8.6 共用体与结构体

struct node{ char ch[2]; short k;}a;

union node{ char ch[2]; short k;}b;

achk

bch k

变量的各成员同时存在

任一时刻只有一个成员存在

区别 : 存储方式不同 联系 : 两者可相互嵌套

Page 35: Visual C++ 程序设计

35武汉职业技术学院计算机科学系 万 彪2004.11

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;• }