c++2 简单的程序设计_第1页
c++2 简单的程序设计_第2页
c++2 简单的程序设计_第3页
c++2 简单的程序设计_第4页
c++2 简单的程序设计_第5页
已阅读5页,还剩193页未读 继续免费阅读

下载本文档

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

文档简介

第二章简单的程序设计C++语言程序设计2本章主要内容2.1字符集、标识符与关键字2.2基本数据类型2.3常量与变量2.5运算符与表达式2.4不同类型数据的转换2.6语句及基本控制结构3C++字符集(英文)大小写的英文字母:A~Z,a~z数字字符:0~9特殊字符:空格 ! # % ^ & *

_(下划线) + = - ~ < > / \ ' " ; . , () [] {}|字符集、标识符与关键字除字符型数据外4词法记号:最小的词法单元关键字

C++预先声明的单词,都是由小写字母组成的(P19)标识符

程序员声明的单词,它命名程序正文中的一些实体,比如变量名、函数名、类名、对象名等文字

程序中直接使用符号表示的数据(常量)操作符

用于实现各种运算的符号分隔符

(){},:;

用于分隔各个词法记号或程序正文空白符 空格、制表符(TAB键产生的字符)、换行符(Enter键所产生的字符)和注释的总称★字符集、标识符与关键字★5标识符的构成规则不能与关键字相同以大写字母、小写字母或下划线(_)开始。可以由以大写字母、小写字母、下划线(_)或数字0~9组成。大小写敏感。没有明确规定长度。字符集、标识符与关键字6判断以下自定义标识符是否合法apple、_Student、_123、No1、max_num合法的51job、max-num、abc$、float、true不合法的良好的标识符命名习惯

1、Unix常用的命名法

my_age、num_of_student2、驼峰式命名法

myAge、numOfStudent3、匈牙利标记法

iMyCar、bIsRight7什么是数据类型? 数据是程序处理的对象,数据根据其本身的特点进行分类,从而形成不同的数据类型。例:整数、实数、字符、字符串、逻辑“真/假”、“是/否”、2012-2-20数据类型不同类型的数据有不同的处理方法【取值范围,存储空间,运算方式】8数组型指针型枚举型结构体类型共用体类型类(C++)数据类型(type)构造数据类型(自定义类型)基本类型布尔型bool字符型charASCII码整型int实型(浮点型)单精度型float双精度型doublevoid型9修饰符在C++中描述为了更加准确的描述数据类型,提供了4个关键字用来修饰基本的数据类型(除bool类型):

1、长型long2、短型short3、有符号signed4、无符号unsigned基本数据类型10类型符号关键字数的表示范围所占字节整型字符型实型有无[signed]int4-2147483648~2147483647[signed]short[int]2

-32768~32767[signed]long[int]4-2147483648~21474836474unsigned

int0~429496729540~4294967295unsigned

long[int]unsigned

short[int]20~65535有float4-3.4e-38~3.4e38有double8-1.7e-308~1.7e308有longdouble16-1.2e-4932

~1.2e4932有[signed]char1-128~127说明:数据类型所占字节数随编译系统不同而不完全相同。无unsignedchar10~255

基本数据类型11基本数据类型0111111111111111short型:最大:327671000000000000000最小:-32768数据类型

—整型数据及取值范围1111111111111111unsignedshort型:最大:655350000000000000000最小:0-215~(215-1)0~(216-1)最高位代表符号(符号位):0为正,1为负【补码】12121、short: 仅用来修饰int,称为短整型,占2字节内存,也可直接简写为short;2、long:仅修饰int和double,在不同的编译环境中使用long修饰的数据所占内存不同。

3、unsigned:用来修饰char、short、int和long,表示该数据类型为无符号数。

4、signed:用来修饰char、short、int和long,表示该数据类型为有符号数;

