C的数据和表达式四川内江第二中学.docx

上传人:b****9 文档编号:25681782 上传时间:2023-06-11 格式:DOCX 页数:27 大小:29.81KB
下载 相关 举报
C的数据和表达式四川内江第二中学.docx_第1页
第1页 / 共27页
C的数据和表达式四川内江第二中学.docx_第2页
第2页 / 共27页
C的数据和表达式四川内江第二中学.docx_第3页
第3页 / 共27页
C的数据和表达式四川内江第二中学.docx_第4页
第4页 / 共27页
C的数据和表达式四川内江第二中学.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C的数据和表达式四川内江第二中学.docx

《C的数据和表达式四川内江第二中学.docx》由会员分享,可在线阅读,更多相关《C的数据和表达式四川内江第二中学.docx(27页珍藏版)》请在冰豆网上搜索。

C的数据和表达式四川内江第二中学.docx

C的数据和表达式四川内江第二中学

第一章《C++的数据和表达式》

内江二中C++培训讲稿

袁武廷2010年2月

课时2:

C++的词法符号

1、定义:

词法符号是程序中不可再分的单位。

2、C++的词法符号共有六类,它们是:

①关键字;②标识符;③常量;④字符串;⑤运算符;⑥标点符号。

它们是C++程序的“基石”,必须认真掌握每种词法符号。

本节课我们学习:

关键字、标识符和标点符号三类。

(一)关键字

关键字又叫保留字,是C++系统预定义的符号,在程序中具有固定的意义,程序员不能重新定义用作它用。

C++的关键字有几十个,随着同学们学习的深入,掌握的数量就会越来越多。

前面例题我们见过的以及马上我们会学到的有:

doublefloatifelse

charintvoidlongshortsignedunsigned

(二)标识符

是程序员自定义的名字,主要用来给“变量、函数、类”等命名。

1、标识符的组成

(1)大写字母;

(2)小写字母;(3)数字符号0到9;(4)下划线“_”。

(除了此四种字符外,不能有其它的符号)

2、组成标识符的规则

*字母或下划线开始;*其后可以跟0个或多个字母、数字、下划线。

(1)合法的标识符

Mysteryresultdouble_list_workof_old_977

(2)不合法的标识符

12bD$7_i

(3)字母区分大小字

addAddaDdADd是四个不同的标识符

(4)标识符不能是前面说的关键字

经验

(5)定义标识符时可以用单词或缩写来定义,尽量能使标识符能“顾名思义”,这样就会增加标识符的可读性从而增加整个程序的可读性。

如返回结果的变量,它的标识符就可定义为:

result

(6)由于C++系统库中的符号都是以下划线开头的,因此程序员在自己的程序中定义的标识符,最好不要用下划线开始,以免同系统库中的符号相冲突。

最好也不要用连续的两个下划线。

如:

最好不用_result来标识返回结果的变量。

最好不出现形如:

r__kk两个连续的下划线。

(三)标点符号

#(){},:

;等等

C++要求在程序的某些地方必须写上相应的标点符号,但不表示任何实际的操作。

如:

词句结束时,必须写上“;” { } 与()须成对出现。

[说明]

1、什么是C++中的“空白”?

在C++程序中,输入空格、制表符(TAB)、回车换行符,将产生C++所谓的“空白”。

空白用来表示词法符号的开始和结束,多余的空白将会被忽略。

如:

inti;floatf; 与inti;floatf;是等价的,都是由六个词法符号组成。

又如:

inti;

floatf;

cin>>f;

i=(int)f;

inti;

floatf;

cin>>f;

i=(int)f;

两个程序块也是等价的。

2、C++中的注释被法成空白对待

如:

cin>>f;//输入一个值给f变量

3、C++中,编译器在分析词法符号时,总是提取最长的有效符号。

如integer被分析成为一个标识符(表示整数),而不被分析成int和eger,虽然int也有意义。

 

课时3:

C++基本数据类型

引言:

①程序数据都必须是具有某种数据类型的数据

②数据的数据类型限制着数据的两个方面的性质:

一是数据类型定义了该数据的存储表示;二是数据类型定义了该数据所能参加的运算的集合。

③描述数据的数据类型的名字叫做类型名。

 类型名:

可以是一个简单的关键字,也可以是一个表达式。

如前面程序中我们用到的double它定义的数据的类型就是双精度型。

④C++的数据类型有很多,主要分成两类:

一是“基本类型”;二是“派生类型”。

(一)C++的基本数据类型

类型名位数范围

char8-128到127

int16-32768到32767

float32-3.4E-38到3.4E+38

double64-1.7E-308到1.7E+308

void0无值

(1)char字符型;int整型;float浮点型;double 双精度浮点型;void 无值型

(2)位数,是指这种数据类型的数据点用内存的大小

(3)范围,是指这种类型的变量,能接受的数的范围。

(4)char型的变量:

用来保存8位的Ascii字符;int型的变量用来保存整数;float和double型的变量用来存贮不同精度的有小数点的数;void主要用于定义函数的返回值。

(二)C++基本类型的修饰名词

shortlongsignedunsigned

上面四个修饰符用于改变基本数据类型的含义,以便更加适合于各种实际情况的需要。

加上了修饰符的类型仍是基本数据类型(不是前面说的派生类型)

char-128--127

signedchar-128--127

unsignedchar0-255

shorint-32768--32767

signedshorint-32768--32767

unsignedshorint0-65535

int-32768--32767

signedint-32768--32767

unsignedint0-65535

longint-2,147,483,648—2,147,483,647

signedlongint-2,147,483,648—2,147,483,647

unsignedlongint0—4,294,967,295

float3.4E-38—3.4E+38

double1.7E-308—1.7E+308

longdouble3.4E-4932—1.1E+4932

1、当用short、long、signed、unsigned 修饰int时int可以省略,如:

unsignedintx;可写成unsignedx;

longintx可写成longx;

2、当未使用signed或unsigned修饰int时,C++默认为是有符号的,即是默认是用signed修饰。

3、程序员在使用变量时,应该根据实际情况中数据种类(带不带小数或是表不表示ASCII字符等)和这个数据的取值范围,来选择将变量定义成为何种数据类型。

[例题]我想用一个变量来表示普通中学的在读的学生学号,如果这个变量的名字用标识符num来表示,请同学们想想该变量应该选择什么数据类型?

4、字符变量不仅能存贮ASCII字符,也可以用来存贮-128至127或是0到255之间的整数,如果你的程序中的某个数据是这个取值范围,你也可以用char型的变量来存贮。

5、在选择变量的类型时,要尽量根据数据的情况来选择类型,在估计不准时,肯定是宁愿选大范围的,这样程序不会出错。

课时4:

常量

引言:

①常量是用来表示固定的数值或字符值的词法符号。

②常量一旦定义,值就不能更改。

③常量都具有数据类型,由常量的表示方法决定。

④常量在程序中不用申明,就直接使用。

(一)整型常量

在程序中可用“十进制”、“八进制”、“十六进制”三种进制表示整型常量。

1、十进制整型常量

由0到9数字组成;书写时不能以0开始;无小数部分。

2、八进制整型常量

由0到7数字组成;书写时以0开始;无小数部分。

3、十六进制整常量

由0到9和A到F组成;书写时以0x开始;无小数部分。

[说明]

(1)任何一个整常量后缀L(或l),则其数据类型为满足longint或unsignedlongint值域的第一个数据类型。

5L属于longint类型;

2,147,483,648L属于unsignedlongint类型

(2)任何一个整常量,后缀u,则表示其数据类型为满足

unsignedint或unsignedlongint值域的第一个数据类型。

(3)一个常量后可以同时后缀u和L(顺序大小写无所谓)

则表示其类型一定是unsignedlongint类型

如:

5LU

(4)当一个整型常量不存在后缀时,则该整型常量的类型为满足下列数据类型的值域的第一个类型:

10进制:

int–-longint—unsignedlongint

8进制:

