1、第一部分第一部分 C+C+结构化程序设计结构化程序设计第一章第一章 C+程序设计基础程序设计基础1.1 C+1.1 C+语言概述语言概述1.C+语言与程序设计语言与程序设计计算机程序:计算机程序:一个指令序列。一个指令序列。程序设计:程序设计:定义指令序列或编写程序的过程。定义指令序列或编写程序的过程。程序设计语言程序设计语言:编写程序的编写程序的语言语言。2.程序设计语言分为程序设计语言分为 面向过程的程序设计语言,如面向过程的程序设计语言,如 C C、FORTRANFORTRAN等等 面向对象程序设计语言,如面向对象程序设计语言,如C+C+、JAVAJAVA等等1.2C程序开发过程:程序开
2、发过程:出错出错编辑源程序预处理程序编译程序连接程序装入程序输出结果执行程序输入、修改源程序出错出错出错出错磁盘磁盘输入数据1.31.3 程序实例程序实例 例例1 1:在屏幕输出在屏幕输出“你好你好,欢迎你欢迎你!”!”/*Hello program*/#include void main()cout你好你好,欢迎你欢迎你!;/你好你好,欢迎你欢迎你!程序说明程序说明:两种注释两种注释 编译预处理行编译预处理行 main()main()函数:函数:voidvoid、函数体函数体、程序执行的起点、程序执行的起点语句语句:一行可以写若干条语句,每个语句用一行可以写若干条语句,每个语句用“;”;”作
3、为结束。作为结束。例例2:编写程序从键盘任意输入编写程序从键盘任意输入2个数,输出这个数,输出这2个数的和。个数的和。#include#include void main()void main()intint a,b,n;a,b,n;coutcout ab;ab;n=a+b;n=a+b;coutcout“a+ba+b=”n=”nendlendl;程序说明:程序说明:第行为第行为变量定义变量定义 第第4行是行是输出语句输出语句第行第行输入输入 第行是第行是赋值运算赋值运算 第行中第行中endl也可以用也可以用“n”或或n代替,代替,表示表示换行换行。例例3 3:由两个函数组成的由两个函数组成的+
4、程序。程序。#includeintfmax(inta,intb)if(ab)returna;elsereturnb;intmain()intv1,v2;coutv1v2;cout两个数中较大数是:两个数中较大数是:fmax(v1,v2)endl;return0;引用引用1.6 1.6 变量、常量及引用变量、常量及引用1.6 1.6 变量、常量及引用变量、常量及引用 变量变量 常量常量继续继续 枚举类型枚举类型1.变量变量程序执行中其值可以改变的量。每个变量与一个程序执行中其值可以改变的量。每个变量与一个2.2.或多个内存单元相对应。或多个内存单元相对应。2.变量名变量名变量的变量的标识名标识名
5、(内存单元的标号)。变量名属(内存单元的标号)。变量名属 于于C+C+的的标识符标识符,取名规则见书。,取名规则见书。例:例:内存单元内存单元内存单元地址内存单元地址 100 101 102100 101 102 103103变量名变量名 x x 45451.6 1.6 变量、常量及引用变量、常量及引用变量变量变量的值,变量的值,可以改变。可以改变。3.变量的定义变量的定义变量变量一般形式为:一般形式为:4.变量的类型变量的类型告诉计算机应为变量分配多少内存空间、取值范围告诉计算机应为变量分配多少内存空间、取值范围以及可以对变量进行的合法操作。以及可以对变量进行的合法操作。C+C+系统已定义的
6、基本数据类型见下页。系统已定义的基本数据类型见下页。1.6 1.6 变量、常量及引用变量、常量及引用类型名类型名说明说明字节字节取值范围取值范围boolcharshortintunsignedshortintintunsignedintlongintunsignedlongintfloatdoublelongdouble布尔型布尔型字符型字符型有符号短整型有符号短整型无符号短整型无符号短整型有符号整型有符号整型无符号整型无符号整型长整型长整型无符号长整型无符号长整型浮点型浮点型双浮点型双浮点型长双浮点型长双浮点型112244444810true,false-128+127-3276832767
7、65535-2147483648+214748364704294967295-2147483648+21474836474294967275-3.410-383.410+381.710-383.410+383.410-49323.410+4932常用的基本数据类型常用的基本数据类型 变量占变量占用空间的大小与使用的编译系统有关用空间的大小与使用的编译系统有关。1.6 1.6 变量、常量及引用变量、常量及引用char char a,b,ca,b,c;/定义、定义、c c为字符型变量为字符型变量intint x x,y y;/定义、为整型变量定义、为整型变量long long intint s1,
8、s2 s1,s2;/定义定义s1s1、s2s2为长整型变量为长整型变量float data_1float data_1;/定义定义data1_1data1_1为浮点型变量为浮点型变量double w1,w2 /double w1,w2 /定义定义w1w1、w2w2为双浮点型变量为双浮点型变量unsigned unsigned m m,n,n;/定义、定义、n n为无符号整型变量为无符号整型变量 例:例:变量定义举例。变量定义举例。1.6 1.6 变量、常量及引用变量、常量及引用5.变量的初始化变量的初始化在定义变量的同时可以给其赋值在定义变量的同时可以给其赋值。char char a=a=A
9、A;intint x x=0=0,y,y=12=12;double w1=12.3456,w2=-0.4567e-4double w1=12.3456,w2=-0.4567e-4;char char ch(ch(B B);long long intint x1(1),y1(100);x1(1),y1(100);double data1(12.056),data2(-0.12345e-4)double data1(12.056),data2(-0.12345e-4);例:例:变量的初始化。变量的初始化。1.6 1.6 变量、常量及引用变量、常量及引用 对已定义变量可以用多种方式改变它的值。对已定
10、义变量可以用多种方式改变它的值。intint x,yx,y=12=12;double w1=12.3456,w2double w1=12.3456,w2;x=18;x=18;y=25;y=25;cincinw1w2;w1w2;例:例:改变变量的值。改变变量的值。1.6 1.6 变量、常量及引用变量、常量及引用关于变量的讨论:关于变量的讨论:函数体内定义的非静态变量,若没有赋初值,则在刚定义函数体内定义的非静态变量,若没有赋初值,则在刚定义 后其值不确定。后其值不确定。赋给变量的值不应超过它的取值范围。赋给变量的值不应超过它的取值范围。改变变量的值(改变变量的值(为变量赋值)是一个为变量赋值)是
11、一个“覆盖覆盖”过程,即无论过程,即无论变量原来的值是什么,变量赋值后,新值将取代原有的值。变量原来的值是什么,变量赋值后,新值将取代原有的值。例:例:int x=15;x=23;例:例:int x;coutx+5endl;例:例:int x;x=5000000000;1.6 1.6 变量、常量及引用变量、常量及引用#include void main()int d1=5,d2=20;double x1=12.5,x2=-5.0;char ch1(*),ch2(A);coutd1+d2endl;coutx1-x2endl;coutch1“ch2+3endl;252517.5 17.5*D*D运
12、行结果:运行结果:例:例:程序中的变量。程序中的变量。返回返回1.常量常量常量常量2.直接常量直接常量程序中直接使用的常数值。程序中直接使用的常数值。1.6 1.6 变量、常量及引用变量、常量及引用每个常量与一定的内存单元相对应。程序执行时其每个常量与一定的内存单元相对应。程序执行时其值值不可以不可以改变。改变。3.常量的类型常量的类型整型、浮点型、字符型、字符串常量、布尔型。整型、浮点型、字符型、字符串常量、布尔型。十进制整数十进制整数:由由0 09 9数字组成的正负整数,如、数字组成的正负整数,如、15、-247。八进制整数八进制整数:以数字以数字0开头的整数开头的整数,由数字由数字0 0
13、7 7组成,如组成,如015,0238。十六进制整数十六进制整数:以以0 x或或0X开头的整数开头的整数,由数字由数字0 09 9和字母和字母a af f (或大写(或大写)组成。例如:)组成。例如:0 x516,0 x8AB,0 xb2ff。1 1)整型直接常量)整型直接常量 用于表示一个整数。用于表示一个整数。注意:注意:八进制和十六进制只能表示无符号整数八进制和十六进制只能表示无符号整数.任一整型常数后跟字母任一整型常数后跟字母(或或)时,为长整型时,为长整型.如如:12345L:12345L 任一整型常数后跟字母任一整型常数后跟字母(或或)时,为无符号整型时,为无符号整型.如如:789
14、5:78951.6 1.6 变量、常量及引用变量、常量及引用2 2)浮点型直接常量)浮点型直接常量 用于表示一个带小数的数。用于表示一个带小数的数。浮点型常数有两种表示形式:浮点型常数有两种表示形式:小数形式:小数形式:3.14159,0.55,123.0。指数形式:指数形式:+5.25e-8 表示表示 +5.2510-8 0.5678e+05表示表示 0.5678105 1.1.指数形式表示浮点型数时指数形式表示浮点型数时e(e(或或E)E)前可以是整数或小数,但后的指数前可以是整数或小数,但后的指数部分必须是整型数。部分必须是整型数。2.2.浮点型数总是按浮点型数总是按doubledoub
15、le类型存储的,只有在数的后面加上才按类型存储的,只有在数的后面加上才按floatfloat类型存储,如类型存储,如1.234E-6f1.234E-6f。3.3.长双精度(长双精度(long doublelong double)型常量通常在双精度数后面加上)型常量通常在双精度数后面加上l l或或L L表示,如:表示,如:1.2345e-12L1.2345e-12L。说明:说明:1.6 1.6 变量、常量及引用变量、常量及引用3 3)字符型直接常量)字符型直接常量 用单引号括起来的单个字符。用单引号括起来的单个字符。1.1.字符型常量中的单引号作为定界符,不是字符型常量内容。字符型常量中的单引号
16、作为定界符,不是字符型常量内容。2.2.字符型常量具有数值,其值就是该字符的字符型常量具有数值,其值就是该字符的ASCIIASCII码值。而且值可以作码值。而且值可以作 为整数参与运算,例如:为整数参与运算,例如:+5 +5 结果为结果为102,是字符,是字符的的ASCIIASCII码值码值 9 9-6 -6 结果为结果为51,是数字字符,是数字字符的的ASCIIASCII码值码值 A A+32 +32 结果为结果为97 ,是字符,是字符的的ASCIIASCII码值码值 -结果为整数结果为整数2。3.3.对不可打印的字符,和特殊字符要使用以反斜杠开始的转义序列。对不可打印的字符,和特殊字符要使
17、用以反斜杠开始的转义序列。说明:说明:1.6 1.6 变量、常量及引用变量、常量及引用例:例:可打印字符:可打印字符:A、S、*、a 不可打印字符:不可打印字符:n(回车符)、(回车符)、0(空字符)(空字符)特殊字符:特殊字符:、”、?4 4)字符串直接常量)字符串直接常量 用双引号括起来的若干个字符。用双引号括起来的若干个字符。1.1.字符串中可以包含空格、转义字符、中文字符等。字符串中可以包含空格、转义字符、中文字符等。2.2.双引号作为字符串的定界符,不是字符串中的内容。双引号作为字符串的定界符,不是字符串中的内容。3.3.一个字符占一个字节,一个汉字占两个字节。一个字符占一个字节,一
18、个汉字占两个字节。4.4.编译程序在存储字符串常量时自动在字符串最后加一个编译程序在存储字符串常量时自动在字符串最后加一个0作为一作为一 个字符串的结束标志,个字符串的结束标志,0占一个字节位置。占一个字节位置。5.5.字符串长度字符串长度是指字符串中包含的字符个数(一个汉字算两个字符),是指字符串中包含的字符个数(一个汉字算两个字符),字符串存储长度字符串存储长度=字符串长度字符串长度+1+1。说明:说明:1.6 1.6 变量、常量及引用变量、常量及引用例:例:“This is a stringn”“a”“ABCnxyz”“1234”“中国中国_天津天津”)布尔直接常量布尔直接常量 仅有两个
19、值,即仅有两个值,即 true(真)和真)和 false(假)。假)。C+C+没有提供独立于整型的基本布尔类型,布尔类型数没有提供独立于整型的基本布尔类型,布尔类型数据是占一个字节,据是占一个字节,true 用用1表示,表示,false用用0表示。表示。6 6)符号常量)符号常量 为常量起一个名字,称为符号常量。为常量起一个名字,称为符号常量。1.1.符号常量在说明时一定要赋初值,其值程序中不能修改。符号常量在说明时一定要赋初值,其值程序中不能修改。2.2.符号常量名不要和一般变量名重名。符号常量名不要和一般变量名重名。3.3.使用符号常量可以提高程序的可读性,增强程序的可维护性。使用符号常量
20、可以提高程序的可读性,增强程序的可维护性。说明:说明:符号常量的说明形式为:符号常量的说明形式为:const 常量名常量值;常量名常量值;或或 const常量名常量值;常量名常量值;例:例:const int CLASSSIZE=30;const double pi=3.14159;返回返回1.什么是引用什么是引用引用引用为程序中已经定义过的变量取一个别名,这个别名称为为程序中已经定义过的变量取一个别名,这个别名称为引用。引用。2.说明引用说明引用 变量名是已经定义过的一个变量名;变量名是已经定义过的一个变量名;与被引用与被引用 变量的类型相一致。变量的类型相一致。1.6 1.6 变量、常量及
21、引用变量、常量及引用一般形式为:一般形式为:&=&(变量名变量名)#include void main()int a(5);int&rea=a;couta“”reaendl;rea=10;couta“”reaendl;例:例:引用举例。引用举例。51010输出结果:输出结果:rea 是是 a 的引用(别名),所以它们对应的是相同的存的引用(别名),所以它们对应的是相同的存 储空间。储空间。返回返回1.枚举数据类型枚举数据类型枚举类型枚举类型用户自己定义的数据类型,将一些可能取值的量逐个列用户自己定义的数据类型,将一些可能取值的量逐个列举出来举出来。2.枚举类型的定义枚举类型的定义一般形式为:一
22、般形式为:enum枚举元素枚举元素;例:例:枚举类型的定义。枚举类型的定义。enum weeksun,mon,tue,wed,the,fri,sat;week a,b;enum dxeast,west,south,north x,y;枚举型使用说明枚举型使用说明(1)(1):枚举元素在说明后都自动有一个整数值。枚举元素在说明后都自动有一个整数值。例:例:enum weeksun,mon,tue,wed,the,fri,sat;其中,其中,sun的值为,的值为,monmon的值为,的值为,satsat的值为的值为6 6 可以为枚举元素另指定一个整数值,指定元素后边的可以为枚举元素另指定一个整数值
23、,指定元素后边的各各元素值按增的顺序重新排列。元素值按增的顺序重新排列。例:例:enum weekmon=1,tue,wed,the,fri,sat,sun;其中,其中,monmon的值为,的值为,satsat的值为的值为6,6,sun的值为的值为7 7枚举型使用说明枚举型使用说明(2)(2):仅能给枚举变量赋枚举元素值。仅能给枚举变量赋枚举元素值。例:例:enum weeksun,mon,tue,wed,the,fri,satw1,w2;w1=mon;w2=fri;/正确正确 w1=1;w2=5;/错误错误 w1=(week)1;/正确正确 对两个同类型的枚举变量可进行比较,实际比较的是它们
24、对两个同类型的枚举变量可进行比较,实际比较的是它们所取的枚举元素的值。所取的枚举元素的值。例:例:w1w2 结果结果为为 false枚举型使用说明枚举型使用说明(3)(3):返回返回例:例:enum weeksun,mon,tue,wed,the,fri,sat w1,w2;cinw1w2;/错误错误 w1=mon;w2=fri;coutw1“”w2endl;/输出结果:输出结果:1 5 枚举变量不能用于输入,输出时仅输出枚举值的顺序号。枚举变量不能用于输入,输出时仅输出枚举值的顺序号。1.7 1.7 运算符与表达式运算符与表达式 1.C+的表达式的表达式表达式是指能表达式是指能计算出值计算出
25、值的式子。的式子。2.C+表达式的组成表达式的组成表达式由表达式由操作数操作数(包括:常量、变量及函数调用)、(包括:常量、变量及函数调用)、运算运算符符和和括号()括号()组成。组成。3.运算符运算符运算符是一个表示对操作数进行特定运算和处理的符号。运算符是一个表示对操作数进行特定运算和处理的符号。算术运算符与算术表达式算术运算符与算术表达式 算术运算符包括算术运算符包括:(加)、(减)、(加)、(减)、*(乘)、(乘)、(除)、(除)、(取余数)(取余数)、可作一元运算符使用,表示正和负。可作一元运算符使用,表示正和负。两个整型数相除,结果仍为整型数两个整型数相除,结果仍为整型数。用于求两
26、个用于求两个整型数整型数相除的余数。相除的余数。例:例:int a=21,b=4;a/b;a%b;简单赋值运算符与赋值表达式简单赋值运算符与赋值表达式 简单赋值表达式的形式为:简单赋值表达式的形式为:变量表达式变量表达式 赋值表达式完成的运算是把表达式的值存入左侧的变量。赋值表达式完成的运算是把表达式的值存入左侧的变量。赋值表达式的值为赋值后左边变量的值。赋值表达式的值为赋值后左边变量的值。例:例:int a=21,b=4,c;c=a+b;a=b=1;为为变量赋值具有变量赋值具有“覆盖覆盖”的性质。在对变量初始化的性质。在对变量初始化时使用的时使用的“=”不是赋值运算符,它只是一个初始化符号。
27、不是赋值运算符,它只是一个初始化符号。复合赋值运算符与赋值表达式复合赋值运算符与赋值表达式 将其他运算符和简单赋值运算符放在一起的缩写形式,例将其他运算符和简单赋值运算符放在一起的缩写形式,例如:如:+=+=、-=-=、*=、/=/=、%=%=等。等。复合复合赋值表达式的形式为:赋值表达式的形式为:变量变量 表达式表达式例:例:int a=21,b=4,c;c/=a+b;/等价于等价于 c=c/(a+b);右侧的表达式应右侧的表达式应视为视为一个整体一个整体。自增和自减运算符自增和自减运算符 自增运算符(自增运算符(+)和自减运算符()和自减运算符(-)的两种使用方式:)的两种使用方式:前缀使
28、用方式:前缀使用方式:变量变量 后缀使用方式:后缀使用方式:变量变量 例:例:应避免在一个表达式中对应避免在一个表达式中对同同一个变量多次一个变量多次进行自增或自减。进行自增或自减。关系运算符与关系表达式关系运算符与关系表达式 关系运算符用于比较两个操作数的大小,包括关系运算符用于比较两个操作数的大小,包括:(小于(小于)、=(大于)、(大于)、=(大于等于)、(大于等于)、=(等于)(等于)!=!=(不等于)(不等于)关系表达式的值是整数值,当关系式成立时为关系表达式的值是整数值,当关系式成立时为1;否则为;否则为0。不能用不能用关系运算符比较两个字符串的大小。关系运算符比较两个字符串的大小
29、。例:例:int a=0,b,c,d;b=(a=0);/注意区别注意区别=和和=。c=(a=0);d=m=x;/比较字符的比较字符的ACSII码码 d=“abc”“efg”/错误错误逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式(1 1)逻辑运算符用于对操作数进行逻辑运算,包括逻辑运算符用于对操作数进行逻辑运算,包括:&(逻辑与(逻辑与)、|(逻辑或)、(逻辑或)、!(逻辑非)(逻辑非)C+C+中可以用中可以用非非0 0数数表示逻辑真,用表示逻辑真,用0 0表示逻辑假。表示逻辑假。逻辑表达式的值取值为逻辑表达式的值取值为1 1或或0 0。逻辑运算符的使用形式是逻辑运算符的使用形式是:操作数操作数
30、1 1&操作数操作数2 2 操作数操作数1 1|操作数操作数2 2 !操作数操作数逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式(2 2)例例1:如果要判断多个条件是否成立一定要用逻辑运算符。如果要判断多个条件是否成立一定要用逻辑运算符。int a=-5,x,y;x=-1=a=-1&a=1;/表达式的值为表达式的值为 0 逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式(3 3)例例2:多个多个&或或|符使用时的符使用时的“短路操作短路操作”。int x,y,z,l1,l2;x=y=z=1;l1=+x|+y&+z;/l1、x、y、z的值分别为:的值分别为:x=-1;l2=+x|+y&-z;/l2、x
31、、y、z的值分别为:的值分别为:1,2,1,1 0,0,2,0条件运算符与条件表达式条件运算符与条件表达式 条件表达式的一般形式为条件表达式的一般形式为:1?2:3例:例:条件表达式举例。条件表达式举例。#include void main()int a,b,c;cinab;c=ab?a:b;coutc变量变量1 变量变量2变量变量n;输入时,用空格、制表符或回车作为输入的两个数据之间输入时,用空格、制表符或回车作为输入的两个数据之间 的分隔。的分隔。所以,不能用所以,不能用cin输入空格、制表符或回车。输入空格、制表符或回车。使用使用cin时,在程序开始处要写入预编译命令:时,在程序开始处要
32、写入预编译命令:#include 输入流对象输入流对象 cincin例:例:输入举例。输入举例。int a,b,c;cinabc;cout 的使用形式:的使用形式:cout表达式表达式1 表达式表达式2 表达式表达式n;使用使用cout时,在程序开始处要写入预编译命令:时,在程序开始处要写入预编译命令:#include 默认输出格式:整型数、字符和字符串原样输出;默认输出格式:整型数、字符和字符串原样输出;float 型和型和double型数的有效数字是型数的有效数字是6位。位。输出流对象输出流对象 coutcout#include void main()int a=123;long int
33、b=1234567;float x1=12.34,x2=23.456789;double y=12.34567890123;cout“a=”an“b=”bendl;cout“x1=”x1“”“x2=”x2endl;cout“y=”yendl;例:例:默认格式输出举例。默认格式输出举例。a=123b=1234567x1=12.34 x2=23.4568y=12.3457 输出结果:输出结果:控制输入输出格式控制输入输出格式 使用控制符可以控制输出数据的格式,常用的控制符有使用控制符可以控制输出数据的格式,常用的控制符有:dec转换为十进制数输入输出转换为十进制数输入输出hex转换为十六进制数输入输出转换为十六进制数输入输出oct转换为八进制数输入输出转换为八进制数输入输出setw(int)设置输出的宽度设置输出的宽度setprecision(int)设置浮点数输出的有效数字位数设置浮点数输出的有效数字位数setfill(char)设置填充字符设置填充字符endl插入换行符插入换行符 除除 endl 外,使用以上格式控制符时,要加上头文件外,使用以上格式控制符时,要加上头文件:#include 输出结果:输出结果:24 18 30 24,24*2412.346例:例:使用控制符控制输出格式举例。使用控制符控制输出格式举例。