为缺省设置(char除外)。2023/2/413回顾:计算机中的编码⑴无符号整数(unsignedinteger)表示正整数,以相应的二进制形式表示。取值范围由字长决定:字长——8位可表示0~255(28-1)范围内的所有正整数0000000001000000012000000102541111111025511111111256(28-1)2023/2/414回顾:计算机中的编码⑴无符号整数(unsignedinteger)表示正整数,以相应的二进制形式表示。取值范围由字长决定:字长——8位可表示0~255(28-1)范围内的所有正整数字长——16位(unsignedshort)可表示0~65535(216-1)范围内的所有正整数字长——32位(unsignedint或long)可表示0~232-1范围内的所有正整数。2023/2/415回顾:计算机中的编码⑵有符号整数(signedinteger)既可表示正整数,又可表示负整数。0——正号“+”(正数);1——负号“-”(负数);010111011字长等于n位小数点符号位n-1位表示数值2023/2/416回顾:计算机中的编码⑵有符号整数(signedinteger)既可表示正整数,又可表示负整数。3种编码方法:①原码表示②反码表示③补码表示0——正号“+”(正数);1——负号“-”(负数);2023/2/417回顾:计算机中的编码⑵有符号整数(signedinteger)——原码表示数值位:数值本身的绝对值对应的二进制形式。01011101字长等于8位符号位7位表示数值0——正号“+”(正数);1——负号“-”(负数)93[+93]原=010111011符号位[-93]原=110111012023/2/418回顾:计算机中的编码⑵有符号整数(signedinteger)——原码表示[+1]原=00000001[-1]原=10000001[+7]原=00000111[-7]原=10000111[+127]原=01111111[-127]原=11111111绝对值相同的正整数、负整数,其原码:⒈符号位不同;⒉其他数值位相同;【结论1】[+0]原=00000000[-0]原=10000000【结论2】

0的原码不惟一2023/2/419回顾:计算机中的编码⑵有符号整数(signedinteger)——原码表示数值位:数值本身的绝对值对应的二进制形式。01111111[+127]原=01111111[-127]原=1111111111111111[+0]原=00000000[-0]原=100000002023/2/420回顾:计算机中的编码⑵有符号整数(signedinteger)——原码表示数值位:数值本身的绝对值对应的二进制形式。【缺点】⒈不能直接对两个同号数相减,即A-B;如、将39和56两个十进制数的原码直接相减-100100011100110011011111[+39]原[+56]原[-111]原00100101[-17]原2023/2/421回顾:计算机中的编码⑵有符号整数(signedinteger)——原码表示数值位:数值本身的绝对值对应的二进制形式。【缺点】⒈不能直接对两个同号数相减,即A-B;⒉不能直接对两个异号数相加,即A+(-B);如、将39和(-56)两个十进制数的原码直接相减+100100011101110011101111[+39]原[-56]原[-95]原00100101[-17]原2023/2/422回顾:计算机中的编码⑵有符号整数(signedinteger)——原码表示数值位:数值本身的绝对值对应的二进制形式。【缺点】⒈不能直接对两个同号数相减,即A-B;如、将39和56两个十进制数的原码直接相减⒉不能直接对两个异号数相加,即A+(-B);如、将39和(-56)两个十进制数的原码直接相减⑵有符号整数(signedinteger)——反码表示⑵有符号整数(signedinteger)——补码表示反码仅作为求补码的中间形式2023/2/423回顾:计算机中的编码⑵有符号整数(signedinteger)——反码表示表示规则:①正整数的反码与原码相同;②负整数,符号位为1,数值位为原码相应数值位取反;[+93]原=01011101[+93]反=0101110101011101字长等于8位[-93]原[-93]反1=101000100100010=110111012023/2/424回顾:计算机中的编码⑵有符号整数(signedinteger)——反码表示[+1]反=00000001[-1]反=11111110[+7]反=00000111[-7]反=11111000[+127]反=01111111[-127]反=10000000[+0]反=00000000[-0]反=11111111【结论3】

0的反码不惟一2023/2/425回顾:计算机中的编码⑵有符号整数(signedinteger)——反码表示表示规则:①正整数的反码与原码相同;②负整数,符号位为1,数值位为原码相应数值位取反;01111111[+127]反=01111111[-127]反=1000000010000000[+0]反=00000000[-0]反=111111112023/2/426回顾:计算机中的编码⑵有符号整数(signedinteger)——反码表示表示规则:①正整数的反码与原码相同;②负整数,符号位为1,数值位为原码相应数值位取反;[-7]反=11111000[-7]原=10000111取反取反对反码再求一次反,会得到该数的原码。2023/2/427回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示表示规则:①正整数的补码、反码与原码相同;②负整数,符号位为1,数值位为原码相应数值位取反,然后对整个数加1;[-7]原[-7]反=11111000=10000111[-7]补=111110010000111111110001111100101X为负整数时,[X]补=[X]反+12023/2/428回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示[-1]反

=11111110[-127]反=10000000=[+0]原[-0]补【结论4】

0的补码惟一[-1]补