int—unsignedint—longint—unsignedlongint

16进制:

int—unsignedint—longint—unsignedlongint

(二)浮点常量

1、由整数部分和小数部分组成(如2.5)

2、浮点常量只支持10进制

3、可用科学法表示

0.2E+13

.2E+13

1.4E-8

 3E+9

4、浮点常量的数据类型默认为double,如上面的4个数均为double类型,但可以在后在加上f,将其类型指定为float类型。

如:

2.5f与2.5

5、浮点常量后缀l就是longdouble数据类型

2.52.5f2.5l

(三)字符常量

1、用单引号括起来的字符称为字符常量

‘a’‘\n’‘r’‘\x61’

2、字符常量的类型都是char数据类型

3、C++的转义序列

\a 表示响铃

\n新行

\t水平制表符(TAB)

\v垂直制表符

\b回退符

\r回车符

\f页馈进符

\\反科杠\

\’单引号’

\”双引号”

如果用单引号将上面的括起来,它们都是一个字符。

4、可用8进制或16进制来表示ASCII字符集中的任何字符。

形如:

\nnn8进制的字符

\xnnn16进制表示的字符(此处的x就必须是小写的)

如a字符的十六进制数是61,则a可以表示成:

’\x61’

(四)字符串

1、字符串,是由一对双引号括起来的字符序列。

“Thisisastring\n”

2、字符串是一种特殊的常量,它的数据类型不是基本型,这一点我们后面再讲。

3、在字符串中使用16进制或8进制转义序列来表示字符时,C++按最长的有效的长度提取转义序列。

如:

Cout<<”Error:

\x07Dividedbyzero\n”;

其中:

\x07是响铃的意思

\x07D是字符}的意思

所以这个语句最终在屏幕上输出:

}ivdedbyzero

不会有铃声。

4、由于双引号起特殊的作用,如果要在字符串中表示双引号,就必须使用转义序列,如:

想在屏上显示

PleaseEnter“good”

必须写成:

cout<<”PleaseEnter\”goot\”\n”;

Main()

{

Cout<<”thisisastring\n”;

Cout<<”hello,\tword!

\n”;

Cout<<”Error:

\07Dividedbyzero\n”;

Cout<<”Error:

\x007Dividedbyzero\n”;

Cout<<”Thisisoneline”;

Cout<

Cout<<”Pleaseenter\”good\”\n”;

}

课时5:

简单说明

1、程序中每个变量都必须要有一个名字(合法标识符),用变量的名字来存取变量;

2、变量是用来表示数据的,程序中的数据都必须是具有某程数据类型的数据,因此也必须将变量定义成为其所表示的数据类型。

如:

用一个变量来表示一个中学的学生学号

变量名你取为:

num

类型你定为:

unsignedint

则在程序中要这样定义:

unsignedintnum;

3、简单说明变量的一般格式是:

数据类型名 变量1,变量2,…,变量n;

如:

floatv1,v2,v3;

这样说明的变量也叫做简单变量

定义了三个名字分别是v1,v2,v3,类型都是float的变量,由于v1、v2、v3、都是float类型,因此也就定义了这三个变量能参加哪些运算以及运算的性质。

[例题]

#include

main()

{

inti,max;

i=0;

max=0;

floatcurrent,square,cube;

current=1.5f;

square=current*current;

cube=square*current;

cout<

<

}

(1)定义了3个浮点弄变量,2个整型变量。

(2)任何简单变量都可以直接用于输入输出操作

floatf;

cin>>f;

cout<

 

课时6:

枚举类型

前在的基本型以及基本型前面加上修饰词的类型,均是C++系统预定义好的数据类型,其实程序员在程序中也可以根据自己的算法,自己定义符合C++语法规则的数据类型。

比如本课要讲的“枚举类型”。

1、枚举类型是程序员根据自己的算法需要自定义的类型。

2、枚举类型的定义格式:

emun枚举标记{枚举常量表};

如:

emuncolor{RED,BLUE,GREEN,YELLOW};

(1)emun是C++系统的关键字

