GIS程序设计第一章_第1页
GIS程序设计第一章_第2页
GIS程序设计第一章_第3页
GIS程序设计第一章_第4页
GIS程序设计第一章_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

GIS程序设计资环学院张明明Tel_mail:mm81_0@126.comQQ:58162544先修课程高级语言程序设计(C语言)汇编语言计算机组成原理逻辑设计相关课程软件工程GIS设计与开发课程考核课时安排:共48学时。其中上课28学时(12-19周),上机20学时课程考核:共100分。上课占10%,主要考核出勤及听课情况;上机占20%,主要考核平时上机情况及提交报告的情况;考试占70%,主要考核所学内容的掌握情况。几点需要说明的问题教材选择:钱能,《C++程序设计教程》,清华大学出版社参考书:1.科学出版社,《C++语言程序设计教程》2.清华大学出版社,《C++面向对象程序设计教程》3.面向对象程序设计的相关书籍(C++、JAVA、C#等)课堂纪律说明:其他说明:第1章C++语言编程入门

第2章函数

第3章类与对象

第4章指针与引用

第5章继承

第6章运算符重载

第7章多态与虚函数

第8章群体类

第9章模板

第10章I/O流

第11章标准模板类库STL

第12章异常处理进程★课程概述1.1C++语言的产生1.2C++语言是一种面向对象的程序设计语言

1.2.1C++语言和面向对象的程序设计

1.2.2C++语言与C语言的关系1.3C++程序的开发步骤1.4一个简单C++程序的组成1.5C++语言的词法记号

1.5.1字符集

1.5.2词法记号

1.6数据类型

1.6.1基本数据类型

1.6.2变量

1.6.3常量

1.6.4自定义数据类型1.7运算符与表达式

1.7.1运算符

1.7.2表达式

1.7.3表达式中数据类型的转换1.8控制语句

1.8.1选择语句

1.8.2循环语句

1.8.3转移语句第1章

C++语言编程入门

C++语言是一种已得到广泛使用的面向对象的程序设计语言。本章首先回顾C++语言的发展历史,讨论C++语言对面向对象程序设计的支持;然后,介绍用C++语言开发程序的步骤及一个简单C++程序的组成;最后,详细地介绍C++语言支持的数据类型、运算符、表达式和控制语句等。20世纪60年代

MartinRichards设计出BCPL(BasicCombinedProgramminglanguage)语言,它被用于在开发软件系统时作为记述语言。

KenThompson在BCPL的基础上开发了B语言,美国DEC公司的PDP-7计算机中的UNIX操作系统就是用B语言开发的。1970年

DennisRitchie等在为PDP-11计算机开发UNIX操作系统时,对B语言做了进一步的改进,推出了更加通用的C语言。1972年【

1.1C++语言的产生】

同时具有高级语言与汇编语言语言简洁程序执行效率高可直接访问物理地址具有良好的可读性和可移植性,并得到了广泛使用◆C语言的优点

C语言只是一种面向过程的编程语言,已经无法满足运用面向对象方法开发软件的需要。为此AT&T贝尔实验室的BjarneStroustrup博士在C语言的基础上对其进行了改进和扩充,开发出支持面向对象程序设计的C++语言。◆C++语言的来由【

1.1C++语言的产生】

面向对象的程序设计是在吸收结构化程序设计的一切优点的基础上发展起来的一种新的程序设计方法,其本质是把数据和处理数据的过程抽象成一个具有特定身份和某些属性的自包含实体——对象。☆面向对象系统最突出特点是封装性、继承性和多态性。

多态性是指相同的消息为不同的对象接收到时,可能导致不同的动作。它使得属于同一类的不同对象可以按各自的需要对同一消息做出适当的响应。【

1.2.1C++语言和面向对象的程序设计语言】

在面向对象的程序设计中,封装是一种数据隐藏技术,它通过把一组数据和与数据有关的操作集合放在一起形成对象来实现。对象通过操作接口与外部发生联系,而内部的具体细节则被隐藏起来,对外是不可见的。

在面向对象的程序设计中,同样有着继承的机制,通过继承可以支持重用。通过继承,程序可以在扩展现有类的基础上声明新类——从原有类的基础上派生出来的,原有类称为基类,又叫父类。【

1.2C++语言是一种面向对象的程序设计语言】◆C++语言与C语言的本质区别——C++语言支持面向对象的程序设计

C语言仅支持面向过程的程序设计◆C++语言与C语言的关系C++语言C语言

※保持与C语言的相兼性

※是C语言的一个超集

※绝大多数无须修改的C语言支持面向对象程序设计的语言支持面向过程的程序设计语言学好C++语言的关键掌握好面向对象的程序设计思想【

1.2.2C++语言与C语言的关系】

C++语言是一个计算机编程语言,利用它编写的程序并不能直接在计算机上运行,而是要经过编辑、编译和链接三步生成可执行文件。

目标文件要和相应的C++库文件相链接才能生成可执行文件(EXE文件)。

将编辑好的C++源程序通过编译器转换成目标文件(OBJ文件)。不同编译器的使用方法各不相同,因此在使用某种编译器前应了解其正确的使用方法。

是指把C++语法规则编写的程序代码输入计算机,并存盘。在存盘时,文件的扩展名习惯上取为CPP。编辑成的文件叫源文件。许多编辑器可用来编辑C++语言的源文件。如WindowsNotepad,DOSEdit等。

开发一个C++程序至少需要编写程序、编译、链接和运行程序4个步骤。但在实际的编程过程中,编写源代码时常常会犯这样或那样的错误,程序员都必须改正它。这就必须重新经过编辑、编译和链接生成可执行文件。简述【

1.3C++程序的开发步骤】例1-1一个简单的C++程序#include<iostream.h>voidmain(){cout<<″ThisismyfirstC++program!\n″;}是一条预处理指令,指示编译器将文件iostream.h中的代码嵌入到程序中该指令所在之出。定义了一个main()的函数。函数名表示该函数没有返回值。它是程序中的开始执行点。包括了该函数的全部内容。括号中的内容被称作函数体,它是由一系列C++语句组成,这些语句描述了函数的功能实现。程序的主要部分。在C++语句中必须以“;”结尾。告诉cout在输出:ThisismyfirstC++program!后换行。用来向显示器输出数据。表示将“<<”号后的数据在显示器上显示出来,这里是一个字符串。【

1.4一个简单C++程序的组成】注释信息——是C++程序的一部分,较大或较复杂的程序都应加上相应的注释信息,以解释该程序的可读性。这个程序经编辑、编译和链接便产生可运行的后缀为EXE的文件。运行这个程序,将在屏幕上输出:每个程序中有且只能有一个名为main()的函数,它是程序的主函数。注

与cout相对应,可以利用cin后跟“>>”(两个“>”号)

来给“>>”右边的数据输入值。分类C++型注释——双斜线“//”注释(从“//”开始,本行中所有字符都被作为注释处理。)可以嵌在C型注释中。C型注释——“/*”表示注释的开始,“*/”表示注释的结束。在“/*”、“*/”之间的字符均被视作注释。主要用于大块注释。ThisismyfirstC++program!例1-2cin的使用#include<iostream.h>voidmain(){intx,y,z;cout<<″Pleaseinputtwointegers:″;cin>>x>>y;cout<<″x=″<<x<<″y=″<<y<<endl;z=x+y;cout<<″x+y=″<<z<<endl;}Pleaseinputtwointegers:

x=1y=2x+y=3输入两个整数1和2,之间以空格符分隔,输出结果如下:在程序中的作用等同于“\n”,不过“\n”是C语言的换行符,在C++语言中保留。“int”说明数据x,y,z是整数,有关整数“int”的使用,本章稍后将有说明。【

1.4一个简单C++程序的组成】/***********************************Thisprogramaddstwointegersthatareenteredbyus,thenwritesthesumtoscreen***********************************/#include<iostream.h>voidmain(){intx,y,z;//x、y、zareintegercout<<″Pleaseinputtwointegers:″;cin>>x>>y;//enterx,ycout<<″x=″<<x<<″y=″<<y<<endl;//writesx,ytoscreenz=x+y;cout<<″x+y=″<<z<<endl;//writesthesumtoscreen}注释的使用

用C++语言编程时,程序的书写非常自由,甚至可以把整个函数体全部书写在一行上。但这样做,对人来说,如果程序稍长一点,就难理解了。因此,在书写C++程序时,一般采用比较美观的“缩进”格式来书写。注意例1-3【

1.5.1字符集】英文字母A~Z,a~z数字字符0~9特殊字符空格!#%^&*_(下划线)

+=-

〉/\

〃;.,()[]{}:?表C++语言的字符集的构成词法记号是C++语言的最小语法单位。字符是程序中可以区别的最小符号。C++语言中共有5种词法记号:关键字、标识符、常量、运算符和标点符号。字符是构成C++语言的基本要素。【

1.5C++语言的词法记号】标识符是程序员为命名程序中的一些要素所定义的单词,如变量名、函数名等。

2.标识符标识符的命名规则由字母、数字和下划线组成以字母或下划线作为第一个字符,其后跟零个或多个字母、数字、下划线。大写字母与小写字母分别代表不同的标识符不能与关键字相同举例正确的错误的sumDram_rectangle_myfriend1_peo//起始字符非法operator//是关键字my$//含有非法字符表标识符的命名规则1.关键字关键字——是C++语言的保留字,好比是已经赋予特殊含义的专用单词。特点:它们各自有不同的使用目的,在程序中不能把它们用作别的用途。【

1.5.2词法记号】运算符可以用做分隔符,其他分隔符还有(){},:;和空白字符。4.运算符运算符——是C++语言是实现加、减等各种运算的符号。5.分隔符在编写程序时,分隔符用于分隔词法记号或程序正文。注

由于C++编译器将注释也当作空白对待,所以,注释也可用作分隔符。又称文字,指在程序中直接使用符号标示的数据,包括数字、字符、字符串等。不表示任何实际的操作,仅用于结构程序。

是指空格(空格键所产生的字符)、制表符(Tab键所产生的字符)、换行符(Enter键所产生的字符)。3.常量数据是程序处理的对象,在C++语言中,所有的对象都属于某种数据类型。数据类型的分类基本数据类型自定义数据类型【

1.6.1基本数据类型】关键字又被称作修饰符,用来作为前缀修饰字符型、整型、浮点型。基本数据类型的分类布尔型(bool)字符型(char)整型(int)浮点型(float、double)signed(表示有符号)4个关键字unsigned(表示无符号)long(表示长型)short(表示短型)

1.6数据类型】长度(字节)取值范围类型bool1false(0)true(1)charunsignedcharsignedcharshortint(short)signedshortint(signedshort)unsignedshortint(unsignedshort)int1112224-128~1270~255-128~127-32768~32767-32768~327670~65535-2147483648~2147483647signedintunsignedintsignedlongint(signedlong)longint(long)unsignedlongint(unsignedint)floatdoublelongdouble-2147483648~21474836470~4294967295-2147483648~2147483647-2147483648~21474836470~42949672953.4E-38~3.4E+381.7E-308~1.7E+3081.7E-308~1.7E+30844444488【表C++语言的基本数据类型】有些数据在程序运行过程中是可以改变的,我们称之为变量。一个变量对应着计算机中的一组内存单元,这组内存单元在C++语言中用一个标识符来标识,即变量名。数据类型是指C++语言中的任一合法类型,每个变量都必须属于一种类型。变量名的命名应遵照1.5节中标识符的命名规则。C++语言中使用变量前必须对变量进行声明。变量声明的格式如下: 数据类型变量名1,变量名2,…,变量名n;注意在声明变量时,必须注意变量类型的选择。应该保证该变量中将要存储的值不突破该变量类型所能表示的最大值。【

1.6.2变量】在程序中,有些数据在运行期间是不允许改变的,我们称之为常量。常量的分类文字常量符号常量数据类型是由它的表示方法决定的。1.整型常量整型常量就是以文字形式出现的整数,包括三种形式。各种表示形式前均可加上正或负号以表示它们值的正负,正号可以省略。形式十进制八进制十六进制举例1980,-50表整型常量的三种形式组成由若干个0~9的数字组成,但不能以0开头以0开头,由若干0~7的数字组成以0X或0x开头,由若干0~9的数字及A~F(大小写均可)的字母组成010,-02760x1Fa-0X4Ab备注L(或l)表示长整型,U(或u)表示无符号型,如果后缀包括L(或l)和U(或u)则表示无符号长整型。【

1.6.3常量】2.实型常量实型常量只能用十进制表示,共有两种表示形式一般表示形式指数表示形式形式一般表示指数表示举例10.2,10.,.2表实型常量的两种形式组成又称小数表示形式。使用这种表示形式时,实型常量由整数和小数两部分组成。其中的一部分在实际使用时可省略,但不允许两部分同时省去。表示很大或很小的实数,由尾数部分、字母E(或e)、指数部分三部分组成。尾数部分的表示和一般表示形式相同,指数部分必须是整数,但可正可负,当指数大于零时,正号可省。1.2E20,.24e100,备注默认数据类型为double型,如果加上后缀F(或f)则为float型,加上L(或l)则为longdouble型。【

1.6.3常量】

字符常量通常是指用单引号括起来的一个字符,其数据类型是char。其中单引号只是用来说明被它括起来的字符是字符常量,它本身不是字符常量的内容。如:′a′,′#′,′G′。C++语言中,还有一种转义序列的表示方法可用来表示字符常量。是用转义符号“\”后跟一个字符或一个ASCII码来表示一个单一字符。若“\”后跟一个ASCII码,则表示的是该ASCII码所代表的字符。

在这里ASCII码用八进制或十六进制表示,这里八进制和十六进制的表示与前面表示整型常量的方式不同,应无第一个“0”。例如′\X62′就表示字符′b′。表12C++预定义的转义序列符号含义\a\b\f\n\r\t\v\\\″\′响铃退格(Backspace键)换页换行回车水平制表符(Tab键)垂直制表符反斜杠双引号单引号3.字符常量【

1.6.3常量】4.字符串常量

字符串常量又称字符串或串常量,是用一对双引号括起来的字符序列。例如:″xyz″,″Iamastudent″,″Thisisastring″都是字符串。由于双引号在字符串中用做定界符,所以,若字符串中需要出现双引号时,则必须采用转义序列。注I\0C++语言中字符串的存储与字符不同,它在内存中的存放并不是简单地按串中字符的顺序排放,而是在末尾加上一个′\0′,表示字符串的结束。字符串、字符及与其对应的存储形式″I″′I′I

在C++语言中已经有了其他特定的含义:“\”是转义字符;“′”被用于表示字符常量,“″”用于表示字符串常量。如果需要把它们用作字符常量,就必须采用转义序列。注

字符常量在内存中以ASCII码形式存储,每个字符占一个字节。【

1.6.3常量】5.布尔常量布尔常量仅有两个:false(假)和true(真),其数据类型为bool。C++语言中的常量常用符号常量来表示。

符号常量在声明时一定要赋初值,而且其值在初始化后不能再改变,这一点与变量完全不同。C++语言提供了两种声明符号常量的方法。注解释形式正确声明用#define声明符号常量C语言中声明符号常量的方法。其中#define是预处理指令。缺点是不能显式声明常量的类型。用const声明符号常量C++语言中广泛采用的声明符号常量的方法const数据类型常量名=常量值;或:数据类型const常量名=常量值;constdoublepi=3.1415926;#definepi3.1415926错误声明constdoublepi;//错误pi=3.1415926;//错误最后不允许加“;”表两种声明符号常量的方法6.符号常量自定义数据类型的分类枚举类型数组类型联合类型结构类型类类型指针类型一种用户自定义数据类型。是类型相同、数目一定的变量的有序集合,组成数组的变量称为该数组的元素。C语言中提供结构类型,它能把不同类型的数据组合成一个集合体。是使几个不同类型的变量共用同一组内存单元。是使几个不同类型的变量共用同一组内存单元。后续章节中我们将陆续加以介绍。在实际运用中,仅有这些内置的数据类型,并不能完全满足程序设计的需要。为此,C++语言还提供了一些自定义数据类型。1.枚举类型在声明枚举类型时,用户需要把变量的可能取值一一枚举出来,形式如下:

enum枚举类型名{变量值1,变量值2,…变量值n};【

1.6.4自定义数据类型】例1-7枚举类型的声明enumcolor{red,blue,white,black,green};声明枚举类型时,并不一定需要对枚举常量初始化,枚举常量取默认值,即第一个常量的值为0,其他常量的值为前一个常量的值加1。

说明:red的值为0,blue的值为1,white的值为2,black的值为3,green的值为4。每个枚举常量实际上就是一个整数值,其值可以在声明枚举类型时以初始化的方式指定。例如:enumcolor{red=100,blue=200,white=205,black=300,green=50};在给枚举常量赋初值时,不一定要求常量的值互不相同。例如:enumcolor{red,blue=100,white,black=100,green=0};说明:red=0,blue=100,white=101,black=50,green=51。被赋值的常量取所赋的值,没有赋值的常量取默认值。在声明枚举类型时,枚举出的变量的可能取值又称枚举常量。在声明了一个枚举类型后,必须声明枚举变量才能使用这种数据类型。格式如下(其中enum可有可无):enum枚举类型名变量1,变量2,…,变量n;事实上,也可以在声明枚举类型的同时,声明枚举变量。例如:enumcolor{red,blue,white,black,green}flower;enum{red,blue,white,black,green}flower;在给枚举变量赋值时,必须注意枚举变量的值应该是所属枚举类型的某一枚举常量。例如: enumcolor{red,blue,white,black,green}; enumcolorflower(red); flower=white;

说明:声明了一个无名的枚举类型,并声明了一个名为flower的枚举变量。使用这种方法,在程序的其他地方就不能再声明这种类型的枚举变量了。【

1.6.4自定义数据类型】枚举类型的应用#include<iostream.h>enumcolor{red,blue,white,black,green};voidmain(){inti;colorflower;cout<<″Whichcolorisaflowerthatyouwanttobuy?0-red,1-blue,2-white,3-black,4-green″;cin>>i;flower=color(i);if(flower==red)//if语句的使用在1.8节中讲解

{cout<<endl;cout<<″Youneedaredflower″<<endl;}else{cout<<endl;例1-8枚举变量输出的值是一个整数值,而不是枚举常量的标识符。如果要输出标识符也需另外编程。Whichcolorisaflowerthatyouwanttobuy?0-red,1-blue,2-white,3-black,4-green输入0输入1输入8Youneedaredflower1Sorry,wehaveonlyredflower8Sorry,wehaveonlyredflower提示用户输入

cout<<flower<<endl;cout<<″Sorry,wehaveonlyredflower″<<endl;}}(续)数据类型数组名[常量表达式1][常量表达式2]…[常量表达式n];2.数组类型在内存分配时,数组对应着一组顺序排放的存储单元,数组的每个元素按照声明时的次序在其中存放。给出了数组中元素的类型,这个数据类型可以是C++语言中任一合法类型。常量表达式又称下标表达式,必须是unsignedint类型的整数。常量表达式n表示的是第n维的大小。是一个标识符,代表着数组元素在内存中的起始地址,是一个常量,不能给它赋值。“[]”的个数代表着数组的维数。一个方括号表示一维数组,两个表示二维数组,…,n个表示表示n维数组。

