大学计算机C++学习第二章_第1页
大学计算机C++学习第二章_第2页
大学计算机C++学习第二章_第3页
大学计算机C++学习第二章_第4页
大学计算机C++学习第二章_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

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

文档简介

第二章

C++基础知识

计算机程序设计基础(C++)2教学内容1.C++程序的基本框架2.C++程序的开发过程3.变量与常量4.运算符与表达式5.类型转换§23C++语言的产生C++是从C语言发展演变而来的,是更好的C引入了类的机制,最初的C++被称为“带类的C”1983年正式取名为C++1989年开始C++语言的标准化工作于1994年制定了ANSIC++标准草案于1998年11月被国际标准化组织(ISO)批准为国际标准,成为目前的C++§24C++的特点全面兼容C它保持了C的简洁、高效和接近汇编语言等特点对C的数据类型系统进行了改革和扩充C++也支持面向过程的程序设计,不是一个完全纯正的面向对象的高级语言支持面向对象的方法系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象是类的实例;实例关系和继承关系是对象之间的静态关系;对象之间是靠消息传递来建立动态联系的。§25常用的C++程序语言工具Microsoft:VisualC++

(又称MSVC++)Borland:C++Builder§26注释预编译命令函数C++程序的书写格式§2.1C++程序的基本框架7编写程序:在计算机屏幕上显示:Hello!源程序清单://屏幕输出Hello!

#include<iostream>//预编译命令

usingnamespacestd;//using命令

voidmain()//主函数名

{ //表示函数的开头

cout<<"Hello!"<<endl;//函数体}//表示函数的结束注释预编译命令主函数输出语句§2.1§2.1C++程序的基本框架8注释

程序中“//”符号表明本行后续字符为注释信息,该信息与程序的运行无关,在编译时被忽略。作用是增强程序的可读性,使程序更容易理解。

C++提供了两种注释方法:

//

其后至换行的所有字符为注释信息。

/**/

夹在“/*”与“*/”之间的所有字符为注释信息。注释信息中不能再包括“/*”和“*/”,即注解方式不能嵌套。程序第一行://屏幕输出Hello!

用于说明整个程序的功能,称为序言注释。第二行起语句后的注释称为解释性注释。§2.19预编译命令

编译程序时把指定文件的内容包含到本程序中来,位于主函数之前。

#include<iostream>

表示把库文件iostream中的内容包含到该程序文件中来。

库文件是系统提供的能实现某些特定功能的文件,如本例中用到系统提供的输出功能。

iostream文件包含处理标准输入输出操作所需要的指令集。

多条#include命令必须分行书写。不加分号§2.110包含库文件时有两种可能形式:

#include<iostream>usingnamespacestd;或

#include<iostream.h>

早些系统实现(如VC6.0)是将标准库功能定义在全局空间中,声明在带.h后缀的头文件中。

C++标准程序库中的所有标识符都定义在名为std的名称空间(计算机内存区域)中。

VC2010不允许:#include<iostream.h>预编译命令using命令:告诉C++编译器cin,cout,endl位于名为std的命名空间内,或者说将C++的库文件加入到当前命名空间std中。§2.1加分号11//屏幕输出"大家好"程序#include<iostream.h>voidmain(){cout<<"大家好!"<<endl;}//屏幕输出"大家好"程序#include<iostream>usingnamespacestd;voidmain(){cout<<"大家好!"<<endl;}C++标准预编译命令写法1、头文件不加扩展名,命令后无分号;2、必须使用using命令,命令后带分号。传统预编译命令写法,2010不适用。§2.112预编译命令指出包含的文件名可以使用<>和“

”两种符号

#include<iostream> #include“c:\jys\iostream”<>表示只在系统目录中寻找要包含的文件“

”表示在指定目录或者当前目录中寻找要包含的文件§2.1库文件位置的默认路径:常使用13例:#include<iostream>

iostream.h文件包含处理标准输入输出操作所需要的指令集(源代码);例:#include<cmath>

cmath.h文件包含内置数学函数的函数定义指令;例:#include<string>

string.h文件包含有声明和访问string型变量的指令常用预编译命令§2.114

在基本程序设计中,源程序可以只包含一个函数——主函数(即main函数),程序的框架结构均为:

#include<iostream> usingnamespacestd;

voidmain() {

函数体

}C++程序的基本结构§2.115

C++程序可以由一个或多个函数组成(每个函数具有相对独立的功能),而函数又是由语句构成。

C++程序有:主函数、用户函数(两者统称自定义函数)和系统函数(标准库函数)。

C++程序必须有且仅有一个main函数,可以定义用户函数,调用系统函数。main函数位于预编译命令之后,在程序中的位置可以任意。主函数main代表了程序执行的起始点和终止点,即程序总是从主函数main的第一条语句开始执行,并结束于主函数的最后一条语句。C++程序的基本结构§2.116例:输入两个数,输出较大的数。#include<iostream>usingnamespacestd;voidmain(){inta,b,c;intmax(intx,inty);cout<<“pleaseenteraandb:”;cin>>a>>b;

c=max(a,b);cout<<“max=”<<c;}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}实例§2.117