(2)color是你自定义的名字(符合标识符的语法),也是你建立的枚举类型的类型名。

(3){RED,BLUE,GREEN,YELLOW}是一个集合,里面是你自己定义的这种类型的数据的定义域。

比如:

colorx;

意思就是说你用你自定义的数据类型color定义了一个变量x,此变量x就只能被赋予该定义域的元素。

例如:

x=RED;//是合法的

x=ywt;//是不合法的

 

课时7:

基本运算符和表达式

引言:

(1)运算是对数据的处理过程;

(2)记述各种不同运算的符号称为运算符;

(3)参与运算的数据称为操作数;

(一)C++的运算符表

优先级

运算符

例子

结合性

1

()

[]

->

.

:

:

++

--

(a+b)/4;

array[4]=2;

ptr->age=34;

obj.age=34;

Class:

:

age=2;

for(i=0;i<10;i++)...

for(i=10;i>0;i--)...

lefttoright

2

!

~

++

--

-

+

*

&

(type)

sizeof

if(!

done)...

flags=~flags;

for(i=0;i<10;++i)...

for(i=10;i>0;--i)...

inti=-1;

inti=+1;

data=*ptr;

address=&obj;

inti=(int)floatNum;

intsize=sizeof(floatNum);

righttoleft

3

->*

.*

ptr->*var=24;

obj.*var=24;

lefttoright

4

*

/

%

inti=2*4;

floatf=10/3;

intrem=4%3;

lefttoright

5

+

-

inti=2+3;

inti=5-1;

lefttoright

6

<<

>>

intflags=33<<1;

intflags=33>>1;

lefttoright

7

<

<=

>

>=

if(i<42)...

if(i<=42)...

if(i>42)...

if(i>=42)...

lefttoright

8

==

!

=

if(i==42)...

if(i!

=42)...

lefttoright

9

&

flags=flags&42;

lefttoright

10

^

flags=flags^42;

lefttoright

11

|

flags=flags|42;

lefttoright

12

&&

if(conditionA&&conditionB)...

lefttoright

13

||

if(conditionA||conditionB)...

lefttoright

14

?

:

inti=(a>b)?

a:

b;

righttoleft

15

=

+=

-=

*=

/=

%=

&=

^=

|=

<<=

>>=

inta=b;

a+=3;

b-=4;

a*=5;

a/=2;

a%=3;

flags&=new_flags;

flags^=new_flags;

flags|=new_flags;

flags<<=2;

flags>>=2;

righttoleft

16

for(i=0,j=0;i<10;i++,j++)...

lefttoright

1、按运算符同操作数的关系,运算符会成:

一元运算符;二元运算符;三元运算符。

2、按运算符和操作数的运算性质,又分成算术运算、逻辑运算、关系运算、移位运算和其它运算。

3、表达式是由操作数和运算符组成的符号序列,每个表达式都产生单一的值,并且这个值肯定具有某种数据类型,这个类型就是表示式的类型。

4、常量表达式可以出现在常量能出现的地方。

5、一个变量或是一个常量也是一个表达式。

一个表达式的值可以用来参与其它运算,即可用作其它运算符的操作数,这样就可以组成复杂的表达式了。

5a5+aa+ba*(b+c)

6、表达式的求值顺序:

先计算括号内的表达式,再计算括号外的表达式,优先级高的运算符先运算,优先级低的运算符后运算。

7、如果一个运算符对其操作数从左向右进行规定的运算,则称这个运算符是右结合的。

反之为左结合。

2+3对“+”这个运算符,其操作数是左边加右边的操作数。

“+”是右结合的。

8、当一个表达式中出现各种运算符时,优先级和运算符的结合性最终决定表达式的求值顺序。

(二)算术运算符

2-一元运算符取负,取操作数的负值

3*/%二元

4+-二元

(1)“%”是取模运算符,就是求两个整数相除的余数,如7%5表达式的值是2。

要求两个操作数必须是整数。

(2)“/”:

当此运算符用于两个整数相除时,结果仍是整

数。