=11111111[-127]补=10000001=00000000[+0]补=[+0]反[-1]原=10000001[-127]原=11111111=00000000+111111111100000000字长等于8位[-0]反2023/2/429回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示01111111[+127]补=01111111[-128]补=1000000010000000[+0]补=[-0]补=00000000【注意】用补码表示的数的范围比原码和反码多一个数[-127]补=10000001100000012023/2/430回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示表示规则:①正整数的补码、反码与原码相同;②负整数,符号位为1,数值位为原码相应数值位取反,然后对整个数加1;[-7]补=11111001[-7]原=10000111取补取反对补码再求一次补,会得到该数的原码(除了[-128]补)10000110加12023/2/431回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示表示规则:①正整数的补码、反码与原码相同;②负整数,符号位为1,数值位为原码相应数值位取反,然后对整个数加1;表示范围:-128

+127【特点】用补码进行运算,减法可以用加法来实现。[A]补

+[B]补[A+B]补=[A]补

+[-B]补[A-B]补=2023/2/432回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示【例1】计算7-6-100000100000111000000001+100000011111111000000001[7]补[-6]补[7]原[6]原[1]原1[1]补字长等于8位溢出[7]原

-[6]原[7-6]原=[7]补

+[-6]补[7-6]补=2023/2/433回顾:计算机中的编码⑵有符号整数(signedinteger)——补码表示【例2】用补码计算39-56=?[39-56]补=[39]补+[-56]补+100100010011110011011111[+39]补[-56]补[?]补0010010000100101[-17]原取反加1[-17]补2023/2/434回顾:计算机中的编码三种定点整数表示方法的比较⑴无符号整数——[0,2n-1]⑵有符号整数⒈原码表示——[-(2n-1-1),2n-1-1]⒉反码表示——[-(2n-1-1),2n-1-1]⒊补码表示——[-2n-1

,2n-1-1]010111011字长等于n位2023/2/435回顾:计算机中的编码三种整数表示方法的比较00000000字长等于80000000101111111100000001000000111111111无符号整数原码补码0112712812925501127-0-1-12701127-128-127-136数据类型

—整型数据及取值范围类型 说明符 位数 数值范围 短整 short 16 -32768~32767基本 int 32 -231~(231-1)长整 long 32 -231~(231-1)无符号

unsignedshort 16 0~65535

unsigned[int] 32 0~(232-1)

unsignedlong 32 0~(232-1) 基本数据类型37typedef重定义类型为一个已有的数据类型另外命名。语法形式:typedef已有类型名新类型名表;例如:typedefdoubleArea,Volume;typedefintNatural;Naturali1,i2;Areaa;Volumev;类型重定义语句多个标识符,用逗号分隔。一个已有数据类型声明多个别名38定义:程序运行时其值不能改变的量(即常数)。其表示方式自动决定了它们的数据类型。例:123,3.14,"A",'A'

1、常量常量和变量常量:包括字面(直接)常量和符号常量两类。39整型常量【表示方法】:十进制整型常量:由数字0~9和正负号表示.八进制整型常量:以0开头,后跟数字0~7表示例:0100

=()10?十六进制整型常量:以0x开头,后跟0~9,a~f,A~F表示例:0x100=()10?64十进制:123八进制:-0123=-()10十六进制:0x123=(

)102561*82+2*81+3*801*162+2*161+3*160常量和变量40整型常量【整型常量的类型】:根据其值所在范围确定其数据类型在整常量后加字母u或U,认为是unsignedint型常量在整常量后加字母l或L,认为是longint型常量长整型:123L,123l无符号型:123U,123u常量和变量41整型常量【整型常量的类型】:根据其值所在范围确定其数据类型在整常量后加字母u或U,认为是unsignedint型常量在整常量后加字母l或L,认为是longint型常量常量和变量#include<iostream>usingnamespacestd;intmain(){ cout<<-1U<<endl; return0;}输出:429496729542实型常量【表示方法】:十进制数形式:(必须有小数点)

如0.123,.123,123.0,0.0,123.指数形式:(e或E之前必须有数字;指数必须为整数)

如12.3e3,123E2,1.23e4【类型】:缺省为double型后缀F(或f)

float型,12.3f后缀L(或l)

longdouble型e5,1.2E-3.5错误常量和变量2023/2/443回顾:计算机中的编码浮点数的表示方式:M——尾数E——阶码R——阶码的基数十进制的浮点数M(尾数)——十进制定点小数;E(阶码)——十进制定点整数;R(阶码的基数)——10;-56.625=(-0.56625)×1020.0034756=(0.34756)×10-22023/2/444回顾:计算机中的编码十进制的浮点数M(尾数)——十进制定点小数;E(阶码)——十进制定点整数;R(阶码的基数)——10;二进制的浮点数M(尾数)——二进制定点小数;E(阶码)——二进制定点整数;R(阶码的基数)——2;(-111000.101)2