(1)“{”与“}”为函数体的起止符,必须配对使用。“{}”之间的内容为函数体,函数体内可以包含任意多行语句。(2)C++规定每个语句的最后以“;”结束。(3)C++程序的书写很灵活,一行可书写多个语句,一个语句可以写成多行,但书写时首先应该考虑程序的可读性。说明§2.118(4)主函数的书写也可以是如下形式:

intmain() {

函数体

return0;

}

int表示函数返回一个整型的数据说明§2.119主函数main()函数之前必须有返回值类型说明,void表示无返回值voidmain(){

…}intmain(){

…return0}向操作系统返回0,表示程序正常结束20//屏幕输出"大家好"程序#include<iostream>usingnamespacestd;int

main(){cout<<"大家好!"<<endl;return0;}/*屏幕输出"大家好"程序*/#include<iostream>usingnamespacestd;voidmain(){cout<<"大家好!"<<endl;}举例21

通常采用缩进格式,按不同层次的结构,从不同的起始位置写起,如下:

intabc()

{

…;

…; for()

{

…; if()

{

…;

…;

}

}

}C++程序的书写格式注意:C++区分大小写,所有标点必须使用西文标点,只有双引号里(字符串)、注释里才可使用中文。

§2.1//屏幕输出"大家好"程序#include<iostream>usingnamespacestd;int

main(){cout<<"大家好!"<<endl;return0;}22完整的c++程序[注释程序基本功能]#include<库文件主名>usingnamespacestd;intmain(){[声明常量][声明变量][输入语句][计算语句][输出语句]return0;}//main()函数结束注释语句Using命令主函数注释语句头文件§2.123§2.2C++程序的运行与调试方法§2.2基本概念编译方式C++程序的运行过程VC++2010操作步骤调试程序24基本概念源程序:用汇编语言或高级语言

编写的程序;目标程序:二进制代码程序,机器可直接识别;库文件:系统将经常使用的标准程序预先编好,并编译成程序库(能够直接调用的机器代码),可供用户直接调用。§2.225编译方式§2.226补充:OBJ和EXE文件的区别OBJ和EXE都是二进制文件;OBJ是COFF格式,只给出了程序的相对地址,是跨平台的,没有经过链接的重定位,不是可执行的代码;EXE是PE格式,给出了程序的绝对地址,是所有系统可以识别和执行的。27C++程序的运行过程C++源程序:编辑→编译→连接→运行.obj.exe.cpp§2.2生成28项目工作区窗口:包含用户项目的一些信息(头文件、源文件、资源等)VC++2010集成环境及操作输出窗口:包括编译和连接、调试、在文件中查找、结果等输出信息文档窗口:显示源文件、资源文件及文档文件的程序代码标题栏菜单栏工具栏状态栏:显示当前的操作状态、注释、光标所在的位置等§2.2窗口列表:显示当前窗口名称,可以单击鼠标切换。29VC++2010操作步骤

启动VC++2010