这些表达式的值的乘积就是数组元素的个数。注数组的声明形式如下:

声明了一个一维数组声明了一个二维数组charc[5];inti[5][2];c是数组名,该数组有5个元素,每个元素都是char型变量。i是数组名,该数组有10个元素,每个元素都是int型变量。举例解释下标表达式也限定了数组中元素的排列次序及每个元素在数组中的位置,因此,我们可以通过数组名和下标顺利地访问每一个元素。访问数组中元素的一般形式如下:数组名[下标表达式1][下标表达式2]……[下标表达式n]charc[5];inti[5][2];共有5个元素:c[0],c[1],c[2],c[3],c[4]。共有10个元素:i[0][0],i[0][1],i[1][0],i[1][1],i[2][0],i[2][1],i[3][0],i[3][1],i[4][0],i[4][1]。下标表达式的个数应与数组的维数相同,下标表达式的值从0开始。一维数组声明的数组在内存中的存放顺序组,就是按下标顺序存储。例如:inti[5];i[0]i[1]i[2]i[3]i[4]图声明的一维数组在内存中的存放顺序二维数组,可以把它看成是由多个一维数组构成的。例如:inti[2][3];i[0][0]i[0][1]i[1][2]i[0][2]i[1][0]图声明的二维数组在内存中的存放顺序三维数组,可把它看成是由多个二维数组构成的。例如:inti[2][3][4];i[0][0][0]i[0][0][1]i[0][0][2]i[0][0][3]i[0][1][0]i[0][1][1]i[0][1][2]i[0][1][3]i[0][2][0]i[0][2][1]i[0][2][2]i[0][2][3]i[1][0][0]i[1][0][1]i[1][0][2]i[1][0][3]i[1][1][0]i[1][1][1]i[1][1][2]i[1][1][3]i[1][2][0]i[1][2][1]i[1][2][2]i[1][2][3]图声明的三维数组在内存中的存放顺序数组元素在内存中是顺序存储的。在进行数组声明时,也可以给其中部分或全部元素赋初值。对于一维数组,初始化有以下两种形式:(1)全部元素都初始化inti[5]={1,2,3,4,5};(2)部分元素被初始化声明了一个有5个元素的数组,每个元素都被赋初值。其中i[0]=1,i[1]=2,i[2]=3,i[3]=4,i[4]=5。inti[5]={1,2};初始化了数组的前两个元素:i[0]=1,i[1]=2。其他元素则未赋值,程序一般都自动给它们赋0。举例例题解释形式

