C++语言规范.docx

上传人:b****8 文档编号:10770726 上传时间:2023-02-22 格式:DOCX 页数:114 大小:332.86KB
下载 相关 举报
C++语言规范.docx_第1页
第1页 / 共114页
C++语言规范.docx_第2页
第2页 / 共114页
C++语言规范.docx_第3页
第3页 / 共114页
C++语言规范.docx_第4页
第4页 / 共114页
C++语言规范.docx_第5页
第5页 / 共114页
点击查看更多>>
下载资源
资源描述

C++语言规范.docx

《C++语言规范.docx》由会员分享,可在线阅读,更多相关《C++语言规范.docx(114页珍藏版)》请在冰豆网上搜索。

C++语言规范.docx

C++语言规范

新建项目——Win32控制台应用程序——去掉“预编译头”选项

C语言的关键字

autoboolbreak

casecatchcharclassconstconst_castcontinue

defaultdeletedodoubledynamic_castelseenumexplicitextern

falsefloatforfriend

gotoifinlineint

longmutablenamespacenew

operatorprivateprotectedpublic

registerreinterpret_castreturn

shortsignedsizeofstaticstatic_caststructswitch

templatethisthrowtruetrytypedeftypeidtypename

unionunsignedusing

virtualvoidvolatile

while

C语言的标识符

第一个字符必须是大小写英文字母或下划线;由大小写英文字母,数字和下划线组成;不能与C++关键字相同。

C++关键字区分大小写。

C语言注释

//j是一个全局变量

/*j是一个全局变量*/

C语言基本数据类型

数据类型

类型名

字节长度

取值范围

bool

布尔型

1

true,false

char

字符型

1

-128~127

[signed]char

有符号字符型

1

-128~127

unsignedchar

无符号字符型

1

0~255

short[int]

有符号短整型

2

-32768~32767

[signed]short[int]

有符号短整型

2

-32768~32767

unsignedshort[int]

无符号短整型

2

0~65535

int

有符号整型

4

-2147483648~2147483647

[signed]int

有符号整型

4

-2147483648~2147483647

unsignedint

无符号整型

4

0~4294967295

long[int]

长整型

4

-2147483648~2147483647

[signed]long[int]

有符号长整型

4

-2147483648~2147483647

unsignedlong[int]

无符号长整型

4

0~4294967295

float

单精度浮点值

4

double

双精度浮点值

8

longdouble

长双精型

8

C语言的变量

定义变量实例:

inta,b,c

doublea,b=100

C语言的常量

①数值常量:

(1)整型常量

整型常量的数据类型默认为int型,后加字母后缀L(或l)表示长整型;后加字母U(或u)表示无符号整型。

(2)浮点常量

分为一般形式的浮点常量和指数形式的浮点常量。

默认为double型,后加字母f或F,将其转化为float型。

(3)字符常量和字符串常量

字符常量是以单引号扩住的单个字符,如‘a’、’G’。

字符串常量以双引号扩住如“Helloworld”、”i=”

(4)布尔常量True或False

转义字符的C++编码

ASCII码值

字符名称

\?

63

问号

\\

92

反斜杠

\’

39

单引号

\”

34

双引号

\0

0

空字符,字符串结束符

\a

7

响铃

\b

8

退格

\f

12

换页

\n

10

换行符

\ooo

1~3位八进制数

\r

13

回车

\t

9

水平制表符

\v

11

垂直制表符

\xhh

 

1~2位十六进制数

对于int和short这样的整形数据,可以使用控制符改变它们的输出进制:

cout<

cout<

cout<

②符号常量

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

constdoublePI=3.14159;

简单的输入输出

#include或者

#include

usingnamespacestd;

标准输出流cout

cout<<”welcometoC++!

!

!

\n”;//向显示器输出字符串

cout<<”i=”<

标准输出流cin

cin>>i>>j//从键盘输入i和j的值

C++运算符和表达式(以优先级排列)

①:

:

域解析运算符

②.->[]()后置++和后置--

③sizeof前置++前置--*(解引用)&(取地址)+(正号)-(符号)!

newdelete

④(强制类型转换)

⑤*/%

⑥+-

⑦<<(左移位)>>(右移位)

⑧<><=>=

⑨==!

=

⑩&(按位与)

⑾^(按位异或)

(12)|(按位或)

(13)&&

(14)||

(15)?

:

(条件运算符)

(16)=*=/=%=+=-=<<=>>=&=|=^=

(17),

#include"stdafx.h"

usingnamespacestd;