创建项目创建源文件编辑程序—保存—编译—执行生成—执行§2.2二选一30启动VC++2010§2.231打开VC++2010起始页§2.232新建项目§2.233新建项目§2.234新建项目§2.235新建项目§2.236打开已有项目3738向项目中添加源文件§2.2右击”源文件”39新建C++源文件§2.240在编辑窗口输入程序§2.241“编译”或者“生成”§2.2生成产生OBJ和EXE文件,相当于“编译+连接”。编译只产生OBJ文件。42执行程序(运行)§2.243结果窗口§2.2441、包含有C++代码的.cpp文件称为()文件。2、编译器将C++代码转换成机器代码后保存在()文件中,扩展名为()。3、连接器生成()文件,扩展名为(),该文件包含有运行C++程序所必需的所有机器代码。源目标.obj可执行.exe自测题§2.245测试:在计算机上使用样本数据运行程序,检查运行结果是否正确;调试:查找和排除错误(bug、debug);bug分语法错误、逻辑错误和运行错误:语法错误:违反C++语法规则,如误拼关键字或变量名、漏写分号等;编译时可发现;逻辑错误:如漏写语句、语句顺序错误等,在编译、执行时均不能发现。运行出错:在编译时不能查出。如:除零、计算负数的平方根等。调试程序§2.246#include<iostream>;usingnamespacestd;intmain(){floatxcout<<“Pleaseenterx:”<<‘\n’;cin<<x;if(x>=0)cout<<x<<endl;elsecin<<-x<<endl;调试举例:求非0数的绝对值§2.2调试程序471、一行语句输入完成,按Enter键换行,如果下一行语句是下一层次,先按Tab键缩进,再输入。如果下一行语句是上一层次,先按Shift+Tab键退回,再输入。2、选中程序行,按Tab键,向右缩进四个字符位置。3、选中程序行,按Shift+Tab键,向左缩进四个字符位置。编辑程序小诀窍§2.248容易出错问题强调1、键盘输入多个数据时使用回车、空格、Tab键作为间隔符;2、语句后应加分号;3、标点符号应该使用英文半角状态输入;4、预编译命令后不加分号;5、语句中关键字和数据之间有空格,如return0;6、变量、常量要先声明再使用;7、使用变量时,若变量名输错,系统认为未声明;8、cin>>变量名;

不能是字面值或endl。§2.249§2.3§2.3常量与变量基础知识简介常数变量符号常量501、C++字符集大小写的英文字母:A~Z,a~z数字字符:0~9特殊字符:

space! # % ^ &

_ + -*/= ~ < > \ ' " ; . , ()[]{}C++程序由下面字符所组成的单词或标识符写成:§2.3基础知识简介51

源代码文件:描述算法的源代码,扩展名为.cpp。如:example1.cpp

C++源程序:由一个或多个源代码文件及头文件组成。

头文件:放变量、类型、宏和类等的声明,扩展名为.h。如:iostream.h、cmath.h。2、源程序§2.3523、词法记号关键字:

C++预定义的单词,不允许用户重新定义。用户自定义标识符:是程序员定义的单词,在程序中声明变量、数组、函数和标号等的名称。操作符:

用于实现各种运算的符号。文字:

在程序中直接使用符号表示的数据。分隔符:

(){},:;

用于分隔各个词法记号或程序正文。空白符:

空格、制表符(TAB键产生的字符)、换行符(Enter键所产生的字符)和注释的总称。§2.353

#include

<iostream>usingnamespace

std;void

main() { int

a;

intb;

intc;

//一行可写多个语句

cout<<"输入第一个加数a:"; cin>>a;

cout<<"输入第二个加数b:";

cin>>b; c=a+b; cout<<a<<"+"<<b<<"="<<c<<endl;} //C++中语句采用自由格式书写[例]编写一个实现两个整数相加的程序§2.3541、在对一个C++程序进行编译时,可发现注释中的拼写错误()2、一个C++源程序必须包含一个main函数()3、C++中一条语句可用分号或逗号作为结束符。()4、一个C++源程序总是从()开始执行

A.程序的第一个函数B.主函数C.子程序D.主程序5、设有定义:inta,b;当执行cin>>a>>b;时,输入a,b的值,作为数据的分隔符可以是()6、C++源程序必须有return语句。()自测题§2.3×√×Benter、space、tab×55数据类型

程序处理的对象是数据,有数值数据、文字数据、图像数据、声音数据等多种形式,最基本、最常用的数据是数值数据和文字数据。

数据在存储器中存放的格式称为数据类型。为表现不同性质的事物,要用不同的数据类型。§2.356程序中用到的数据都必须指明其数据类型,即:必须遵循“先声明,后使用”的原则。任何数据在计算机中只能以二进制的形式存储。不同类型的数据占据不同长度的存储单元。

例如:char1字节,int4字节不同类型的数据对应不同的值域范围。

例如:short2字节-32768~32767

int4字节-2147483648~2147483647不同类型的数据对应不同的操作(运算)及规则。

例如:1.0/4.0与

1/4结果不同!数据类型§2.357C++数据类型基本数据类型非基本数据类型短整型

short整型int长整型long浮点型float双精度型double长双精度型longdouble字符型char布尔型bool数组指针引用类结构联合枚举C++内部预定义的类型由基本数据类型构造出来的类型§2.358数据对象的表达方式

C++中数据按本身的变化规律有常量和变量之分。