对于全部元素都被初始化的情况,还有如下声明形式:

inti[]={1,2,3,4,5};注在声明时可不说明数组元素的个数。元素的个数与初始化数据的个数相同。一个n维数组可看成是由多个n-1维数组构成的。例如:inti[2][3]={1,2,3,4,5,6};inti[2][3]={{1,2,3},{4,5,6}};等价多维数组也可以只初始化部分元素,例如:

inti[2][3]={1,2,3,4};如果在声明的同时给元素赋初值,最多可以省略第一维中的下标个数,例如:inti[][3]={{1,2,3},{4,5,6}};等价inti[2][3]={{1,2,3},{4,5,6}};inti[][]={{1,2,3},{4,5,6}};说明:把i[0][0]初始化为1,i[0][1]初始化为2,i[0][2]初始化为3,i[1][0]初始化为4,其他取默认值0。说明:把i[0][0]初始化为1,i[0][1]初始化为2,i[0][2]初始化为3,i[1][0]初始化为4,i[1][1]初始化为5,i[1][2]初始化为6。多维数组的初始化与一维数组相似,需要注意的是必须按照前面所讲的存储顺序列出数组元素的值。须注意在赋初值时,初始值表中的数据个数不能多于数据元素的个数。例如:

inti[5]={1,2,3,4,5,6};就是错误的,程序在编译时,系统会报错。inti[3]={1,2,3};等价inti[3];i[0]=1;i[1]=2;i[2]=3;数组元素可以是C++语言中的任一合法数据类型,自然也就可以是char型,即字符型。不过由于C++语言中没有字符串类型,我们通常采用字符数组来存放和处理字符串,因此,它又有一些特殊的地方。注