voidmain()

{

cout<<"运算的演示"<<"算术运算符"<

cout<<"1233*37462="<<1233*37462<

cout<<"23.0/2398="<<23.0/2398<

cout<<"79/8="<<79/8<

cout<<"79.0/8="<<79.0/8<

cout<<"23%4="<<23%4<

cout<<"运算的演示"<<"位运算符"<

cout<<"(int)12<<3="<<((int)12<<3)<

cout<<"(int)12>>3="<<((int)12>>3)<

cout<<"~((short)12)="<<~((short)12)<

cout<<"(0x12A)&(0xC6)="<<((0x12A)&(0xC6))<

cout<<"(0x12A)|(0xC6)="<<((0x12A)|(0xC6))<

cout<<"(0x12A)^(0xC6)="<<((0x12A)^(0xC6))<

cout<<"运算的演示"<<"条件运算符"<

inta,b,c,d=10;

a=12;b=9;

c=(a>b?

a:

b);cout<<"(a>b?

a:

b)="<

c=((a+3)<(b-4)?

(a-3):

(b*7));

cout<<"((a+3)<(b-4)?

(a-3):

(b*7))="<

cout<<"运算的演示"<<"赋值运算符"<

cout<<"a="<

cout<<"(a+=2)"<<(a+=2)<

cout<<"(b*=3)"<<(b*=3)<

cout<<"(d-=d+2)"<<(d-=d+2)<

d=10;cout<<"(d-=2+2)"<<(d-=2+2)<

cout<<"运算的演示"<<"自增自减运算符"<

intm=1;

cout<<"m++"<

m=1;cout<<"++m"<<++m<<"m"<

inti;cin>>i;

}

C++数据类型转化

1.自动类型转化

(1).两个不同类型的操作数进行运算时,先将较小范围的数转化为另一个较大范围的数,然后再进行计算。

各种基本数据类型的范围从小到大的排列次序如下:

char,bool→short→int→float→double

unsignedchar→unsignedshort→unsignedint→float→double

(2).对于bool,char,short,int,类型,任意两个值之间进行算术运算,位运算,其结果都是一个int值。

任意两个值之间进行逻辑运算,其结果都是一个bool值。

(3).对于bool,char,short,int类型,任一个类型值(无论是否带符号)与unsignedint之间进行算数运算,其结果都是unsignedint类型。

四个强制类型转换操作符

static_castdynamic_castconst_castreinterpet_cast

如:

static_cast<数据类型>(数值表达式)

doubled=1234.5678;

inti=10*static_cast(d)

C++的控制语句

选择结构

IF语句

if(表达式)语句1;

else语句2;

*******************

if(表达式1)

if(表达式2)语句1

else语句2

else

if(表达式3)语句3

else语句4

if(i!

=j)

if(i>j)

cout<<”i>j”<

else

cout<<”i

else

cout<<”i=j”<

**********************

if(表达式1)语句1;

elseif(表达式2)语句2;

elseif(表达式3)语句3;

……

else语句n

或者写成这样的嵌套形式

if(表达式1)语句1;

else

if(表达式2)语句2;

else

if(表达式3)语句3;

……

else语句n

********************

switch结构

switch(变量名或表达式)

{

case常量表达式1:

语句1;break;

case常量表达式2:

语句2;break;

……

case常量表达式n:

语句n;break;

default:

语句n+1;

}

循环结构

while循环

while(表达式)

循环语句;

******************

do-while循环

do

循环体语句;

while(表达式);

********************

for循环

for(表达式1;表达式2;表达式3)

循环语句;

(1)计算表达式1的值

(2)计算并判断表达式2的值,若表达式2的值非0或为True,则接着执行第(3)步;否则跳转到第4步。

(3)执行循环语句,计算表达式3的值,返回第2步。

(4)跳出循环,接着执行后面的语句。

*************************

foreach循环

inttemp,a[10]={1,8,9,0,7,9,6,7,8,9};

foreach(intnina)

{

cout<

temp=n+1;

cout<<"temp="<

}

break语句

它用在switch语句和循环语句中,功能是:

立即从它包含的switch语句体或包含它的最内层的循环体中退出,开始按顺序执行后面的语句。

continue语句

continue语句用在循环语句中,功能是:

立即结束本次循环的执行,转到判断循环条件的语句用来判断是否进行下一次循环。

goto语句

无条件转移语句

例子1

voidmain()

{

intx=3;

do

{

cout<<(x-=2)<<"";

cout<<"x="<

}

while(!

(--x));

intj;cin>>j;

}