在程序运行过程中,其值可以被改变的量称为变量,其值不能被改变的量称为常量。

多数数据经常变化,而少数数据不变化。常量和变量是计算机语言中数据的两种基本形式,常量和变量的运算规则有区别。

常量有字面常量和符号常量两种,字面常量又称为常数

或直接常量,是在程序中直接使用的值,不占内存。§2.359

#include<iostream>usingnamespacestd;voidmain(){ floatr;constdoublePI=3.14; doublearea; cin>>r; //输入圆的半径

area=PI*r*r;//计算圆面积

cout<<"area="<<area<<endl;} [例]写出计算圆面积的程序符号常量变量字面常量§2.360基本数据类型§2.3基本数据类型常量变量字面常量符号常量整数浮点数字符字符串整型浮点型字符型字符串型布尔型开辟内存空间开辟内存空间布尔值61

字面常量指程序中直接给出的量,不占用内存空间。又称为字面值、常数或直接常量。

字面常量(常数)常常用来给变量赋初值。

在程序中使用常数来初始化变量时,常数的数据类型与变量的数据类型是一致的。

C++中的字面常量有整型、实型、字符型、布尔型、字符串型五类。字面常量§2.3.1§2.3.1常数常量分为:字面常量(常数)和符号常量。62字面常量类型可以包含的字符示例数值型:整型,实型数字(0~9),正号(+),负号(-),字母e或E(作为指数标志)23.14-23003.2E6(表示3.2×106)字符型用单引号括起来的单个字符‘A’‘b’‘2’‘’‘$’字符串型用双引号括起来的

0个或多个字符“Howareyou”“345”“123ab”“”布尔型逻辑假,逻辑真falsetrue字面常量(字面值)简介§2.3.163整型字面值又叫整数、整型常量,包括正整数、负整数和零。1、十进制整数:无前缀,数码为0至9。如0、123、-123等。2、八进制整数:前缀为0,数码为0至7。如0123,-045等。3、十六进制整数:前缀为0X或0x,数码为0至9,

A至F或a至f。如0X123,-0x1f。§2.3.164例如:15+30=15+030=15+0x30=015+30=015+030=015+0x30=0x15+30=0x15+030=0x15+0x15=453963433761514542§2.3.165实型字面值又叫实型常量、浮点数。1、小数形式:

由数字和小数组成,必须有小数点。如0.0、0.123、.123、123.0、123.、-0.123等。2、指数形式:

用E或e表示×10,E前必须有十进制数,E后必须为十进制整数。

如123×103表示为123E3;

-123×10-3表示为-123E-3;

C++输出时统一规范为:+1.23E+5和-1.23E-5。§2.3.166

实型常数分单精度(float)、双精度(double)和长双精度(longdouble)三种:

不加说明(隐含)的实型常数是double型;

float型常数必须在实数后加F(或f);

longdouble型常数须在实数后加L(或l)。实型字面值简介C++认为除0.0外,其余浮点常数都是double型,所以在给float型变量赋初值时:1.可赋为0.0;2.在浮点常数后加F(f);3.进行强制类型转换或者由系统完成自动类型转换(见§2.5)。-3.451.23E-3-3.45F1.23E-3f-3.45L1.23E-3l§2.3.167字符型字面值定义:用单引号引起的单个字符,区分大小写。如‘A’、‘a’特点:必须用单引号,不能用其他符号。必须是单个字符,不能是字符串。转义字符:由\

开头,后跟一个或几个字符,代表特定含义。如:\n表示换行。字符数据在内存中的存储形式:

通常以十进制ASCII码表示,以二进制ASCII码存储,占1个字节。

如:十进制ASCII码值为48、65和97分别代表字符‘0’、‘A’和‘a’。举例§2.3.168

对于控制字符等不可见的字符以及其他一些特殊字符(单引号、双引号、反斜杠符等)可以使用由一个反斜杠符和一个或几个符号组成的转义字符表示:

C++预定义的主要转义字符:

‘\n’(换行)

‘\r’(回车)‘\t’(横向跳格)

‘\’’(单引号)‘\a’(响铃)‘\”’(双引号)

‘\b’(退格)‘\\’(反斜杠)‘\0’(空格)

‘\ddd’

(8进制数表示的ASCII字符)

‘\xhh’

(16进制数表示的ASCII字符)转义字符简介§2.3.1\r是回车,即回到行首,只有\n才有换行功能,键盘enter=’\r’+’\n’

69水平制表符空格