在给数组元素赋值时,一定要注意数组越界问题。与数组元素的初始化不同,在给数组元素赋值时,必须逐一赋值。

例如:对于下述的数组初始化:例如:对于字符串:″abcd″,可以声明和初始化为:charstr[5]={′a′,′b′,′c′,′d′,′\0′};等价charstr[5]=″abcd″;charstr[4]=″abcd″;说明:因为声明的数组只有4个元素,而初始化时有5个字符作为数据项:′a′、′b′、′c′、′d′、′\0′。其中字符′\0′是字符串的结束符,在用这种字符串方法初始化时,系统会自动加上。C++语言中,一个字符串是用一个以′\0′结尾的一维字符数组来表示的,这个字符数组的声明和初始化可以采用和其他数组相同的方式。例如:对于字符串″abcd″、″hijk″、″opqr″可以声明和初始化为:

charstr[3][5]={{′a′,′b′,′c′,′d′,′\0′},{′h′,′i′,′j′,′k′,′\0′},{′o′,′p′,′q′,′r′,′\0′}};等价charstr[3][5]={″abcd″,″hijk″,″opqr″};等价charstr[][5]={″abcd″,″hijk″,″opqr″};字符数组的赋值规则与其他类型数组一样,必须逐个元素赋值。注对于多个字符串,就可以采用多维字符数组来表示。多维字符数组的初始化同样有两种方法。与枚举类型相同,使用前,必须先声明结构类型,结构类型的声明形式如下:

