Download presentation
Presentation is loading. Please wait.
1
第1章 C++简单程序设计 1.1 C++语言概述 1.2 基本数据类型和表达式 1.3 运算符与表达式 1.4 程序的基本控制结构
2
1.1 C++语言概述 1.1.1 从C到C++ 1.1.2 C++面向对象的特性 1.1.3 C++的词法与规则
返回首页
3
从C到C+ C++语言源于C语言,而C语言是在B语言的基础上发展起来的。1960年出现了一种面向问题的高级语言ALGOL 60,但它离硬件比较远,不宜用来编写系统软件。1963年英国剑桥大学推出了CPL(Combined Programming Language)语言,后来经简化为BCPL语言。1970年美国贝尔(Bell)实验室的K.Thompson以BCPL语言为基础,设计了一种类似于BCPL的语言,取其第一字母B,称为B语言。1972年美国贝尔实验室的Dennis M.Ritchie为克服B语言的诸多不足,在B语言的基础上重新设计了一种语言,取其第二字母C,故称为C语言。 返回本节
4
1.1.2 C++面向对象的特性 1.C++支持数据封装
C++类中可定义三种不同访问控制权限的成员。一种是私有(Private)成员,另一种是公有(Public)成员,还有一种是保护(Protected)成员。 3.C++中通过发送消息来处理对象 C++中是通过向对象发送消息来处理对象的,每个对象根据所接收到的消息的性质来决定需要采取的行动,以响应这个消息。
5
4.C++中允许友元破坏封装性 类中的私有成员一般是不允许该类外面的任何函数访问的,但是友元便可打破这条禁令,它可以访问该类的私有成员(包含数据成员和成员函数)。 5.C++允许函数名和运算符重载 C++允许一个相同的函数名或运算符代表多个不同实现的函数,这就称函数或运算符的重载,用户可以根据需要定义函数重载或运算符重载。 6.C++支持继承性 C++中可以允许单继承和多继承。 7.C++支持动态联编 C++中可以定义虚函数,通过定义虚函数来支持动态联编。 返回本节
6
1.1.3 C++的词法与规则 1.C++的字符集 C++中含有以下字符:数字,小写字母,大写字母,运算符,特殊字符,不可印出字符 。
2.词与词法规则 (1)标识符。 (2)关键字。 (3)运算符和分隔符。(4)字符串。 (5)常量。 (6)注释。 3.书写格式 (1)一般情况下每个语句占用一行。 (2)不同结构层次的语句。 (3)表示结构层次的大括弧。 (4)适当加些空格和空行。
7
表1-1 C++的标准保留字 返回本节
8
1.1.4 C++程序结构的组成 C++程序结构的基本组成包括以下几个部分:
(3)函数 (4)语句 (5)变量 (6)其他
9
返回本节 下面用一个简单的程序例子来分析C++程序的构成。 例1-2:C++程序构成示例。
#define PI //宏定义命令,定义符号常量PI #include <iostream.h> //文件包含命令 void main() //主函数 { double length,area,radius; //定义变量 cout<<"Please input radius:"<<endl; cin>>radius; //输入语句 length=2*PI*radius; area=PI*radius*radius; cout<<"length="<<length<<endl //输出语句 <<"area="<<area<<endl; } 返回本节
10
C++程序的开发步骤 1.编辑 是指把按照C++语法规则编写的程序代码通过编辑器(Borland C ,Visual C++ 6.0,Turbo C++ 3.0)输入计算机,并保存。 2.编译 将编辑好的C++源程序通过编译器转换为目标文件(OBJ文件)。即生成该源文件的目标代码。 3.链接 将用户程序生成的多个目标代码文件(.obj)和系统提供的库文件(.lib)中的某些代码连接在一起,生成一个可执行文件(.exe)。 4.执行 把生成的可执行文件运行,在屏幕上显示运行结果。用户可以根据运行结果来判断程序是否出错。 返回本节
11
1.2 基本数据类型和表达式 数据类型概述 常量 变量 返回首页
12
图1-1 C++数据类型
13
数据类型概述 1.基本数据类型 基本数据类型有4种:整型(int)、浮点型(float)、字符型(char)、逻辑型(bool)。 2.空类型void:用于显示说明一个函数不返回任何值。 3.构造类型,又称为组合类型,它是由基本类型按照某种规则组合而成的。 4.指针类型:变量用于存储另一变量的地址,而不能用来存放基本类型的数据。 5.类类型:是体现面向对象程序设计的最基本特征,也是体现C++与C最大的不同之处。 返回本节
14
1.2.2 常量 1.整型常量 整型数据表示通常意义上的整数,整型常量可以用十进制、八进制或十六进制表示。 2.浮点数常量
常量 1.整型常量 整型数据表示通常意义上的整数,整型常量可以用十进制、八进制或十六进制表示。 2.浮点数常量 浮点数也称为实型数。只能以十进制形式表示。共有两种表示形式:小数表示法和指数表示法。 3.字符常量与字符串常量 (1)字符常量。 (2)转义字符。 (3)字符串常量。
15
4.逻辑常量 逻辑常量是逻辑类型中的值,Visual C++用保留字bool表示逻辑类型,该类型只含有两个值,即整数0和1,用0表示逻辑假,用1表示逻辑真。 5.枚举常量 枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。 6.地址常量 指针类型的值域是0232-1之间的所有整数,每一个整数代表内存空间中一个对应单元(若存在的话)的存储地址,每一个整数地址都不允许用户直接使用来访问内存,以防止用户对内存系统数据的有意或无意的破坏。
16
表1-2 常用的特殊字符 返回本节
17
1.2.3 变量 1.变量命名 变量的命名要遵守以下规则: (1)不能是C++保留字。 (2)第一个字符必须是字母或下划线,中间不能有空格。
变量 1.变量命名 变量的命名要遵守以下规则: (1)不能是C++保留字。 (2)第一个字符必须是字母或下划线,中间不能有空格。 (3)变量名除了使用26个英文大小写字母和数字外,只能使用下划线。 (4)一般不要超过31个字符。 (5)变量名不要与C++中的库函数名、类名和对象名相同。
18
2.变量定义和说明 变量定义是通过变量定义语句实现的,该语句的一般格式为: <类型关键字> <变量名>[=<初值表达式>],…;
19
3.变量初始化 变量初始化一般采用两种方式。 第一种方式是在定义变量时可以给变量赋一个初值,例如: int a=3; float b=3.4; const int c=5; 第二种方式是先定义变量,然后通过赋值语句使变量初始化,例如: int a; a=3; 返回本节
20
1.3 运算符与表达式 运算符 表达式 数据类型转换 返回首页
21
C++语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为:
l 单目运算符(一元运算符,只需一个操作数) l 双目运算符(二元运算符,需两个操作数) l 三目运算符(三元运算符,需三个操作数)
22
1.3.1 运算符 1.算术运算符 2.赋值运算符 3.关系运算符 4.逻辑运算符 5.自增、自减运算符 6.条件运算符 7.位运算符
运算符 1.算术运算符 2.赋值运算符 3.关系运算符 4.逻辑运算符 5.自增、自减运算符 6.条件运算符 7.位运算符 8.sizeof运算符(求字节运算符) 9.逗号运算符
23
1.算术运算符 算术运算符包括双目运算符和单目运算符两种。包括: l +加法运算符,或正值运算符,如1+2,+3)
24
2.赋值运算符 (1)赋值运算符“=”的一般格式为: 变量=表达式;
(2)赋值表达式本身的运算结果是右侧表达式的值,而结果类型是左侧变量的数据类型。 (3)赋值运算符的结合性是从右至左的,因此,C++程序中可以出现连续赋值的情况。 (4)复合运算符:
25
3.关系运算符 (1)关系运算符用于两个值进行比较,运算结果为true(真)或false(假),分别用值非0(true)或0(false)表示。 (2)关系运算符都是双目运算符,其结合性是从左到右,<、<=、>、>=运算符的优先级相同,= =和!=运算符的优先级相同,前者运算的优先级高于后者。 (3)关系运算符的优先级低于算术运算符。
26
4.逻辑运算符 C++中的逻辑运算符为:&&(逻辑与), ||(逻辑或),!(逻辑非)。逻辑表达式的结果为真则为1,结果为假则为0。
逻辑非(!)是单目运算符,逻辑与(&&)和逻辑或(||)是双目运算符。 逻辑非的优先级最高,逻辑与次之,逻辑或最低。 逻辑运算真值表如表1-3所示。
27
表1-3 逻辑运算真值表(真为非0,假为0)
28
5.自增、自减运算符 (1)自增(++)、自减(--)运算符为变量的增1和减1提供了紧凑格式。
(2)自增、自减运算符都是单目运算符,其作用是使变量的值增1或减1。 (3)自增、自减运算符有四种应用格式: (4)C++编译器在处理时尽可能多的自左向右将运算符结合在一起。 (5)在调用函数时,实参的求值顺序一般为自右向左。而不是PASCAL语言那样自左向右。
29
6.条件运算符 (1)条件运算符“?:”是C++中惟一的三目运算符,其形式为: 表达式1 ? 表达式2 : 表达式3
(2)条件运算符的结合性是自右向左。 (3)条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。
30
7.位运算符 (1)位(bit)是计算机中表示信息的最小单位,一般用0和1表示。
(2)位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。
31
8.sizeof运算符(求字节运算符) (1)sizeof运算符是单目运算符,用于计算运算对象在内存中所占字节的多少,它有两种形式:
(2)sizeof可以接受的类型标识符很多,如sizeof(int)表示求整型数据在内存中所占字节数。
32
9.逗号运算符 (1)逗号运算符用于将多个表达式连在一起,并将各表达式从左到右的顺序依次求值,但只有其最右端的表达式的结果,作为整个逗号表达式的结果。 (2)逗号表达式的一般格式为: 表达式1,表达式2,……,表达式n 返回本节
33
表达式 1.算术表达式 2.逻辑表达式 3.关系表达式 4.赋值表达式 5.条件表达式 6.逗号表达式 返回本节
34
1.3.3 数据类型转换 1.隐式类型转换 隐式类型转换是由编译器自动完成的类型转换 2.显式类型转换
数据类型转换 1.隐式类型转换 隐式类型转换是由编译器自动完成的类型转换 2.显式类型转换 显式类型转换是由程序员显式指出的类型转换,转换形式有两种: 类型名(表达式) (类型名)表达式
35
图1-2 数据类型转换的顺序 返回本节
36
1.4 程序的基本控制结构 顺序结构 选择结构 循环结构 转移语句 返回首页
37
顺序结构 1.表达式语句 2.输入/输出(I/O) 3.复合语句
38
1.表达式语句 表达式是指用运算符连接各个运算对象,合乎语法规则的式子。在C++程序中,几乎所有的操作运算都通过表达式来实现,而表达式语句也就成了C++程序中最简单也是最基本的一类语句。 (1)空语句。 (2)赋值语句。 (3)函数调用语句
39
2.输入/输出(I/O) (1)输入。 当程序需要执行键盘输入时,可以使用抽取操作符“>>”从输入流cin中抽取键盘输入的字符和数字,并把它赋给指定的变量。 (2)输出。 当程序需要在屏幕上显示输出时,可以使用插入操作符“<<”向输出流cout中插入字符和数字,并把它在屏幕上显示输出。
40
3.复合语句 C++语言允许把一组语句用一对花括号括起来,构成一个复合语句。例如: { int a; a=1+2; }
复合语句是若干条语句的一个集合,它在语法上是一个整体,相当于一个语句。复合语句与简单语句一样地使用。 返回本节
41
1.4.2 选择结构 1.if…else语句 (1)if语句。 (2)空语句。 (3)if…else语句。 2.switch语句
选择结构 1.if…else语句 (1)if语句。 (2)空语句。 (3)if…else语句。 2.switch语句 switch语句是多分支的选择语句。
42
1.if…else语句 例1-4:判断用户的输入,如果输入的数值大于0,则在屏幕上显示“正数”;否则在屏幕上显示“不是正数”。
#include<iostream.h> void main() { int a; cin>>a; if(a>0) cout<<"正数"<<endl; else cout<<"不是正数"<<endl; }
43
例1-5:判断用户的输入,根据输入数值是大于0、等于0、小于0,分别在屏幕上显示“正数”、“零”、“负数”。
#include<iostream.h> void main() { int a; cin>>a; if(a>0) cout<<"正数"<<endl; else if(a<0) cout<<"负数"<<endl; cout<<"零"<<endl; }
44
2.switch语句 switch语句的语法格式为: switch (整数表达式) { case 常量表达式1:<语句序列1>;
…… case 常量表达式n:<语句序列n>; default:<语句序列n+1>; }
45
例如,根据考试成绩的等级输出百分制分数段:
char grade; //… switch (grade) { case'A': cout << "85~100\n";break; case'B': cout << "70~84\n";break; case'C': cout << "60~69\n";break; case'D': cout << "<60\n";break; default: cout << "error\n";break; }
46
有几点说明: (1)default语句是可缺省的。 (2)switch后面括号中的表达式只能是整型、字符型或枚举型表达式。 (3)在各个分支中的break语句起着退出switch语句的作用。 (4)case语句起标号的作用。标号不能重名,所以每一个case常量表达式的值必须互不相同,否则就会出现编译错误。 (5)当多个分支需要执行同一操作时,可以使多个case语句共用一组语句序列。 (6)各个case(包括default)语句的出现次序可以任意。 (7)每个case语句中可以有多条语句组成相应的语句序列,但不必用{ }。
47
例1-6:读入一行字母,求其中元音字母出现的次数。
#include <iostream.h> #include <conio.h> void main( ) { char c; int count=0; while ((c=getche())!='\n')
48
返回本节 switch (c) { case 'a': case 'A': case 'e': case 'E': case 'i':
case 'o': case 'O': case 'u': case 'U': count++;break; } cout<<count<<endl; 返回本节
49
循环结构 C++提供了三种循环控制语句:while语句,do…while语句,for语句。三种语句都由相似的三部分组成:进入循环的条件,循环体,退出循环的条件;完成的功能也类似。所不同的只是三者进入与退出循环的方式不同。 while语句:当条件满足时进入,重复执行循环体,直到条件不满足时退出。
50
1.while语句 1.while语句 while语句的语法格式为: while (条件表达式) 循环体;
它的含义为:首先对条件表达式进行判断,若判断结果为假(false,0),则跳过循环体,执行while结构后面的语句。若判断结果为真(true,非0),则进入循环体,执行其中的语句序列。 while循环由4个部分组成:循环变量初始化,判断条件,循环体,改变循环变量的值。
51
例如,计算sum=1+2+3+…+10的while循环结构如下:
while (i<=10) //判断条件 { //循环体 sum=sum+i; i++; //改变循环变量的值 }
52
例1-7:输入一行字符,求其中字母、数字和其他符号的个数。
解: #include <iostream.h> #include <conio.h> void main( ) { char c; int letters=0,digit=0,others=0; cout<<"Please input a line charaters\n"; while ((c=getche( ))!='\n')
53
{ if (c>='a' && c<='z' || c>='A' && c<='Z') letters++; else if (c>='0' && c<='9') digit++; others++; }
54
2.do…while语句 2.do…while语句 do…while语句的语法格式为: do 循环体; while (条件表达式);
55
例1-8:求满足下式的最小n值,limit由键盘输入。
程序如下: #include <iostream.h> void main() { int i=0,sum=0; float limit; cout <<"Please input limit:\n"; cin>>limit; do { i++; sum+=1/i; } while sum<=limit; cout<<i; }
56
3.for语句 3.for语句 for语句的语法格式为: for(表达式1;表达式2;表达式3) 循环体; (1)先求解表达式1;
(2)求解表达式2,若为0(假),则结束循环,转到(5); (3)若表达式2为非0(真),则执行循环体,然后求解表达式3; (4)转回(2); (5)执行for语句下面的一个语句。
57
例如,求和运算: for (i=1; ; i++) //分号不能省略
{ sum+=i; if (i>10) break; } 等价于: for (i=1; 5 ; i++)
58
返回本节 例1-9:输出菲波那切数列的前20项。即前两项为1,以后每一项为前两项之和。
#include <iostream.h> void main() { int i1=1,i2=1,i3,i; cout<<i1<<' '<<i2<<' '; for (i=3;i<=20;i++) i3=i1+i2; cout<<i3<<' '; i1=i2; i2=i3; } 返回本节
59
转移语句 1.break语句 break语句的作用是:结束当前正在执行的循环(for、while和do…while)或多路分支(switch)程序结构,转而执行这些结构后面的语句。 2.continue语句 continue语句的作用是:结束当前正在执行的这一次循环(for、while和do…while),接着执行下一次循环。即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。 3.goto语句 goto语句的语法格式为: goto 标号;
60
例如,下面的代码在执行了break之后,继续执行“a+=1;”处的语句,而不是跳出所有的循环。
for ( ; ; ) { … if (i==1) break; } a+=1; //break跳至此处 //…
61
for ( ; ; ) { … if (i==1) break; } a+=1; //break跳至此处 //…
62
例1-10:编程求50~100内的素数 #include <iostream.h> #include <math.h> #define MIN 51 #define MAX 100 void main ( ) { int i,j,k; for (i=MIN;i<=MAX;i+=2) //素数必是奇数
63
{ k=int (sqrt(double(i))); for (j=2;j<=k;j++) if (i%j==0) break; if (j>=k+1) cout<<' '<<i; } cout<<endl; 输出结果为:
64
例1-11:编程从键盘上输入的10个数中所有正数之和。
#include <iostream.h> void main( ) { int num; sum=0; cout<<"please input number:"; for (int i=1;i<=10;i++) cin>>num; if (num<0) continue; sum+=num; } cout <<"sum="<<sum<<endl;
65
例如:求1加到10的总和。 i=1; sum=0; loop: sum+=i++; if (i<=10) goto loop; cout <<"the sum is"<< sum << endl; 返回本节
Similar presentations