=(-0.111000101)2×2(110)2

-56.625=(-0.56625)×1022023/2/445回顾:计算机中的编码计算机中二进制的浮点数的表示:M(尾数)——二进制定点小数;定点小数——原码或补码。E(阶码)——二进制定点整数;定点整数——补码。R(阶码的基数)——2,隐含;00字长等于n阶码符号尾数符号阶码尾数(-111000.101)2

=(-0.111000101)2×2(110)2

2023/2/446回顾:计算机中的编码计算机中浮点数的表示若某机器字长为16位,前6位表示阶码,后10位表示尾数。01字长等于16(-111000.101)200110111000101E(阶码)=(110)2

M(尾数)=(-0.111000101)2

=(-0.111000101)2×2(110)20001110101补码方便阶码加、减原码补码12023/2/447回顾:计算机中的编码若计算机的字长为2个字节,某存储单元中的机器码0110110001011100表示一个浮点数,该浮点数的阶码为4位(含阶符1位,补码表示),尾数位12位(含数符1位,补码表示),则与该浮点数等值的十进制数是

。-29.1252023/2/448回顾:计算机中的编码011011000101110001101011101000110110101110100100取反加1(-0.01110100100)2×2(110)2(-11101.00100)2小数点右移6位=-29.12549字符、字符串常量【字符常量】:

'a'

'A'

字符数据在内存中的存储形式以ASCII码存储,占1字节,用7个二进制位如'A'——65,'a'——97

'0'——48常量和变量2023/2/450回顾:计算机中的编码ASCII码AmericanStandardCodeforInformationInterchange美国信息交换标准代码b0b1b2b3b4b5b6b7一个字节有效编码位27=128个字符=96个可打印字符+32个控制字符数字0~9大写字母A~Z小写字母a~z02023/2/451回顾:计算机中的编码ASCII码AmericanStandardCodeforInformationInterchange美国标准信息交换码b0b1b2b3b4b5b6b7有效编码位数字01010000数字11010001数字21010010数字910101014849505700002023/2/452回顾:计算机中的编码ASCII码AmericanStandardCodeforInformationInterchange美国标准信息交换码b0b1b2b3b4b5b6b7有效编码位大写字母A0100001大写字母O0101111大写字母P0110000大写字母Z011011065798090151100002023/2/453回顾:计算机中的编码ASCII码AmericanStandardCodeforInformationInterchange美国标准信息交换码b0b1b2b3b4b5b6b7有效编码位小写字母a1100001小写字母o1101111小写字母p1110000小写字母z111011065+3279+3280+3290+3215110000字符常量54Page54常量和变量字符、字符串常量55【字符常量】:

'a'

'A'

'\a'响铃'\n'换行

\为转义符'A''\x41''\101'字符数据在内存中的存储形式以ASCII码存储,占1字节,用7个二进制位如'A'——65,'a'——97

'0'——48,'\n'——10常量和变量56用转义字符“\”后跟一个字符表示一个单一的不可显示的或从键盘无法输入的字符。字符常量转义字符\

'\a'响铃'\n'换行

\为转义符

'A''\x41''\101'常量和变量57\a

0x07 bell(响铃)\n 0x0A 换行(移动到下一行开头)\r 0x0D 回车(移动到本行开头)\t 0x09 水平制表符(下一制表区开头)\b 0x08 Backspace(退格)\\ 0x5C 字符

\\" 0x22 双引号"\'

0x27 单引号'

字符常量转义字符Pleaseenter"Yes"or"No"cout<<"Pleaseenter\"Yes\"or\"No\"";58\a 0x07 bell(响铃)\n 0x0A

换行\r 0x0D 回车\t 0x09 水平制表符\b 0x08 Backspace(退格)\\ 0x5C 字符‘\’\" 0x22 双引号"\' 0x27 单引号'

\ddd1-3位8进数表示字符的ASCII码

\xhh1-2位16进数表示字符的ASCII码字符常量转义字符常量和变量59字符常量转义字符Page59'\x41''\101'常量和变量

转义字符及其含义<转义字符含义\n\v\r\a\'\ddd\t\b\f\\\"\xhh转义字符含义换行垂直制表回车(不换行)响铃单引号1~3位8进制数代表的字符水平制表(跳到下一个输出区)退格换页反斜线双引号1~2位16进制数代表的字符如'\101'