struct结构名

{

数据类型1成员名1; 数据类型2成员名2;

…; 数据类型n成员名n;

};例如:structstudent//声明学生结构类型

{ charname[20];//姓名,字符型数组,用于存放字符串

charsex;//性别

intage;//年龄

charadd[100];//籍贯,字符型数组,用于存放字符串

};n个数据类型不一定要互不相同。C语言中提供结构类型,它能把不同类型的数据组合成一个集合体。3.结构类型声明结构类型,仅仅是指定了属于这种结构类型的变量的内存使用模式,计算机并不为之分配内存。因此,在程序中必须声明该种类型的变量,程序才能进行数据的存储和处理。结构名结构变量1,结构变量2,…结构变量n;例如:studentstud1,stud2;可以在声明结构类型的同时声明结构变量。例如:

structstudent{ charname[20]; charsex; intage; charadd[100];}stud1,stud2;

struct{ charname[20]; charsex; intage; charadd[100];}stud1,stud2;或

声明结构变量的一般形式如下:在声明了结构变量后,需要对这些变量进行访问。访问一个结构变量包括两方面的内容:访问整个结构变量和访问一个结构变量中的某个成员。例如:studentstud1={″LiuMing″,′M′,20,″Beijing″};通常用于同一结构类型的变量之间的赋值。例如:stud2=stud1;形式如下:结构变量名.成员名

“.”是成员选择运算符。分别访问stud1的name及age成员。例如:stud1.age在声明一个结构变量时,也可以同时对其进行初始化。#include<iostream.h>structstudent{charname[20];charsex[3];intage;charadd[100];};voidmain(){studentstud1={″李明″,″男″,20,″北京″};cout<<<<′\t′<<stud1.sex<<′\t′<<stud1.age<<′\t′<<stud1.add;cout<<endl;stud1.age=18;cout<<<<′\t′<<stud1.sex<<′\t′<<stud1.age<<′\t′<<stud1.add;cout<<endl;}结构变量的使用例1-9C++字符集以外的字符不一定是占据内存的一个字节。比如,每个汉字就是占据2个字节。李明男20北京李明男18北京联合类型也是从C语言中继承下来的一个概念。作用是使几个不同类型的变量共用同一组内存单元。4.联合类型联合类型的声明形式如下:

union联合名

{

数据类型1成员名1;

数据类型2成员名2; ...; 数据类型n成员名n; };例如:unionuarea{charc_data;shorts_data;longl_data;};(续)联合类型名变量名1,变量名2,…,变量名n;uareac_datas_datal_data图上面声明的联合类型uarea的存储形式在声明联合变量时也可进行初始化,但只允许初始化其中的第一个成员。例如:

uareadata1={′A′};联合变量在使用方法上与结构变量相同。说明:是将变量data1中的成员cdata初始化为字符′A′。例如:uareadata1,data2;联合变量声明的一般形式如下:

#include<iostream.h>unionuarea{charc_data;shorts_data;longl_data;};voidmain(){uareadata;data.c_data=′a′;cout<<″c_data=″<<data.c_data<<endl;data.s_data=10;cout<<″s_data=″<<data.s_data<<endl;data.ldata=100L;cout<<″l_data=″<<data.l_data<<endl;}【联合变量的使用】C_data=aS_data=10L_data=100例1-10来由:在使用C++语言的数据类型,如:unsignedlongint声明变量时,有时需多次键入该类型,非常繁琐,且容易出错。为此,C++语言提供了关键字typedef,它可以为这样的类型建立一个或多个别名。形式如下:typedef已有类型别名1,别名2,…,别名n;建立别名后,就可以利用这个别名来声明这种类型的变量。如:ULONGi;

与前面建立新类型不同,这里利用关键字typedef仅仅是为一个类型的名字起了别名。注例如:typedefunsignedlongintULONG;5.关键字typedef的使用变量、常量(操作数)通过运算符组合成表达式。【

1.7.1运算符】

运算是指对数据的求值计算,如:加、减运算等。运算符给出了计算的类型,而参与运算的数据叫操作数(变量、常量)。表达式是用于计算的式子,是计算求值的基本单位。运算符的分类按所要求的操作数的多少一元运算符二元运算符三元运算符需要1个操作数需要2个操作数需要3个操作数运算性质分算术运算符关系运算符逻辑运算符【

1.7运算符与表达式】运算符具有优先级与结合性。当一个表达式中含有多个运算符时,先进行优先级高的运算,后作优先级低的运算。如果表达式中出现了多个相同优先级的运算时,运算的顺序就要看运算符的结合性了。结合性是指当一个操作数左右两边的运算符优先级相同时,按什么顺序进行运算,是自左向右,还是自右向左。优先级运算符功能说明结合性() 改变优先级:: 作用域运算符[] 数组下标.-> 成员选择符.*->* 成员指针选择符从左至右* 间接访问& 取地址newdelete 动态内存分配12从左至右从右至左【

1.7.1运算符】优先级运算符功能说明结合性Sizeof 求所占内存字节数! 逻辑求反~ 按位求反++-- 增1、减1运算符+- 取正、取负() 强制类型*/% 乘法、除法、求余+- 加法、减法23从右至左4567从左到右从左到右从左到右从左到右从左到右从左到右8910<<>> 左移位、右移位<><=>= 小于、大于、小于等于、 大于等于==!= 等于、不等于& 按位与^ 按位异或| 按位或从左到右从左到右(续)优先级运算符功能说明结合性|| 逻辑或?: 条件运算符12131415从左到右从右到左从左到右=+=-=*=/=%=&=^=|= 赋值运算符

<<=>>=, 逗号运算符11&& 逻辑与从左到右从右到左表C++中常用运算符的功能、优先级和结合性1.算术运算符(1)基本算术运算符C++语言中的算术运算符包括基本算术运算符和增1、减1运算符。一元运算符:二元运算符:+(取正)、-(取负)+(或加)、-(或减)、*(乘)、/(除)、%(取余)(续)

%运算符要求它的两个操作数必须是整数或字符型数据,其优先级与结合性和“/”运算符相同。求两个数的余数的表达式如下:

操作数1%操作数2

其计算结果是操作数1被操作数2除的余数,即余数=操作数1-操作数2*整商(整商为操作数1除以操作数2所得的整数商)。例如:10%4//结果是2

对于“/”运算符,当它的两个操作数都是整数时,其计算结果应是除法运算后所得的商的整数部分。例如5/2的结果是2。注增1、减1运算符都是一元运算符,这两个运算符都有前置和后置两种形式。前置形式是指运算符在操作数的前面,后置是指运算符在操作数的后面。例如: I++;//++后置

--J;//--前置(2)增1、减1运算符C++语言中,关系运算符都是二元运算符,共有6个:<(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、==(等于)、!=(不等于)。前置形式是先计算操作数的值(增1或减1),后把操作数的值作为表达式的结果。C++语言中,还允许使用“无名联无论是前置还是后置,这两个运算符的作用都是使操作数的值增1或减1。但操作数和运算符组成的表达式的值并不相同。假设I=2,J=2,看下面的两个例子:

I++; ++J;经过计算后:表达式的值为2,I值为3表达式值为3,J值为3

