C++程序设计课程概述•课程性质:通识基础课•课程目标:–理解并熟练运用C语言进行结构化程序设计–理解并熟练运用C++语言进行面向对象程序设计•课程安排:50%课堂讲授;50%上机实验•课程考核:平时成绩40%;期末笔试60%课程内容•第一部分C语言–数据类型–运算符–基本语句–函数–指针•第二部分C++语言–类和对象–引用–友元–继承–多态和虚函数–抽象类–模板–运算符重载–I/O流参考书目•教材–C++程序设计教程钱能清华大学出版社•参考书目–C语言程序设计谭浩强清华大学出版社–面向对象的理论与C++实践王燕清华大学出版社第一章概述•程序设计语言•程序与算法•结构化程序设计•面向对象程序设计1.1程序设计语言•机器语言•汇编语言•高级语言–C–C++–Java–Basic–C#–…1.1程序设计语言•C++编程流程程序编辑编译链接可执行文件1.2程序与算法•程序–代码•算法–求解特定问题的一组有限的操作序列程序=算法+数据结构1.3结构化程序设计•顺序结构•选择结构•循环结构1.4面向对象程序设计•出现的原因•面向对象的基本概念–封装–继承–多态第一个C++程序#includeiostream.hintmain(){cout“Hello,World!”endl;return0;}头文件主函数输出返回编程环境•VisualC++6.0•如何建立C++文件(演示)–“文件”-“新建”–选择“C++SourceFile”,输入文件名,点“确定”•程序调试第二个C++程序#includeiostream.hintmain(){intx,y;/*定义变量x和y*/cout“请输入x的值:”endl;cinx;cout“请输入y的值:”endl;ciny;cout“x+y=”x+yendl;//输出相加之和return0;}编程风格•缩进对齐•写注释总结第二章数据类型、运算符、表达式什么是数据类型•数据类型:–一定的数据在计算机的内部表示;–该数据所表示的值的集合;–在该数据上的一系列操作。2.1数据类型•整型•字符型•枚举型•布尔型•浮点型•字符串型•数组•指针和引用(*)常量和变量•常量:程序运行过程中不能被改变的量•如:–整型常量(如12、0、-3为整型常量)–实型常量(4.6、-1.23为实型常量)–字符常量(’a’、’d’字符常量)常量和变量•变量:在程序运行过程中,其值可以被改变的量称为变量。•每个变量都必须有一个名字──变量名,•变量命名遵循标识符命名规则:–变量命名的规定:C++语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。•变量必须先定义后使用2.1.1整型•各整型的范围:取决于不同的编译器类型类型说明符长度数的范围基本型int4字节-231~231-1短整型short2字节-215~215-1长整型long4字节-231~231-1无符号整型unsigned4字节0~232-1无符号短整型unsignedshort2字节0~216-1无符号长整型unsignedlong4字节0~(232-1)2.1.1整型•整型字面值分八进制,十进制和十六进制不同表示.如:0123//8进制0x12af3//16进制12345//10进制超过表示范围的整型数其值不可预料或者出错.如:inta=12345678912345678912345;//错2.1.1整型•整型数的操作:+,-,*,/,%,,,=,=,!,^,,=,,=,==,^=,&,|,&=,|=,&&,||,&&=,||=,!=,=,+=,-=,*=,/=,%=,++,--,,,?:2.1.1整型•变量说明的一般形式为:–类型说明符变量名标识符,变量名标识符,...;inta,b,c;//a,b,c为整型变量longx,y;//x,y为长整型变量unsignedintp,q;//p,q为无符号整型变量2.1.2字符型•用一对单引号括起来的单个字符,称为字符常量•字符变量的类型关键字为char,一般占用1字节内存单元•字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。可作为整数和字符两种形式输出,可对字符进行整数运算(ASCII码值)•C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的转义字符。2.2字符型•C语言还允许使用一种特殊形式的字符常量,就是以反斜杠“\”开头的转义字符。其它如下表:字符形式\n\t\v\b\r\f\\\'\ddd\xxh功能换行横向跳格(即跳到下一个输出区)竖向跳格退格回车走纸换页反斜杠字符“\”单引号(撇号)字符1到3位8进制数所代表的字符1到2位16进制数所代表的字符2.1.2字符型输出形式与整型数不同:inta=65;charb=65;couta“\n”;coutb“\n”;结果为:65A2.1.3枚举型•自定义整数区间,甚至列举单个整数值enumWeek{Mon,Tue,Wed,Thu,Fri,Sat,Sun};•最大特点是可以给每个值指定一个在程序中直接使用的标记(枚举符).编程中将其当作整数常量用.如:inta=6;if(a==Sun)cout“Sunday\n”;2.1.4布尔型•表示范围仅含整数0和1,也可以表示成true和false,相当于:•因为条件表达式、逻辑运算的结果都是0或1,所以,相当大数量的表达式的值与布尔型对应•例:boola=3//trueboolb=0//false2.1.5浮点型•浮点型常量的表示方法–小数形式:0.123–指数形式:3e-32.1.5浮点型•浮点型分为:–单精度(float型)–双精度(double型)–长双精度型(longdouble)类型位数数的范围有效数字float3210-37~10386~7位double型6410-307~1030815~16位longdouble12810-4931~10493218~19位2.1.5浮点型•浮点型变量的赋值–floatf1=19.2f–doublef2=19.2(1)C语言允许在定义变量的同时使变量初始化。如:inta=3;//指定a为整型变量,初值为3floatf=3.56;//指定f为浮点型变量,初值为3.56charc=‘a’;//指定c为字符变量,初值为‘a’小结小结(2)可以使被定义的变量的一部分赋初值。如:inta,b,c=5;表示指定a、b、c为整型变量,但只对c初始化,c的初值为5(3)如果对几个变量赋以同一个初值,应写成:inta=3,b=3,c=3;表示a、b、c的初值都是3。不能写成∶inta=b=c3;练习1•用户输入圆的半径,求出圆的面积并输出。•#includeiostream.h•#includemath.h•intmain()•{•doubler,mj;•cout请输入圆的半径:endl;•cinr;•mj=3.14*r*r;•cout圆的面积是:mjendl;•return0;•}练习2•输入矩形的长和宽,求矩形的周长并输出。•#includeiostream.h•intmain()•{•doublex,y,zc;•cout请输入矩形的长:endl;•cinx;•cout请输入矩形的宽:endl;•ciny;•zc=2*x+2*y;•cout矩形的周长是:zcendl;•return0;•}2.1.6数组•数组是同类元素的集合,它的元素排列在连续的空间中,按下标来标记•描述数组必须给出元素类型,元素个数•元素个数必须在编程时确定,任何变量都不允许•数组的定义格式为:类型名数组名[常量表达式]•数组下标从0开始2.1.6数组•例:inta[’a’];//表示inta[97];intn=100;inta[n];//错:元素个数必须预知constintn=100;inta[n];//okinta[];//错:无元素个数inta[]={1,2,3,4,5};//ok:通过初始化确定元素个数2.1.6数组数组初始化可选,但须遵循语法.无初始化的数组按规定取默认值•intarray1[5]={1,2,3,4,5,6};//错:初始值个数超元素个数•intarray2[5]={1,,2,3,4};//错:不能以逗号方式省略•intarray3[5]={1,2,3,};//错:同上•intarray4[5]={};//错:初始值不能为空•intarray5[5]={1,2,3};//ok:后面元素取0•intarray6[5]={0};//ok:元素全为0•intarray7[5];//ok:元素值不确定•inta[3][5]={{1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};2.1.6数组•二维数组–二维数组的定义格式为:类型名数组名[常量表达式][常量表达式]–inta[3][4];//a为3×4(3行4列)的数组–floatb[5][10];//b为5×10(5行10列)的数组2.1.6数组•二维数组的初始化–分行赋值,如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};–全部数据写在一个大括号内,如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};–部分元素赋值,如:inta[3][4]={{1},{5},{9}};仅对a[0][0]、a[1][0]、a[2][0]赋值,其余元素未赋值(编译器自动为未赋值元素指定初值02.1.6数组•二维数组的初始化–如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。例:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};与下面定义等价:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};练习3•斐波那契数列如下–F0=1–F1=1–Fn=Fn-1+Fn-2•使用数组求出斐波那契数列的前5项,并输出。•#includeiostream.h•intmain()•{•intF[5];•F[0]=F[1]=1;•F[2]=F[0]+F[1];•F[3]=F[1]+F[2];•F[4]=F[2]+F[3];•cout斐波那契数列的前5项是:F[0]F[1]F[2]F[3]F[4]endl;•}2.1.7字符串型•C-串–C语言中没有字符串类型–charbuffer[7]=“Hello!“;–本质是一个字符数组’H’’e’’l’’l’’o’’!’’\0’721011081081113302.1.7字符串型•知道了C-串首地址,即可知道整个串,所以可以用字符首址(字符指针)来操作C-串,但要注意,串的第一个字符与整个串的操作不同,如,C-串的输出操作:char*str=”Hello”;cout*strendl;//显示Hcoutstrendl;//显示Hello2.1.7字符串型•string:C++提供的一种自定义类型–例:stringa,s1=Hello;strings2=123;a=s1;2.1.7字符串型•输入C-串的string承载方式:•cin的读入方式总是将前导的空格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,将单词读入,在遇到空格时结束本次输入•getline总是将行末的回车符滤掉,将其整行输入对字串”Hello,Howareyou?”的两种输入方式for(strings;cins;)couts”“;coutsendl;strings;getline(cin,s);coutsendl;2.1.8指针与引用指针是一种特殊的变量,它是存放地址的指针必须初始化或者赋值(指向了数据)后,才能