'A'

'\012'

'\n'

'\376'

’’

'\x61'

'a'

'\60'

'0'

例:'A''\101''\x41'

65字符、字符串常量61【字符常量】:

'a'

'A'

'\a'响铃'\n'换行

\为转义符'A''\x41''\101'【字符串常量】:"C++language"字符数据在内存中的存储形式以ASCII码存储,占1字节,用7个二进制位如'A'——65,'a'——97

'0'——48,'\n'——10常量和变量62转义字符的使用-例1#include<iostream>usingnamespacestd;voidmain(){ cout<<"\101\x42C\n"<<endl;cout<<"Isay:\"Howareyou?\"\n"<<endl;cout<<"\\CProgram\\\n"<<endl;cout<<"Turbo\'C\'"<<endl;}常量和变量63转义字符的使用-例2#include<iostream>usingnamespacestd;voidmain(){cout<<"Y\b="<<endl;}运行结果:屏幕显示:=打印机输出:¥常量和变量64转义字符的使用-例3#include<iostream>usingnamespacestd;voidmain(){ cout<<"1234567890"<<endl;cout<<"abc\t

de\rf\tg"<<endl;cout<<"h\ti\b\bjk"<<endl;}\n换行(移动到下一行开头)\r 回车(移动到本行开头)\t 水平制表符(下一制表区开头)\b Backspace(退格)常量和变量65字符常量与字符串常量的区别

字符串常量:双引号括起来的字符序列。

系统会在每一个字符串常量尾部加上字符常量'\0',表示“该字符串常量到此结束”。

写字符串时不必加'\0'。例:"CHINA"

"a"

""CHINA\0a

\0\066例:'a'

"a"表示形式:单引号

双引号占用空间:

1字节2字节

011000010110000100000000字符常量与字符串常量的区别aa\097常量和变量67布尔常量逻辑(布尔)常量:false和true两个值一个字节存储false——0true——1常量与变量cout<<"true:"<<true<<endl;cout<<"false:"<<false<<endl;68符号常量用标识符代表一个常量。定义格式:#define符号常量常量1、常量常量和变量#include<iostream>#definePRICE30usingnamespacestd;voidmain(){intnum,total;num=10;total=num*PRICE;cout<<"total="<<total;}运行结果:total=300一般用大写字母是宏定义预处理命令,不是C++语句【优点】含义清楚,一改全改如:#definePI3.141592669符号常量(预处理命令)常量与变量#include<iostream>#definePI3.14159usingnamespacestd;voidmain(){ floatr,area; r=10;

cout<<"area="<<area<<endl;}area=PI*r*r;area=3.14159*r*r;#define标识符常量功能:用指定标识符替换常量702、变量变量是在程序执行中其值可以改变的量。变量是存储信息的地方。实质是内存中具有特定属性的一个存储单元,在这个空间中可以进行数据的存储和读取。变量的三要素变量名:标识符,要“见名知意”;数据类型变量值常量和变量3存储单元变量值变量名(代表内存地址)a71变量定义(声明)数据类型变量名;

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

例:inta,b;

charc;

doublex,y;先定义(声明),后使用1、分配字节数2、数的表示范围3、可以进行的运算合法标识符72变量定义(声明)数据类型变量名;

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

先定义(声明),后使用1、分配字节数2、数的表示范围3、可以进行的运算合法标识符例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain73变量定义(声明)数据类型变量名;

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

先定义(声明),后使用1、分配字节数2、数的表示范围3、可以进行的运算合法标识符例2floata,b,c;c=a%b;//illegaluseoffloatingpointinfunctionmain74变量定义(声明)变量初始化:在变量声明时直接赋予一个初始值。数据类型变量名;

数据类型变量名1,变量名2,…,变量名n;charc="a";先定义(声明),后使用例:inta=1,b=-3,c;floatdata=3.67;charch='A';intx=1,y=1,z=1;intx=y=z=1;/*错误*/75inta=5;表示系统要做那些工作?给出了一个名字为a的标识符定义了一个整型变量系统自动为变量a分配了一个内存空间(一般4个字节),其地址已经确定。该变量存放的内容为整数5变量定义(声明)先定义(声明),后使用76变量定义(声明)先定义(声明),后使用shorta=5;shortb=-3,c;……000000000000010111111111111110110101001010011011……2字节2字节2字节内存地址内存地址内存地址变量名abc编译程序根据变量定义为其分配指定字节的内存单元。随机数内存77变量定义(声明)先定义(声明),后使用整型变量占字节数随机器不同而不同short≤int≤long可用sizeof(类型标识符)测量【注意】整型变量的取值范围(超出范围,出现溢出,见P20)78#include<iostream>usingnamespacestd;voidmain(){ shorta,b; a=32767;