在进行算术运算时,还需注意计算中的溢出问题。在计算机中每种基本数据类型都有一定的取值范围。对于实数,如果运算结果超出范围,程序将被异常中止。另外,整数或实数被零除也会导致程序异常中止。注2.关系运算符后置形式是先将操作数的值作为表达式的结果,然后把操作数的值增1或减1。

关系运算符用于比较两个操作数的大小,其比较的结果是一个bool型的值。当两个操作数满足关系运算符指定的关系时,表达式的值为true,否则为false。true等于1,false等于0,所以,关系运算符的比较结果可以作为算术运算中的操作数。一元运算符:二元运算符!(逻辑求反)&&(逻辑与)||(逻辑或)若其操作数为0(false),运算结果为true(1),否则为false(0)。只要两个操作数中有一个为0(false),运算结果就为false(0),否则为true(1)。只要两个操作数中有一个不为0(false),运算结果为ture(1),否则为false(0)。4.sizeof运算符sizeof运算符用于计算其操作数在内存中所占的字节数。它是一个一元运算符,操作数可以是C++语言中任一合法的数据类型。该运算符的使用形式如下: sizeof(数据类型);3.逻辑运算符(1)按位求反(~)一元运算符:二元运算符~(按位求反)&(按位与)|(按位或)^(按位异或)<<(左移位)>>(右移位)

位运算符是对其操作数按其二进制形式逐位进行运算,参与运算的操作数应为整数。按位求反的作用是对一个二进制数的每一位求反。例如:

计算~025025:0000000000010101

~025:11111111111010105.位运算符按位或操作的作用是将两个操作数对应的每一位分别进行逻辑或操作。按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作。例如:

计算3&5 3:00000011 5:(&)00000101

3&5:00000001(3)按位或(|)例如:计算3|5 3:00000011 5:(|)00000101

3|5:00000111(2)按位与(&)例如:计算071^052:

071:00111001 052:(^)00101010 071^052:00010011(5)移位

移位运算符左边的操作数指定了需要作移位操作的数。右边的操作数指定了需要移动的位数,因而必须是一个整数表达式。左移位(<<)右移位(>>)右移位是将左操作数的二进制值向右移动指定的位数。右移后,移出的低位舍弃。如果是无符号数则高位补0;如果是有符号数,则高位补符号位或补0。是将左操作数的二进制值向左移动指定的位数。左移后,低位补0,移出的高位舍弃。位异或操作的作用是将两个操作数对应的每一位进行异或,具体运算规则是:若对应位值相同,则该位运算结果为0;否则为1。(4)按位异或(^)00000100左移位举例:表达式4<<1,结果为8舍弃011111000舍弃舍弃11图4<<1的移位操作过程右移位举例:表达式A>>2,结果为-2图A>>2的移位操作过程有char型变量A,其值为-8,则A的二进制补码是11111000

移位运算的结果就是位运算表达式的值,参与运算的两个操作数的值并没有变化。注移位运算可替代乘或除以2或2的n次方运算。举例表达式是由运算符和操作数组成的、用于计算的式子。常见表达式分类算术表达式关系表达式逻辑表达式条件表达式逗号表达式赋值表达式在书写表达式时,必须注意运算符的优先级与结合性,确保列出的表达式的实际求值顺序与自己所要求的一致。必要时可加括号以便于理解,甚至改变优先级。括号的使用可以嵌套。在计算时,先做内括号,再做外括号。在表达式中,连续出现两个运算符时,最好用空白符分隔。注例如:i+++j i+++j【

1.7.2表达式】1.算术表达式算术表达式是由算术运算符或位运算符与操作数组成的表达式。表达式的值和类型由运算符和参与运算的操作数决定:当各操作数的数据类型相同时,表达式的类型就是操作数的类型;当类型不同时,表达式的类型是操作数中类型最高的操作数的类型。

#include<iostream.h>voidmain(){intI(1),J(1);cout<<I++<<′\t′<<++J<<endl;intA,B;A=3;B=5;cout<<(A&B)<<endl;算术表达式的计算例1-11121-18.52.关系表达式与逻辑表达式关系表达式是由关系运算符和操作数组成的,逻辑表达式由逻辑运算符与操作数组成。这两种表达式的值都应是1(true)或0(false)。在进行由“&&”或“||”和操作数组成的逻辑表达式运算时,只对从左开始能够确定整个表达式值所需的最少数目的子表达式,即操作数进行计算,后面的表达式就不再计算了。注doubleX(2.5);cout<<X-(X+0.5)*(A|B);//参与运算的操作数类型不相同

cout<<endl;}算术表达式的计算例1-12

#include<iostream.h>voidmain(){inti(1),j(1),k(3);--i&&j++&&k--;cout<<i<<′\t′<<j<<′\t′<<k<<endl;++i||j--||--k;cout<<i<<′\t′<<j<<′t′<<k<<endl;}逻辑表达式的计算3.条件表达式唯一的一个三元运算符:条件运算符“?:”。条件运算符的结合性是自右向左。由条件运算符和3个操作数组成的式子叫条件表达式。条件表达式的一般形式如下:

表达式1?表达式2:表达式3运算顺序是:先计算表达式1的值,若表达式1的值不为零,则计算表达式2,并把它的值作为条件表达式的值;否则计算条件表达式3,并把它的值作为条件表达式的值。类型为表达式2和表达式3中类型高的表达式的类型。例1-13