‘‘#include<iostream>usingnamespacestd;voidmain() { floata=2.7f; floatb=-3.2e24f; cout<<a<<'\0'<<b<<'\n'; cout<<a<<'\0'<<b<<'\r'; cout<<a<<'\t'<<b<<endl;}[例]输出两个浮点数的值常数实例换行§2.3.1回车70#include<iostream>usingnamespacestd;voidmain(){ cout<<'a'<<'\n';

cout<<'\141'<<endl; cout<<'\x61'<<endl;}//输出字符a//输出字符a//输出字符a例、输出单个字符的方法常数实例§2.3.171

#include<iostream>usingnamespacestd;voidmain(){cout<<'\''<<endl; cout<<'\"'<<endl; cout<<'"'<<'\n'<<'a'<<endl;cout<<'\t'<<'b'<<'\''<<'\b'<<'a'<<endl;

cout<<'\\'<<endl; cout<<'\a'<<endl;

}//输出单引号//输出双引号//输出反斜杠//输出响铃例:单引号、双引号等特殊字符的输出常数实例§2.3.1//输出水平制表符,退格//输出换行72字符串型字面值定义:简称字符串,用双引号定界,区分大小写。如“computer”、“A”、“a”、“”系统自动在字符串末添加结束符号‘\0’(空字符,作为字符串结束标志,占1个字节)字符和字符串的不同:引用符号不同:字符用单引号;字符串用双引号。容量不同:字符——单个字符;字符串——零个、单个或多个字符。占用内存空间不同:字符占1个字节;字符串占字符串字节数加1个字节。如‘a’和“a”。§2.3.173#include<iostream>usingnamespacestd;voidmain(){cout<<12345<<endl; cout<<"12345\n";

cout<<"'VC++'是\"VisualC++\"的缩写\n";}//输出整数值//输出字符串例:字符串输出cout<<"\'VC++\'是\"VisualC++\"的缩写\n";常数实例§2.3.1等价74布尔型字面值

布尔型数据的取值:

只有false(逻辑假)和

true(逻辑真)

两种。输出时:false为0,true为1。布尔型数据也可以和数值型数据参与运算,

此时:true相当于1false相当于0§2.3.175#include<iostream>usingnamespacestd;voidmain(){cout<<false<<endl; cout<<true<<'\n'; cout<<false+1<<endl; }§2.3.1常数实例例:布尔型字面值的输出76§2.3.2变量变量:程序运行过程中其值可以改变的量;常量:程序运行过程中其值不变的量;“先声明,后使用”

即命名、指定数据类型、赋初值,对变量进行声明的语法格式如下:

数据类型变量名=初值;例如:floatlength=0.0;intsum=1;存储单精度数存储整型数§2.3.277标识符简介标识符:在程序中声明变量、数组、函数和标号的名称。分为系统保留字和用户自定义标识符;系统保留字:又叫关键字,有预定的含义,不允许用户重新定义,也不允许用户定义的标识符与其同名。C++的关键字见书P231附录Ⅲ§2.3.278自定义标识符命名规则标识符只能包含字母、数字和下划线;必须以字母或下划线开头(一般用字母);不能使用关键字;最多不超过247个字符;区分大小写。习惯上:见名知意一般命名变量用小写字母,命名常量用大写字母§2.3.279判断变量名是否合法

sum_1

2max

×age3

legiouerwalgk

int

×_a1

√§2.3.280声明变量0.0语法示例初值类型

变量名=初值;类型

变量名(初值);类型变量名1,变量名2,…变量名n;变量名1=初值;变量名2=初值;

...变量名n=初值;inta=1,b=1;intsum1,sum2;sum1=0;sum2=0;10floatrate(0.0);chargrade=’’;一个空格stringname=“”;空字符串先声明后使用§2.3.2习惯:变量名小写81内存单元可存储的数据数据类型占用内存字节数取值范围整型短整型short2-32768~32767整型int4(32位机)-2147483648~2147483647长整型long4(32位机)-2147483648~2147483647浮点型实型float4±3.4e-38~±3.4e38双精度型double8±1.7e-308~±1.7e308长双精度型longdouble10±3.4e-4932~±1.1e4932字符型char1一个字符布尔型bool1true,false变量的类型§2.3.216位机int占2字节82输入输出流流:数据从一个位置流向另一个位置;C++使用流来执行标准的输入输出操作;标准输入流——键盘,称为cin标准输出流——屏幕,称为cout>>为流提取操作符,用于从cin(键盘)中"取出"数据<<为流插入操作符,用于将数据"插入"到cout(屏幕)中;例:cout<<"Hello!";屏幕上显示Hello!cin>>rate;键盘输入数据存于rate变量§2.3.283格式:

cout<<表达式<<表达式…<<endl;cin>>变量>>变量…;换行

cout<<‘\n’;cout<<“\n”;cout<<endl;输出数值

cout<<3;输出字符串(双引号中的内容原样输出)

cout<<"******";输出变量的值

inta=5;cout<<a;输入输出流§2.3.284输入输出流例:cout<<"hello!\n";inta,b;cin>>a>>b;cout<<"a+b="<<a+b<<endl;

§2.3.285

输入几个数据时,要用空格、回车或Tab键分隔开。

cin>>a>>b>>c;(变量名不能是字面值常量或endl)

运行时从键盘输入:3.52.1-4.3

3.5,2.1,-4.3

错误

输入的数据个数、类型要与接收变量匹配。

inti,j;//定义为整型变量

cin>>i>>j;

运行时从键盘输入:2 -8

2.5 -8

错误输入完所有数据后,要用回车键表示输入结束。输入操作的几点说明:§2.3.286

cout<<a<<b<<c;和下面几条输出语句等价吗?

cout<<a; cout<<b; cout<<c;

若想使输出更明确,可:

cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; cout<<"c="<<c;

或:

cout<<"a="<<a<<endl<<"b="<<b<<endl<<"c="<<c;输出操作举例:§2.3.287阅读程序写出程序功能#include<iostream>usingnamespacestd;intmain(){cout<<"C++"<<"isaprogramminglanguage."<<endl;cout<<"C++"<<"is";cout<<"a";cout<<"programming"<<"language.";cout<<endl;cout<<"C";cout<<"+";cout<<"+";cout<<"isaprogramminglanguage."<<endl;return0;}§2.3.288#include<iostream>usingnamespacestd;voidmain(){ floatnum1,num2,sum,SUM; cout<<"Enterfirstnumber:"; cin>>num1; cout<<"Entersecondnumber:"; cin>>num2; sum=num1+num2;SUM=num1-num2; cout<<"Thesumis"<<sum<<endl;cout<<"TheSUMis"<<SUM<<endl;}阅读程序写出程序功能§2.3.2大小写严格区分!89§2.3.3符号常量

符号常量是程序运行过程中数值不变的内存单元。关键字const用来说明属于某种数据类型的符号常量,定义方法为:①const数据类型说明符常量名=常量值;②数据类型说明符const常量名=常量值;如:

const

doublePI=3.141592653;

char

constOP=‘+’;

§2.3.3

符号常量一旦定义不能在程序中再对它赋值。习惯:大写90符号常量的名称习惯使用大写字母;在定义符号常量时必须赋值;定义了的符号常量不能再改变它的值。若数据类型为int,则类型可省略。

如:constint

SUM=0;

intconstSUM=0;

constSUM=0;注意:§2.3.3等价91声明符号常量语法示例const

数据类型常量名=值;数据类型const

常量名=值;const

intAGE=30;constfloatMAXPAY=15.75;constcharYES=‘Y’;stringconstSCHOOL=“西南交通大学”;先声明后使用习惯:常量名大写优点:含义清楚、一改全改92[例]编程实现:求半径为8的圆的面积和周长。算法描述:定义符号常量PI定义double变量r,area,circum半径r=8;计算圆面积area=PI*r*r计算圆周长circum=2*PI*r输出圆面积和周长符号常量的应用§2.3.393#include<iostream>usingnamespacestd;voidmain(){

}constdoublePI=3.141592653;doubler,area,circum;area=PI*r*r;circum=2*PI*r;cout<<"面积为:"<<area<<endl;cout<<“周长为:“<<circum<<endl;r=8;§2.3.394§2.4运算符和表达式§2.4

我们把运算符、运算量(也称操作数)构成的式子称为表达式。表达式按照所规定的运算得到的结果便是表达式的值。

C++提供了丰富的运算符:①从功能上可分为算术运算符、条件运算符、逻辑运算符、赋值运算符、逗号运算符等;②从表现形式上可分为单目运算符、双目运算符及三目运算符等(见下页)。

95单目运算符,又称为一元运算符

运算符操作数

(如:- !--++)例:i++双目运算符,又称为二元运算符

操作数1运算符操作数2

(如:+-*/%)例:3*2三目运算符

条件运算符(如问号运算符:?)例:

x>y

?

x

:

y§2.4运算符的分类96

优先级是指表达式中运算符的执行顺序。在C++中,优先级以阿拉伯数字表示,数值越小级别越高。计算机按照优先级由高到级逐一运算处理。一般而言,单目运算符的优先级高于双目运算符。

结合性是指当表达式中的多个运算符优先级相同时,是按照从左至右的顺序执行,还是从右至左的顺序执行,从左至右称为左结合,从右至左称为右结合。§2.4.1运算符的优先级和结合性97算术运算符运算符运算优先级别()改变正常优先级1-负号2*,/,%乘法、除法、求余运算3+,-加、减法4§2.4.198算术运算符/:除法运算符注:整数相除时取整数舍小数,如5/2得2,5.0/2.0=2.5%:取模运算符或求余运算符用于计算两个整型常量或整型变量相除的余数。如5%2=1,而25.7%3是非法的1/2=?1/2.0=?1.0/2=?0.500.5§2.4.199算术表达式表达式:是操作符、操作数(常量、变量、函数等)和标点符号组成的序列,其目的是用来说明一个计算过程。算术表达式:用算术运算符和括号将操作数连接起来,构成的符合C语法规则的式子。运算符的优先级与结合性优先级:先乘除,后加减。结合性:左结合性,即同级运算符由左至右结合。§2.4.1100算术表达式举例例:设inta=5,b=2;floatc=5.0,d=2.0;求a/b、a%b、c/d、a+a%b/b、a%d。a/b=2、a%b=1、c/d=2.5、a+a%b/b=5、a%d非法已知inta=3467,写出计算a的个、十、百、千位的表达式;a%10=7,a/10%10=6,a/100%10=4,a/1000%10=3偶数:x%2为0;奇数:x%2为1写出偶数的通式;§2.4.1101算术表达式举例如下的表达式是否正确?(x+y)(x-y)5X=5+3-0+0

=8设a=5,b=3,c=1,d=2,e=6,求:a+b-c/d+e%d§2.4.1××102

赋值语句语法示例变量名=表达式;(注:不能用赋值语句给常量赋值,赋值运算符的优先级低于算术运算符)hours=10;age=age+1;price=price*0.9;name=“Jack”;表达式的数据类型必须和要赋值变量的数据类型匹配§2.4.2将表达式的值赋给操作符左边的变量赋值等号在计算时具有右结合性!103a=5a=b=c=5 a=5+(c=6)

a=(b=4)+(c=6)

a=(b=10)/(c=2)

表达式值为5,a,b,c均为5表达式值为11,a为11,c为6表达式值为5,a为5赋值运算符举例表达式值为10,a为10,b为4,c为6表达式值为5,a为5,b为10,c为2§2.4.2104复合赋值运算符+=,-=,*=,/=,%=等例如:

a+=3

等价于a=a+3

x*=y+8

等价于x=x*(y+8)

x%=3

等价于x=x%3

已知inta=12;求执行a+=a-=a*a后a的值

a=a+(a=a-a*a)=a+(a-a*a)=-120§2.4.2?-132-132a=-264××等价于:a=a-a*a;a=a+a;具有右结合性105inta(2),b(3),c(4);a*=b/=c-=a;

a=a*(b=b/(c=c-a));

a-=b*=c+=3;

a=a-(b=b*(c=c+3));

a=b=c=1;c=(a*=2)+(b+=3)+2;

c=(a=a*2)+(b=b+3)+2;Page105//a=2,b=1,c=2//a=-3,b=5,c=5//a=2,b=4,c=8复合赋值运算符举例§2.4.2106自增、自减运算符使用:赋值、输出、计算等作用:使变量的值增加1或减少1。后置运算:i++,i--

表示先使用后加(减)1;前置运算:

++i,--i

表示先加(减)1后使用;§2.4.2#include<iostream>usingnamespacestd;voidmain(){inta,b;a=12;b=10;cout<<--a-b<<endl;//1a=12;b=10;cout<<(a--)-b<<endl;//2a=12;b=10;cout<<++a-b<<endl;//3a=12;b=10;cout<<(a++)-b<<endl;//2}1071、y=2,x=y++;2、y=2,x=y--;3、y=2,x=++y;4、y=2,x=--y;先将y的值赋给x,y再自加1得3,相当于x=2,y=3先将y的值赋给x,y再自减1得1,相当于x=2,y=1y先自加1得3,然后将y的值赋给x,相当于x=3,y=3y先自减1得1,然后将y的值赋给x,相当于x=1,y=1自增自减运算符示例§2.4.2108自增、自减运算符++、--只能作用于变量,不能作用于常量。-i++表示-(i++),XY表示(X--)-Y。已知:a=8;b=10;写出执行c=--a;d=b--;e=a--;f=--b;后abcdef的值6,8,7,10,7,8§2.4.2相当于:--a;c=a;d=b;b--;e=a;a--;--b;f=b;109[例]写出程序的运行结果#include<iostream>usingnamespacestd;voidmain(){inti=5,j=5;intm=10,n=10;