运行结果:

1x=1

-2x=-2

这是因为while(!

(--x))当x=0时!

x就是1,而当x为非零值时!

x为0。

例子2

voidmain()

{

intx=1,i=1;

intm;

for(;x<50;i++)

{

cout<<"x="<

if(x>=10)break;

if(x%2!

=0){x+=3;continue;}

x-=-1;

}

cout<

cin>>m;

}

显示结果:

C++数组

数组的定义与初始化

数组可以由除void型以外的任何类型构成,定义数组的格式为:

C++里面的数组虽然说是下标从0开始,但是就像:

intyy[10]={……}

它仍然是定义了一个有10个元素的整型数组,不是11个元素,但是我们还要使用从0—9来访问这个数组里面的十个元素……

数据类型标识符[常量表达式1][常量表达式2]……;

定义数组

定义数组时可以对全部的元素进行初始化:

inta[3]={1,2,3};

intb[2][2]={23,12,0,4};或者intb[2][2]={{23,12},{2,4}};

也可以仅对一部分元素初始化:

floata[5]={1,2,3,4}

floatb[3][3]={{23,12,0},{2,6},{9}};

如果对全部元素初始化,数组元素个数不必给出:

inttt[]={1,2,3,4,5};

定义二维或多维数组时,如果同时对全部元素初始化,第一维的下标可以不给出。

intnn[][2][2]={1,2,3,4,5,6,7,8,9,0,11,12};

字符数组和字符串

charstr[20]

charstr[]={‘W’,’e’,’l’,’c’,’o’,’m’,’e’,’’,’t’,’o’,’’,’C’,’+’,’+’}

上面的语句只是定义并初始化了一个包含14个字符的普通字符数组,而不能构成C++字符串。

若想使字符数组构成一个字符串,则必须在初始化字符数组或给字符数组赋值时,使其中的某个字符元素的值为空字符’\0’。

例如:

charstr[]={‘W’,’e’,’l’,’c’,’o’,’m’,’e’,’’,’t’,’o’,’’,’C’,’+’,’+’,’\0’}

#include"stdafx.h"

usingnamespacestd;

voidmain()

{

//字符串与普通的字符数组

inti;

charstr[]={'W','e','l','c','o','m','e','','t','o','','C','+','+'};

foreach(charminstr)cout<

cout<

//但是这样语句是错的:

//cout<

//它会显示乱码,发生其他的错误,虽然编译器不会报错。

charmm[20];

cin>>mm;

cout<

foreach(charvinmm)cout<

cout<

cin>>i;

}

用户输入的字符在储存到字符数组中时,会自动的加上’\0’但是输入的字符不可以超过所定义的数组长度。

指针和引用

定义和使用指针

数据类型*标识符

int*ptr1

float*ptr2

使用指针之前必须给它赋值,使它确实指向某个对象。

使用符号&给指针赋值,这里&是取值运算符。

inti,*ptr1;

ptr1=&i;

可以将一个指针赋值给另一个指针,使两个指针指向同一个变量。

为指针赋值之后,就可以使用指针和解引用指针操作符*来操作它所指向的对象。

语法格式为:

*指针名

这时表达式“*指针名”和指针所指向的对象或变量名,是等价的。

(1)一种类型的指针不能指向另一种类型的变量

(2)可以把数值0赋给任何类型的指针变量,表示该指针为空指针,即不指向任何对象。

(3)不能将一个整型变量或非零整数常量直接赋值给指针变量。

(4)C++提供一种VOID类型的指针,可以保存任何类型变量(对象)的地址。

可以使用VOID型指针和其他指针进行比较,但不允许使用VOID型指针操作它所指向的对象。

当把VOID型指针赋值给其他类型指针时,需要使用强制类型转换。

指针和数组

指针的算术运算和关系运算

指针可以和整数进行加减法运算。

比如prt是一个指针,n是一个整数。

那么:

Ptr+n,ptr-n仍然是一个相同类型的指针。

指针ptr+n指向连续储存在ptr所指向的对象(变量)后面的第n个相同的对象。

inti,*ptr;

ptr=&i;

如果ptr存放的地址是1000,ptr+5仍然是一个整型指针,指向的地址是1020,因为一个int类型的数据在内存中占4个字节,而指针ptr+5指向连续存放在变量i后面的第5个整数。

数组元素在储存器中是连续存放的,利用指针加减法的性质,利用指针可以方便的访问数组。

指针也可以进行简单的关系运算。