#include<iostream.h>voidmain(){inti(3),j(4),k;k=(i>j)?++i:++j;cout<<i<<′\t′<<j<<′\t′<<k<<endl;k=i-j?i+j:i-3?j:i;cout<<i<<′\t′<<j<<′\t′<<k<<endl;}条件表达式的使用3553584.逗号运算符逗号也是一个运算符。使用逗号运算符可以将多个表达式组成一个表达式。它的使用形式如下: 表达式1,表达式2,…,表达式n例1-14计算逗号表达式的值时,从左到右先计算第1个表达式的值,再计算第2个表达式的值,…,最后计算的表达式的值和数据类型便是整个表达式的值和类型。例如:inti; i=(10-2,8/2);4i的值5.赋值表达式分类基本赋值运算符:复合赋值运算符+=-=*=/+%=<<=>>=&=^=|==由赋值运算符与操作数组成的表达式就叫赋值表达式。在C++中还可以连续赋值。变量=表达式说明:可以是C++语言中任一合法的表达式。赋值表达式的作用就是把赋值运算符右边表达式的值赋给左边的变量。赋值表达式的类型为左边变量的类型,其值为值后左边变量的值。例如:X=2.6//表达式的值为2.6例如:X=Y=Z=2.6说明:首先将Z赋值为2.6,表达式Z=2.6的值也为2.6,接着表达式Z=2.6的值赋给Y,使Y的值为2.6,最后X被赋值为2.6,整个表达式的值也为2.6。复合赋值运算符是由基本赋值运算符和二元算术运算符或位运算符结合在一起构成的。对于基本赋值运算符组成的表达式,它的一般形式是:这些复合运算符组成表达式的一般形式为:

变量复合赋值运算符表达式等价变量=变量算术运算符(或位运算符)表达式分解为变量算术运算符(或位运算符)=表达式例如:X*=2//等价于X=X*2 X*=X+2//等价于X=X*(X+2)允许在一个表达式中参与运算的操作数的数据类型不一致,即C++语言支持不同数据类型的数据之间的混合运算。在对这样的表达式求值时,需要对其中的一些操作数进行类型转换。【

1.7.3表达式中数据类型的转换】如果两个操作数的类型不同,系统将自动地把其中操作数类型低的转换成和另一个相同。表达式中的类型转换方式隐含转换强制转换各种类型的高低顺序如下:intunsignedlongunsignedlongdoublechar、shortfloat隐含转换的具体规则如下:●char、short类型自动转换成int,float类型自动转换成double型。●

两个操作数中有一个为longdouble类型,另一个将也转换成longdouble类型;否则,如果其中有一个为double类型,另一个将也转换成double型;…,如上顺序从低向高转换。1.隐含转换隐式转换的方向就是将一个取值范围较小的类型向取值范围较大的类型转换。它能确保在转换过程中数据不受损失。注

类型的转换并不实际改变操作数的数据类型。它只是在计算表达式值的时候,将操作数的值临时做了转换。计算后,操作数仍保持原有的数据类型。强制类型转换的作用是将某种类型强制地转换成指定的类型。强制类型转换是通过强制转换运算符来实现的,具体表示形式如下:

类型说明符(表达式) 或

(类型说明符)表达式说明:第2种是C语言所采用的风格,在C++中一般选用第1种方式。意义为把表达式的数据类型强制转换成类型说明符所指定的类型。2.强制类型转换例如:inti; floatx(4.5f),y;

y=x-int(x);//将float类型转换成int类型,int(x)值为4,后隐式转换继续计算得y值为0.5 i=int(x);//将float类型转换成int类型,i的值取整数部分,为4强制类型转换并不改变操作数的数据类型。在表达式的类型转换中,赋值表达式是一个特例。

当出现把高类型转换成低类型时有可能造成数据精度的损失,是一种不安全的转换。注(续)语句可用于计算表达式的值、控制程序执行的顺序,有时语句也可能不作任何操作(空语句)。分类●表达式语句●块语句●选择语句●循环语句●转移语句由表达式在最后加上分号组成。例如:inti;//将i声明为整型的语句仅由分号组成,在程序中不作任何操作。例如:;//空语句如果把多条语句用“{}”括起来,就组成了一个复合语句。复合语句也称块语句。在块语句的右括号后不再需要分号。空语句【

1.8控制语句】1.if语句选择语句控制程序执行流程的方式是:根据给定的条件,决定执行哪些语句,不执行哪些语句。选择语句分类if语句switch语句if语句又称条件语句,它的最简单的形式是:

if(表达式)语句if语句的意义是:如果表达式的值为0,程序将不执行后面的语句,否则,执行后面的语句。一般是关系表达式,不过事实上,它可是任何表达式。可以是单一语句,也可以是块语句。【

1.8.1选择语句】if语句的使用#include<iostream.h>voidmain(){floatscore;cout<<″Pleaseenteryourscore:″;cin>>score;if(score>=60)cout<<″Passed!″<<endl;if(score<60){cout<<″Nopassed!″<<endl;cout<<″Youshoulddoyourbesttostudy″<<endl;}}说明:是先测试变量score是否大于等于60,然后又测试其是否小于60。例1-15同一变量不是大于等于某个值就是小于它。对于这种情况,C++语言中可使用关键字else来扩展if语句。

Passed!如输入70,则显示:其使用形式如下:

if(表达式)

语句1 else

语句2意义:使得程序在表达式值不为0时,执行语句1而不执行语句2;否则不执行语句1而直接执行语句2。Pleaseenteryourscore

温馨提示

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

评论

0/150

提交评论