如7/5结果是15/7结果是0

同学们看出“%”与“/”的意思没有?

当他们用于整数运算时,一个求余数,一个求整数的商。

(3)二元算术运算符是右结合的,即从左向右进行运算。

(4)算术表达式计算中的溢出问题:

①被零除或浮点溢出会作为一个错误导致程序终止。

②整数溢出不会认为是一个错误。

在时需要利用整数的溢出进行一些较低级的程序设计。

但是,这样也就是说C++不能报告整数的溢出问题,一旦出现这种情况,很难找出错误来。

main()

{

inti,j,k;

i=1000;

j=1000;

k=i*j;//发生溢出了哈,超过了int类型的值域,不报错

cout<

}

int类型的k变量最多能保存32767,而i*j的结果是1,000,000

将这个结果赋给k,就发生了整数溢出。

但C++又不报错,运算结果肯定是错误的。

可以通过将三个变量都定义成为long类型,得到正确的结果:

 

main()

{

longinti,j;

longintk;

i=1000L;

j=1000L;

k=i*j;

cout<

}

(三)关系运算

6<<=>>=

7==!

=

1、关系运算符是右结合的,即从左向右进行运算。

运算的结果是整数,操作数满足运算符的比较关系时,运算结果为1,若不满足比较关系,运算结果为0。

2、关系运算符的优先级(6,7)低于算术运算符(2,3,4)。

如:

n+m

(四)逻辑运算符

2!

一元运算符

11&&二元

12||二元

1、右结合的运算符。

2、运算结果只有1或是0

i&&j只要i或j中有一个是0,结果为0;

两个都非零时,结果为1;两个均为0结果为0。

i||j只有i或是j中有一个非0,结果为1;两个均为0时,结果为0。

!

i当i为0时,结果为1当i非零时,结果为0

3、关系运算符的优先级高于&&和||

in

先进行两个关系运算,然后再进行逻辑运算

(五)位运算符

1、在计算机中各种数据都是用二进制的位表示出来的。

如int型的数据用16位二进制表示,char型数据用8个二进制位表示,如小写字母a:

0110001

2、前面学习过的运算符都是对数的所有位进行操作的,在C++低级程序设计中,常常需要检查或设置变量中的某几位的值。

C++提供了六个位运算符,用于处理组成整型变量的位。

&|^<<>>~

(1)位取反运算

是一元运算符,对所作用的数逐位取反(0变1,1变0)

 

main()

{

unsignedchara;

a=~0x9a

cout<

}

10011010

01100101

0x65

(2)位与&、位或|、位异或^

二元运算符,针对两个整数的对应位就进运算。

①位与:

对应位只要有一个为0结果为0,只有两个均为1,结果为1。

②位或:

对应位只要有一个为1结果为1,只有两个均为0,结果为0。

③位异或:

对应位相异为1,相同为0。

10111001

&10000011

10000001

 

10111001

|10000011

10111011

 

10111001

^10000011

00111010

(3)位左移与右移

移位运算符左边操作数的二进制位,移动的次数由右边的操作数确定。

①“<<”左移左边操作数中的二进制位,移位的过程中,右端出现的空位补0,而移出左端之外的位自动舍弃。

如:

10011011左移两位,就是去掉前两位10后在尾上补00,得到:

01001100

②“>>”右移左边操作数中的二进制位,其最终的结果与操作数的数据类型是否为有符号类型有关。

*对于无符号的操作数,左端移出的空位补0;

*对于有符号数,最高位称为符号位(左第一位),在右移时,移出的空位按符号位复制,也就是说,符号位为1时,移出的空位补1,符号位为0时,移出的空位补0。

#include"stdafx.h"

#include"stdlib.h"

#include"iostream"

usingnamespaceSystem;

usingnamespacestd;

intmain(array

:

String^>^args)

{

signedchara;

unsignedcharb;

a=0x9b;

b=0x9b;

unsignedcharc;

cout<

c=b<<2;

cout<<"Afte

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

当前位置:首页 > 外语学习 > 英语学习

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

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