b=a+1; cout<<"sizeof(a)="<<sizeof(a)<<",a="<<a<<endl; cout<<"sizeof(b)="<<sizeof(b)<<",b="<<b<<endl;}输出:溢出常量和变量79变量定义(声明)先定义(声明),后使用

浮点型变量float:占4字节,提供6~7位有效数字double:占8字节,提供15~16位有效数字Longdouble:占16字节,提供18~19位有效数字【注意】因为有效数字有限,在进行舍入时,可能会产生误差。floata=111111.111;/*a=111111.1*/doubleb=111111.111;/*b=111111.111*/80#include<iostream>usingnamespacestd;voidmain(){

floata,b; a=123456.789e5; b=a+20; cout.precision(15); cout<<b<<endl;}输出:对于浮点型数据,应该避免将一个很大的数和一个很小的数直接相加或相减,以免”丢失“小的数。81变量定义(声明)先定义(声明),后使用

字符变量charc1,c2;占1个字节,存储ASCII码字符串常量。【注意】char与int数据通用能进行算术运算。#include<iostream>usingnamespacestd;voidmain(){charc1,c2;c1=97;c2=98;cout<<c1<<"\t"<<c2<<endl;

cout<<(int)c1<<"\t"<<(int)c2<<endl;}82变量定义(声明)先定义(声明),后使用

字符变量charc1,c2;占1个字节,存储ASCII码字符串常量。【注意】char与int数据通用,能进行算术运算。chara='D';/*a=68;*/intx='A'+5;/*x=65+5;*/ints='!'+'G'/*s=33+71;*/【没有字符串变量,用字符数组存放】83#include<iostream>usingnamespacestd;voidmain(){charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;

cout<<c1<<"\t"<<c2<<endl; /*以字符形式输出*/}输出:大小写字母的转换84#include<iostream>usingnamespacestd;voidmain(){ unsignedcharc1; signedcharc2; charc3; c1=128;

c2=128; c3=128;

cout<<(int)c1<<"\t"<<(int)c2<<"\t"<<(int)c3<<endl;}字符型:signedchar-128~127

unsignedchar0~255结果:c1=128c2=-128c3=-128溢出85常量和变量综合举例#definePRICE12.5#include<iostream>usingnamespacestd;voidmain(){ intnum=3; floattotal; charch1,ch2='D'; total=num*PRICE; ch1=ch2-'A'+'a';

cout<<"total="<<total<<",ch1="<<ch1<<endl;}宏定义变量定义输出结果输出:符号常量名用大写,变量名用小写PRICE=40;/*错误,不能给符号常量赋值*/8686常变量常变量:定义变量时用关键字const声明,变量的值在程序运行期间不能改变。格式:

const

数据类型常变量名=初始值;例:const

doublePI=3.14159;//PI是常变量比较:doublepi;//pi是变量pi=3.14159【注意】常变量定义时,必须初始化。87声明常变量用关键字const做限定符,且必须为该常变量赋初值。在整个程序运行期间,不允许改变常变量的值。常变量const

doublePI;PI=3.14159;常量与变量88运算符与表达式C++运算符算术运算符:+-*/%++--关系运算符:<<===>>=!=逻辑运算符:!&&||位运算符:<<>>~|^&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.->下标运算符:[]其它:函数调用运算符()学习运算符应注意:1、运算符功能2、与运算量关系要求运算量个数要求运算量类型3、优先级4、结合方向89表达式程序中,通过表达式完成对数据的处理。基本形式:Page89运算符与表达式操作数1

运算符

操作数2操作数

运算符运算符

操作数表达式的值基本算术运算符

+-*/(若整数相除,结果取整)%(取余,操作数为整数)90算术运算符与算术表达式运算符和表达式5/2=2-5/2=-2“向零取整”-5/2.0=-2.5有一个数为float或double,结果为double基本算术运算符

+-*/(若整数相除,结果取整)%(取余,操作数为整数)91算术运算符与算术表达式运算符和表达式5%2=1-5%2=-1(与被除数同号)5%-2=11%10=15%1=05.5%2(错误)基本算术运算符

+-*/(若整数相除,结果取整)%(取余,操作数为整数)优先级与结合性