通过比较指针是否为0,可以判断指针的值是否为空。

两个相同类型的指针进行比较时(这种比较运算常用于使用指针操作数组元素)。

如果ptr1==ptr2说明这两个指针指向同一个数组元素;如果ptr1

数组指针与指针数组

1.数组指针

数组指针是指向数组的指针。

定义数组指针的格式:

数据类型(*标识符)[常量表达式1][常量表达式2]…;

对于一维数组,数组的名称代表了数组的首地址。

ptr=a;

C++认为一个多维数组也是一个一维数组……

#include

usingnamespacestd;

voidmain()

{

inta[3][3],i,j,s=0;

int(*ptr[3]);

ptr=a;

cout<<”请输入矩阵的值:

”;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

{

cin>>*(*(ptr+i)+j);

if(i==j)

s+=*(*(ptr+i)+j);

}

cout<<”输出矩阵:

\n”;

for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

cout<

cout<

}

cout<<”矩阵主对角线元素的和为:

”<

}

使用操作符new和delete进行动态储存分配

C++提供了动态分配内存空间的方法,即在程序运行过程中,根据实际需要为变量(对象)或数组分配内存空间。

每个程序运行时,操作系统都会为其分配一块可用的内存空间,用来存放动态创建的对象,这块储存空间称为程序的自由储存区或堆。

C++使用操作符new和delete来完成动态内存分配。

语法格式为:

(1)创建动态变量

指针名=new数据类型;

(2)创建动态数组

指针名=new数据类型[表达式1][表达式2]…;

如:

int*ptr1=newint;

float*ptr2=newfloat[10]

float*ptr3=newfloat(123.993)

但是不可以对数组进行这样的初始化。

由new操作符为对象动态分配的储存空间,程序结束前,要使用delete操作符动态释放。

(3)释放动态创建的变量

delete指针名;

(4)释放动态创建的数组

delete[]指针名;

引用的定义与使用

一个引用的变量是一个已经存在的相同类型变量的别名。

定义引用变量的语法格式为:

数据类型&标识符=变量名;

定义引用变量的同时必须对其初始化,引用一经定义,就已经是某个变量的别名,不能用它再去引用其他的变量。

inti,j=10;

int&k=i;

k=j;

语句执行之后i,j,k的值都是10,i和k是同一个变量,它们的内存地址是相同的。

枚举和结构

(1)枚举

枚举是一种由编程者自定义的数据类型。

如果一个变量只有几种可能的取值,则可以定义为枚举类型。

声明枚举类型的语法格式为:

enum枚举类型名{变量值列表};

如:

enumweekday{sun,mon,tue,wed,thu,fri,sat};

声明了枚举类型后,就可以定义枚举类型的变量了:

enum枚举类型名标识符;

枚举类型名标识符;

enumweekdayaday;

或者不声明枚举类型名:

enum{sun,mon,tue,wed,thu,fri,sat}aday;

变量aday的值只能是sun到sat之一。

声明枚举类型时,变量值列表中的标识符是一些符号常量,每一个都对应一个确定的整数值。

第一个符号常量的值为0,第二个符号常量的值为1,第三个符号常量的值为2……

即sun=0,mon=1,…,sat=6。

也可以

enum{sun,mon,tue=5,wed,thu,fri,sat};

那么sun=0,mon=1,tue=5,wed=6,…sat=9。

不能把一个整数值直接赋给一个枚举类型的变量。

aday=2;

是错误的

但是可以进行强制类型转换

aday=(weekday)2;

(2)结构

这也是编程者自定义的复合数据类型。

在结构体中可以把不同类型的变量组合在一起,构成一个整体来表示某种事物的个体。

struct结构名

{

数据类型1标识符1;

数据类型2标识符2;

……

数据类型n标识符n;

}

例如:

structemployee

{

intnum;//员工编号

charname[20];//姓名

charsex;

intage;

floataccumPay;//月薪总额

}

employeeanempol;

anemplo.num=10110;

anemplo.name=”Peter”

anemplo.sex=’m’

……

也可以

employeeanemplo={10100,“Peter”,’m’,35,’人事部’,……}

还可以定义数组结构,其中的每个元素都是一个结构变量:

employeeanemploaeear[3];

C++的函数

定义和调用函数

定义函数:

类型说明符函数名(形式参数列表)

{

语句序列;

}

(1)有的函数有返回值,返回值可以是出数组以外的任何类型:

整数、浮点型、字符型、布尔型、指针型、结构、类的对象。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1