i++;++j;cout<<i<<""<<j<<endl;cout<<i++<<""<<++j<<endl;

m--;--n;cout<<m<<""<<n<<endl;cout<<m--<<""<<--n<<endl;cout<<(m+=10)<<endl;}//66//67//99//98§2.4.2//18作为单独的语句,i++;++i;效果完全相同:i=i+1;110#include<iostream>usingnamespacestd;intmain(){inta,b,c,d,e;a=6;b=c=d=e=3;c=(a--)-b;d=-b++;e=-(--a)--;cout<<a<<endl<<b<<endl<<c<<endl<<d<<endl<<e<<endl;return0;}[例]写出程序的运行结果等价于d=-(b++);§2.4.2111自增自减运算符、复合赋值运算符使用说明优点:丰富了程序的表达式,使程序简洁干练,生成的目标代码效率高;缺点:难于理解和调试,容易产生二义性,不同的C编译器得出的结果有可能不同。建议:为确保实现自己所要求的计算顺序,可用括号加以明确;如:-(--a)。将有副作用的复杂表达式分解成几个比较简单的表达式处理。尽量不要在一个表达式中对同一个变量连续使用++或--。如:避免(--a)++。§2.4.2112逗号表达式

1.

逗号运算符的使用格式为:表达式1,表达式2,……,表达式n

运行时依次求解各个表达式的值,表达式n的值作为整个逗号表达式的值。

2.使用逗号表达式的目的一般只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。

3.逗号运算符是所有运算符中级别最低的运算符。已学运算符的优先级顺序为:

算术运算符>赋值运算符

>逗号运算符§2.4.3113[例]写出程序运行结果#include<iostream>usingnamespacestd;voidmain(){intx=0,y=2;inta=5,i=0,j=0;x=(a=3*5,a*4);y=(i=2,j=2,i++,--j);cout<<x<<endl<<y<<endl;cout<<(i=2,i++,a--)<<endl;}60115§2.4.3114§2.5类型转换§2.5.1

由于字符型数据存放的实际上是相应字符的ASCII码的码值,所以字符型数据和整型数据是匹配的。字符数据和整型数据之间可以互相赋值、运算。例如:intj; charm;j='a'; m=97; intc='A'+2;cout<<j<<endl<<c<<endl<<m<<endl;charc=65;intj='A';cout<<c<<","<<j<<endl;字符型数据的类型转换115隐含类型转换

由系统自动完成,也叫自动类型转换。

如果不同类型的数据参与运算或者表达式值的数据类型与要赋值变量的数据类型不一致,大多数程序设计语言使用隐含类型转换来使数据类型一致。隐含类型转换由系统自动进行,有可能影响程序结果的准确率(高赋低时),此时系统会出现警告信息,编程时要尽量避免出现此类情况。§2.5.2116§2.5.2隐含类型转换原则:(1)赋值号右边类型转换为赋值号左边变量的类型。(2)多种类型数据混合运算时,低类型转换为高类型。(3)浮点型转换为整型时,直接去掉小数部分。(4)双精度转换为单精度时,去除多余小数位数四舍五入。隐含类型转换117#include<iostream>usingnamespacestd;voidmain(){inta1=10,a2=5,k;doubleb,c,s;b=38.425,c=12.0;charc1='A',c2='B';s=b+a1-c;k=c1+c2+a1+b;cout<<"k="<<k<<",s="<<s<<endl;}

c1、c2由字符型先转换为整型参加运算;c1+c2+a1+b的结果转换为整型赋给k(舍去小数部分,不进行四舍五入)。§2.5.2隐含类型转换举例a1转换为double型参加运算。118[例]阅读程序给出运行结果#include<iostream>usingnamespacestd;voidmain(){charc1;cout<<"请输入一个小写字母:";cin>>c1;c1=c1-32;cout<<"大写字母为:"<<c1<<endl;}小写字母与大写字母的关系为:

C大=C小-32§2.5.2119

温馨提示

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

评论

0/150

提交评论