先乘除(取余),后加减,同级自左至右说明:“-”可为单目运算符时,自右向左(右结合)92算术运算符与算术表达式运算符和表达式->*/%>+-(2)(3)(4)93算术运算符与算术表达式基本算术运算符

+-*/(若整数相除,结果取整)%(取余,操作数为整数)优先级与结合性++,--(自增、自减)例:i++;--j;Page93运算符和表达式操作数++++操作数->*/%>+-(2)(3)(4)94算术运算符与算术表达式++,--(自增、自减):将操作数的值加1(减1),重新写回该操作数在内存中原有的位置。种类:前置++i,--i(表达式值=i的值加(减)1)

在使用i之前,先使i的值加(减)1后置i++,i--(表达式值=i)在使用i之后,再使i的值加(减)1Page94运算符和表达式95算术运算符与算术表达式前置++i,--i

在使用i之前,先使i的值加(减)1后置i++,i--在使用i之后,再使i的值加(减)1运算符和表达式例

j=3;k=++j;

j=3;k=j++;

j=3;cout<<++j;

j=3;cout<<j++;

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

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

//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=496算术运算符与算术表达式++,--(自增、自减)说明:【1】++,--(自增、自减)不能用于常量和表达式如5++,(a+b)++【2】++,--(自增、自减)自右向左Page96运算符和表达式-,++,-->*/%>+-(2)(3)(4)例

-i++等价于-(i++)inti=3;cout<<-i++;//-397算术运算符与算术表达式++,--(自增、自减)说明:【1】++,--(自增、自减)不能用于常量和表达式如5++,(a+b)++【2】++,--(自增、自减)自右向左Page97运算符和表达式-,++,-->*/%>+-(2)(3)(4)例

++i++等价于++(i++)98算术运算符与算术表达式++,--(自增、自减)说明:【1】++,--(自增、自减)不能用于常量和表达式如5++,(a+b)++【2】++,--(自增、自减)自右向左Page98运算符和表达式-,++,-->*/%>+-(2)(3)(4)例 j+++k;(j++)+k;从左向右,将尽可能多的字符组成一个运算符99赋值运算符和赋值表达式

简单的赋值运算符"="举例

a=5

n=n+5表达式的类型

等号左边对象的类型表达式的值

等号左边对象被赋值后的值Page99运算符和表达式变量名=变量取值(常量或表达式)100赋值运算符和赋值表达式

——赋值表达式举例a=5 表达式值为5a=b=c=5

表达式值为5,a,b,c均为5a=5+(c=6)

表达式值为11,a为11,c为6a=(b=4)+(c=6)

表达式值为10,a为10,b为4,c为6a=(b=10)/(c=2)

表达式值为5,a为5,b为10,c为2Page100运算符和表达式结合方向:自右向左101赋值运算符和赋值表达式

简单的赋值运算符"="【说明】左侧必须是变量,不能是常量或表达式3=x-2*y;a+b=3;赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型inti;i=2.56;//舍弃浮点数的小数部分Page101运算符和表达式变量名=变量取值(常量或表达式)102赋值运算符和赋值表达式

复合的赋值运算符有10种复合赋值运算符:

+=,-=,*=,/=,%=,

<<=,>>=,&=,^=,|=(位运算)例

a+=3

等价于a=a+3

x*=y+8

等价于x=x*(y+8)运算符和表达式103赋值运算符和赋值表达式

——赋值表达式举例a+=a-=a*a相当于

a=a+(a=a-a*a)Page103运算符与表达式-40inta=5;cout<<(a+=a-=a*a)<<endl;104逗号运算和逗号表达式格式表达式1,表达式2[,…,表达式n]求解顺序及结果先求解1,再求解2,最终结果为表达式2的值例a=3*5

,

a*4 x=(a=3,6*3)x=a=3,6*aPage104运算符和表达式//a=15,表达式值60//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3105逗号运算和逗号表达式Page105运算符和表达式#include<iostream>usingnamespacestd;voidmain(){ intx,y=7;floatz=4;x=(y=y+6,y/z);cout<<"x="<<x<<endl;}运行结果:x=3106关系运算与关系表达式关系运算是比较简单的一种逻辑运算,优先次序为:

<<=>>===!=

优先级相同(高)优先级相同(低)关系表达式是一种最简单的逻辑表达式其结果类型为bool,值只能为true

