1第1章C++程序设计基础皮德常南京航空航天大学计算机科学与技术学院程序设计语言的发展历史3为什么要学习C++程序设计1.C++是C的扩充版本。C++对C的扩充是由BjarneStroustrup于1980年在贝尔实验室提出来的。起初他把这种语言称为“带类的C”,到1983年才改名为C++。2.C++吸收了C和Simula67的精髓,它具有C所无法比拟的优越性。41.2简单的C++程序举例#includeiostreamusingnamespacestd;intmain(){inta,b;//定义2个变量cout输入变量a和b:;cinab;/*从键盘输入a和b的值*/couta+b=a+bendl;return0;}1-1.cpp51.3注释方法1.C++的注释形式有两种,一种是“/**/”格式,这是C语言中的注释风格;2.双斜线//,在双斜线之后的部分都会被视为注释;不必为程序的每一行都加注释,也不必为一目了然的代码加注释,只要注解适当的代码,有助于他人理解即可。61.4编程风格•程序员使用标识符、空格、Tab键、空行、标点符号、代码缩进排列和注释等,来安排源代码的方式。【例1.2】一个不好的风格程序#includeiostreamusingnamespacestd;intmain(){inta,b;cout输入变量a和b:;cinab;couta+b=a+bendl;return0;}71.5.1C++程序中的字符•26个小写英文字母;•26个大写英文字母;•10个阿拉伯数字和其它一些符号,如:+、-、*、/等,其中每个ASCII码字符占用一个字节。81.5.2标识符•标识符由字母、下划线和数字组成,且第一个字符不能为数字,长度一般不超过32个,文件名只识别前8个字符。标识符大小写敏感。•采用有意义的单词作标识符,做到见名知意。•studentName、StudentName、name_of_student•abc、a123•8abc、StudentName、$bill91.5.3关键字•又称保留字,是系统定义的一些特殊标识符,具有特定含义,不允许挪作他用;•表1-1:C++常用关键字。101.6C++的基本数据类型•两大类:基本数据类型和导出数据类型。•基本类型也称预定义的类型或内置数据类型,包括char、int、float、double、bool和void等。•导出类型:由基本数据类型构造出来的类型,包括数组、指针、引用、结构体、共用体、枚举和类等。•表1-2:C++的基本数据类型。类型名称字节数取值范围bool布尔型1true,false[signed]char有符号字符型1-128~127unsignedchar无符号字符型10~255[signed]short[int]有符号短整型2-32768~32767unsignedshort[int]无符号短整型20~65535[signed]int或signed有符号整型4-231~(231-1)unsigned[int]无符号整型40~(232-1)[signed]long[int]有符号长整型4-231~(231-1)unsignedlong[int]无符号长整型40~(232-1)float实型4-1038~1038double双精度实型8-10308~10308longdouble长双精度实型8-10308~10308121.7.1变量•在程序运行中,值可变的量称为变量。•变量的三要素:变量名、内存空间和值。1.定义变量:boolb;chargender,ch;inta,b;doubledx;floatf;unsignedu;131.7.1变量2.变量赋值(1)变量定义后,用赋值语句赋初值。inta;a=-12+100;(2)在定义变量的同时,初始化。inta=12;●变量不赋值,其值是什么??141.7.2文字常量1.在程序运行中,值不能被改变的量称为常量。2.文字常量是指可直接使用的常量。3.文字常量存储在代码区,对它的访问不是通过地址进行的。4.文字常量分为:整形、实型、字符型和字符串型常量。151.7.2文字常量1.整型常量(1)十进制整数,如:789,-456(2)八进制整数,如:0567,-026(3)十六进制整数,如:0x789,-0xAB(4)长整型与无符号型整数长整型整数,如:12L,0234L,-0xABl无符号型整数,如:12U,0234U,0xABu161.7.2文字常量2.实型常量在内存中以浮点形式存放,均为十进制数,无数制区分。(1)小数形式:1.65,1.,.123(2)指数形式:1.23e5、1.23e-5、1e3171.7.2文字常量3.字符型常量:用单引号括起来的一个字符,如‘a’,‘A’,‘?’。在内存中的ASCII码值,数据类型为char。4.转义字符:\b退格\n换行符\r回车符\tTab键\\反斜杠字符\'单引号\双引号\nnn八进制值,最多三位\xhh十六进制值,最多两位例如:'\n'='\12'='\xa''A'='\101'='\x41'1-2.cpp181.7.2文字常量5.字符串常量123、IamaChinese.、a串结束符:'\0'a和'a'不同思考:I\'vedonedog\'stoy\Love\191.7.3符号常量例如:#definePI3.1415926定义符号常量的好处:?201.7.4常变量例如:constdoublepi=3.14159;1.常变量具有变量的三个要素。2.必须在定义时赋初值,且在程序的运行中值不可变。3.编译器可对常变量进行类型检查。211.8.1算术运算符和算术表达式1.五个算术运算符:+、-、*、/、%2.5/2为2,5.0/2为2.53.8%3为2,而8.0%3非法221.8.3赋值运算符和赋值表达式•赋值运算符:变量=表达式例如:3.14=pix+y=100constintN=100;N=200;b=c=d=a+5a=5+c=20231.8.3赋值运算符和赋值表达式复合赋值运算符:a=a+3=a+=3y*=(x+8)=y=y*(x+8)思考:若a初值为6,执行表达式a+=a-=a*=a后,表达式的值和a的值分别是多少?241.8.4自增、自减运算示例:inti=3,j;j=++i;不同于:j=i++;3++、++(x+y)均非法!inti=3,j=4,x;x=(i++)+(j++);251.8.5关系运算符和关系表达式、=、、=优先级高于==、!=运算结果为boolean类型。注意:有a=1,b=2,c=3,则表达式abc的值为false,这是一种“走火入魔”式的写法。261.8.6逻辑运算符和逻辑表达式•三种逻辑运算符:!、&&、||•运算结果:boolean1.非0表示true,0表示false。若有a=-1;b=2.0;则表达式a&&b为true。2.关系0≤x≤10应写成0=x&&x=10。3.表达式求值短路:intx=1,y=1,z=1,w=0;w=++x||++y&&++z;271.8.7位运算和算术表达式1.按位与(&)inta=3,b=-2,c=a&b;a00000000000000000000000000000011b11111111111111111111111111111110c00000000000000000000000000000010281.8.7位运算和算术表达式2.按位或(|)inta=3,b=-2,c=a|b;a00000000000000000000000000000011b11111111111111111111111111111110c11111111111111111111111111111111291.8.7位运算和算术表达式3.按位异或(^)inta=3,b=-2,c=a^b;a00000000000000000000000000000011b11111111111111111111111111111110c11111111111111111111111111111101思考:inta=5,b=9;a=a^b;b=a^b;a=a^b;301.8.7位运算和算术表达式4.按位取反(~)inta=18,b=~a;a00000000000000000000000000010010b11111111111111111111111111101101311.8.7位运算和算术表达式5.左移()例如1:inta=15,x=a3;例如2:shortinta=32767,b=a1;6.右移()例如:shortinta=-2,b=a2;无论是左移或右移,原变量a的值XX。321.8.7位运算和算术表达式思考:编程从一个16位的单元中取出某几位。若value的值为八进制数0101675,start为5,end为8,那么,value和result的值为:331.8.7位运算和算术表达式代码片段:unsignedshortintvalue=0101675,result;intstart=5,end=8;result=value(start-1);//step1:左移result=16-(end-start+1);//step2:右移思考:为什么将变量value定义成unsigned类型,如果去掉unsigned可以吗?341.8.8逗号运算符与逗号表达式例如逗号表达式:a=3*5,a*4,a+5则表达式的值,变量的值分别是:…思考:下面三个表达式运算结束后,a、x和表达式的值分别是多少?a=3*5,a*4x=(a=3,6*3)x=a=3,6*3351.8.9sizeof运算符例如:doublex=100;sizeof(double)和sizeofx均为8。361.9语句1.表达式语句例如:a+b,c*d;x=(a+b,c*d);2.空语句3.复合语句{a+b,c*d;x=(a+b,c*d);}371.10.1赋值时的类型转换例如:1.inti=3.96;则i=???2.doubled=23;则d=???3.charch=360;则赋值过程为:…381.10.1赋值时的类型转换4.unsignedcharc=-2;inti;i=c;5.charc=-2;inti;i=c;思考赋值过程思考赋值过程391.10.2混合运算时的类型转换1.总体原则:由低类型向高类型转换。自己看书!2.实型常量2.0f或2.0F属于float类型,而2.0属于double型。401.10.3强制类型转换•格式:(type)表达式例如:inta=9,b=5;doubled1,d2;d1=(double)a/b;d2=(double)(a/b);新标准:static_castdouble(a/b)411.11.1cout对象和cin对象•cout/cin:输出/入流对象;例如:coutIlikeC++;“”流插入操作符“”流提取操作符•【例1.3】程序举例#includeiostreamusingnamespacestd;intmain(){intlength,width,area;cout计算矩形的面积\n;cout输入矩形的长:;cinlength;cout输入矩形的宽:;cinwidth;area=length*width;cout矩形的面积为:areaendl;return0;}1-3.cpp431.11.1cout对象和cin对象易于出错的地方:intwhole;floatfractional;charletter;cout请输入一个整数、一个浮点数和一个字符:;cinwholefractionalletter;cout整数:wholeendl浮点数:fractionalendl字符:letterendl;