或false。例如:a>b,c<=a+b,x+y==3运算符与表达式107关系运算与关系表达式#include<iostream>usingnamespacestd;intmain(){ cout<<"true="<<true;cout<<"orfalse="<<false<<endl; cout<<"(\'a\'>90)="<<('a'>90)<<endl;}运算符与表达式true=1orfalse=0('a'>90)=1108逻辑运算与逻辑表达式逻辑运算符

!(非)&&(与)||(或)

优先次序:高→低逻辑表达式

例如:(a>b)&&(++c==1)

其结果类型为bool,值只能为true

或false运算符与表达式inta=5,b=3,c=1;truefalsec=2&&运算符的“短路特性”inta=3,b=5,c=1;falsec=1109条件运算符与条件表达式一般形式(唯一的三元运算符)表达式1?表达式2:表达式3表达式1必须是bool类型执行顺序先求解表达式1,若表达式1的值为true,则求解表达式2,表达式2的值为最终结果若表达式1的值为false,则求解表达式3,表达式3的值为最终结果运算符与表达式cout<<(score>=60?"及格":"不及格");110条件运算符与条件表达式例:x=a>b?a:b;注意:条件运算符优级高于赋值运算符表达式2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型。

x=a>b?a:b;运算符与表达式①②inta=5,b=3;5(输出a,b中较大的值)111sizeof运算符语法形式

sizeof(类型名)

或sizeof(表达式)结果值:

“类型名”所指定的类型或“表达式”的结果类型所占的字节数。例:sizeof(short)sizeof(x)运算符与表达式112位运算——按位与(&)运算规则将两个运算量的每一个位进行逻辑与操作举例:计算3&53:000000115:(&)000001013&5:00000001运算符与表达式113位运算——按位或(|)运算规则将两个运算量的每一个位进行逻辑或操作举例:计算3|53:000000115:(|)000001013|5:00000111基本数据类型和表达式114位运算——按位异或(^)运算规则两个操作数进行异或:

若对应位相同,则结果该位为0,

若对应位不同,则结果该位为1,举例:计算0x39^0x2a0x39: 001110010x2a:(^)001010100x39^0x2a: 00010011运算符与表达式115位运算——取反(~)单目运算符,对一个二进制数按位取反。例:025:0000000000010101~025:1111111111101010运算符与表达式116位运算——移位左移运算(<<)左移后,低位补0,高位舍弃。相当于×2右移运算(>>)右移后,低位:舍弃

高位:无符号数:补0

有符号数:补“符号位”相当于/2运算符与表达式117运算符优先级括号()++,--,sizeof,!*,/,%+,-==,!=位运算|^&&&||?:赋值运算=逗号运算,低高运算符与表达式118混合运算时数据类型的转换

——隐含转换一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据char,short,int,unsigned,long,unsignedlong,float,double

低高转换精度没有损失119混合运算时数据类型的转换

——隐含转换赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动将右值转换为左值的类型。inta=5.3;逻辑运算当参与运算的操作数必须是bool型时,如果操作数是其它类型,编译系统会自动将非0数据转换为true,0转换为false。cout<<('a'+10)<<“\t”<<(false||0);位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换。不同类型数据的转换120混合运算时数据类型的转换

——隐含转换floatfVal;doubledVal;intiVal;unsignedlongulVal;dVal=iVal*ulVal;iVal被转换成unsignedlong运算结果转换为doubledVal=ulVal+fVal;ulVal被转换成float运算结果转换为double不同类型数据的转换类型的转换是临时性的,并不改变变量的数据类型,仅在运算的时刻对变量的值做了转换。121混合运算时数据类型的转换

——强制类型转换语法形式:类型说明符(表达式)或(类型说明符)表达式强制类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。不同类型数据的转换尽量使用同种类型数据类型的转换是临时性的,并不改变变量的数据类型,仅在运算的时刻对变量的值做了转换。floatfVale=(float)2.4;floatfVale=2.4f;122语句声明语句表达式语句选择语句循环语句跳转语句复合语句标号语句

程序的执行流程由语句来控制123变量声明变量初始化:在变量声明时直接赋予一个初始值。intm=4,p=3,n(2);//说明m,p,n为基本整型变量,//且它们分别具有初始值4,3,2数据类型变量名;

数据类型变量名1,变量名2,…,变量名n;例:inta,b;

charc;

doublex,y;charc;c="a";124124常变量常变量:定义变量时用关键字const声明,变量的值在程序运行期间不能改变。格式:

const

数据类型常变量名=初始值;例:const

doublePI=3.14159;//PI是常变量比较:doublepi;

温馨提示

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

评论

0/150

提交评论