收藏 分销(赏)

C++程序设计全套教学教程.ppt

上传人:人****来 文档编号:12068177 上传时间:2025-09-05 格式:PPT 页数:902 大小:6.17MB 下载积分:25 金币
下载 相关 举报
C++程序设计全套教学教程.ppt_第1页
第1页 / 共902页
C++程序设计全套教学教程.ppt_第2页
第2页 / 共902页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,学习内容:,1.C+语言的发展历史及其特点;,2.C+语言程序的构成和开发过程;,3.C+语言的基本词法单位;,4.数据类型,变量及常量,5.常用运算符的含义、优先级、结合性与使用方法;,6.表达式的构成规则和使用;,7.数据类型转换;,8基本输入/输出。,第1章 C+基础,第1章 C+基础,1.3,C+,程序开发过程,1.6,变量和常量,1.8,数据的输入输出,1.7,运算符和表达式,1.5,C+,的数据类型,1.4,C+,的词法单位,1.1,C+,概述,1.2,简单的,C+,程序实例,1.1,C+概述,什么是程序?,要让计算机解决某一个问题之前,必须先把求解问题的步骤描述出来,称之为算法。,将算法用某种特定的计算机语言表达出来,输入到计算机,就是计算机编程,用计算机语言表达出的算法称之为计算机程序(或程序)。,程序是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合,程序规定了计算机执行的动作和动作的顺序。,1.1,C+概述,什么是程序?,一个程序应包括以下两方面的内容:(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构。(2)对操作的描述。即操作步骤,也就是算法。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。,程序设计,(Programming),简单地说,程序设计就是为计算机编制程序的过程,,程序设计编码,,它涉及:,程序设计方法(包括程序设计范型),程序设计步骤,程序设计语言等,1.1,C+概述,程序设计范型,程序设计本质上可归结为:,数据,描述,数据操作(加工),描述,对数据和数据操作之间关系的不同处置就形成了不同的,程序设计范型,(Programming Paradigms)。,典型的程序设计范型有:,过程式(面向功能),对象式(面向数据),函数式,逻辑式,等,1.1,C+概述,过程式程序设计,一种以,功能,为中心、基于,功能分解,的程序设计范型。,一个过程式程序由一些,子程序,构成,每个子程序对应一个子功能。子程序描述了一系列的操作,它实现了,功能抽象,。,过程式程序的执行过程体现为一系列的子程序调用。数据处于附属地位,它独立于子程序,在子程序调用时通过参数或全局变量传给子程序使用。,著名的计算机科学家Nikiklaus Wirth,描述了过程式程序设计的本质:,程序=算法+数据结构,1.1,C+概述,对象式(面向对象)程序设计,一种以,数据,为中心、基于,数据抽象,的程序设计范型,通常称为,面向对象程序设计,。,一个面向对象程序由一些,对象,构成,对象是由一些,数据,及可施于这些数据上的,操作,所组成的,封装体,。对数据的操作是通过向包含数据的对象发送消息(调用对象提供的操作)来实现。对象的特征由相应的,类,来描述,一个类可以从其它的类,继承,。,面向对象程序的执行过程体现为各个对象之间相互发送和处理,消息,。,程序=对象+消息,对象=数据+操作,1.1,C+概述,函数式与逻辑式,函数式程序设计,是围绕函数来进行的,计算过程体现为一系列的函数应用(Function Application),它基于了递归函数理论和lambda演算,其中,函数也被作为值来看待,即,函数的参数也可以是函数。,逻辑程序设计,是把程序组织成一组事实和一组推理规则,在事实基础上运用推理规则来实施计算,它基于的是谓词演算(Predicate Calculus)。,上述两种程序设计范型常用于人工智能领域的程序开发。,1.1,C+概述,程序设计步骤,明确问题,搞清楚要解决的问题并给出问题的明确定义,即:做什么?,系统设计,给出问题的解决方案,即:如何做?主要包括:,数据结构的设计,算法的设计,如何组织上述两者,属于不同的程序设计范型。,1.1,C+概述,编程,选择用某种语言按系统设计进行编程。,良好的编程风格可以通过学习和训练来获得。,测试与调试,程序写好之后,其中可能含有错误。程序的逻辑错误和运行异常错误一般可以通过,测试,(test)来发现。,发现错误给错误定位的过程称为,调试,(debug)。,运行维护,所有的测试手段只能发现程序中的错误,而不能证明程序没有错误。,在使用中发现错误并改错称为,维护,。,程序设计步骤(续),1.1,C+概述,程序设计语言,程序设计的结果必然要用一种能被计算机接受的语言表示出来,即编程实现(Coding)。,根据与计算机指令系统和人们解决问题所采用的描述语言(如:数学语言)的接近程度,常常把程序语言分为:,低级语言,高级语言,通常所讲的,程序设计语言,往往指的是高级语言。,1.1,C+概述,低级语言和高级语言,低级语言:,是指特定计算机能够直接理解的语言(或与之直接对应的语言),机器语言:,采用指令编码和数据的存储位置来表示操作以及操作数;,汇编语言:,是用符号名来表示操作和操作数位置,以增加程序的易读性。需要翻译(,汇编,)成机器语言才能执行。,高级语言:,是指人容易理解和有利于人对解题过程进行描述的程序语言。典型的高级语言有:,FORTRAN、COBOL、Basic、Pascal、C、Ada、Modula-2、Lisp、Prolog、Simula、Smalltalk、C+、Java等,1.1,C+概述,低级语言与高级语言程序的比较,计算r=a+b*c-d的值,,用汇编语言可写成:,mov ax,b,mul ax,c,add ax,a,sub ax,d,mov r,ax,用高级语言可写成:,r=a+b*c-d,1.1,C+概述,低级语言的优、缺点,优点:写出的程序效率比较高,包括执行速度快和占用空间少。,缺点:程序难以设计、理解与维护,难以保证程序的正确性。另外,可移植性差。,高级语言的优、缺点,优点:程序容易设计、理解与维护,容易保证程序正确性。可移植性好,缺点:用其编写的程序相对于用低级语言编写的程序效率要低,翻译成的目标代码量较大。,低级语言与高级语言程序的比较,1.1,C+概述,高级语言的翻译,用高级语言书写的程序须翻译成机器语言程序才能在计算机上运行。翻译方式有两种:,编译,把高级语言程序(称为,源程序,)首先翻译成功能上等价的机器语言程序(称为,目标代码程序,)或汇编语言程序(再通过汇编程序把它翻译成目标代码程序),然后执行目标代码程序。,在目标代码程序的执行中不再需要源程序。,解释,对源程序中的语句进行逐条翻译并执行,翻译完了程序也就执行完了。,这种翻译方式不产生目标程序,程序的每次执行都需要源程序。,1.1,C+概述,把高级语言程序翻译成机器语言程序的工作一般由程序来实现,根据翻译方式可把翻译程序分为:,编译程序,解释程序,一般来说,,编译执行比解释执行效率高,解释执行容易实现平台无关,高级语言的翻译,1.1,C+概述,1.1,C+概述,C/C+历史,C语言是美国贝尔实验室在19691973年开发的,与此同时,还用它开发了UNIX操作系统。,七十年代末,C语言开始移植到非UNIX环境中,并逐步脱离UNIX系统成为一种独立的程序设计语言。,1988年美国国家标准化协会ANSI对C语言进行了标准化,产生了ANSI C。,1.1,C+概述,C/C+历史,1980年,贝尔实验室的Bjarne Stroustrup博士及其同事对C语言进行了改进和扩充,并把Simula 67中类的概念引入到C中。并在1983年由Rick Maseitti提议正式命名为C+(C Plus Plus)。,1998年国际标准组织(ISO)颁布了C+程序设计语言的国际标准ISO/IEC 14882-1998。C+是具有国际标准的编程语言,通常称作ANSI/ISO C+。,1.1,C+概述,(1)语言简洁、紧凑,使用灵活,书写形式自由。,(2)具有丰富的运算符和数据类型,表达式。,(3)是结构化程序设计语言,以函数作为程序的模块单位,并支持程序的多文件结构,适用于大型复杂程序的设计。,(4)可移植性强。,(5)编译后生成的目标代码小,质量高,程序的执行效率高。,(6)能直接访问内存物理地址,通过位运算能直接对计算机硬件进行操作。,C,语言的主要特点:,1.1,C+概述,C+,语言的主要特点:,(1)作为C语言的超集,C+继承了C的所有优点,与C语言兼容,支持结构化的程序设计。,(2)对C的数据类型做了扩充,修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析。,(3)生成目标程序质量高,程序执行效率高。,(4)支持面向对象的程序设计,通过类和对象的概念把数据和对数据的操作封装在一起,模块的独立性更强。通过派生、多态以及模板机制实现软件复用。,(5)提供了异常处理机制,简化了程序的出错处理。出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。,C+提高了程序的可读性、可靠性、可重用性、可维护性,更适合大型复杂软件的开发。,/hello.cpp,#include,using namespace std;,int main(),coutHello!n;,coutWelcome to c+!,endl;,return 0;,注释 /*/,编译预处理,主函数,1.2,简单的,C+,程序实例,1.2,简单的,C+,程序实例,/求两数和,#include,/使用C+标准库,using namespace std;,/指定使用标准库的名空间std,int main(),/主函数,double x,y;,/定义两个变量x和y,cout x y;,/从键盘输入数据给变量x和y,double sum;,/定义一个变量sum,sum=x+y;,/把x+y的结果保存到变量sum中,cout x +y =sum=j),return,i;,else,return j;,int,main(),/主函数,coutij;,/从键盘上输入变量值,coutmax number is:max(i,j),,=,=,|,&等。,单词有时需要用,空白符,把它们分开,使得它们在形式上成为独立的单位。,空白符包括:,空格符,制表符,回车符,注释符,1.4.6,空白符,1.5 C+的数据类型,逻辑型 bool(C没有),图1-1,数据类型,单精度型 float,双精度型 double,数据类型,基本数据类型,非基本数据类型,数组 type ,指针 type*,引用 type&(C没有),结构 struct,联合 union,枚举 enum,类 class,(C没有),字符型 char,整 型 int,空类型 void,实 型,C+为强类型语言,所有数据的使用严格遵从,“,先说明后使用,”,的原则,以便编译器进行编译。,数据具有不同的类型,类型定义了变量可存储的数值范围以及可进行的操作。,1.5 C+的数据类型,对数据进行分类,便于对数据进行描述和处理。提高程序的可靠性,便于编译程序自动进行类型一致性检查。便于产生高效代码。,类 型,名 称,占用字节数,取 值 范 围,bool,布尔型,1,true,false,(signed)char,有符号字符型,1,-128,127,unsiged char,无符号字符型,1,0,255,(signed)short(int),有符号短整型,2,-32768,32767,unsigned short(int),无符号短整型,2,0,65535,(signed)int,有符号整型,4,-2,31,(,2,31,-1),unsigned(int),无符号整型,4,0,(,2,32,-1),(signed)long(int),有符号长整型,4,-2,31,(,2,31,-1),unsigned long(int),无符号长整型,4,0,(,2,32,-1),float,实型,4,-3.4,38,3.4,38,double,双精度型,8,-1.7,308,1.7,308,long double,长双精度型,8,-1.7,308,1.7,308,void,空类型,0,无值,VC+中,所有基本数据类型,1.6,变量和常量,1.6.1,变 量,1.6.2,文字常量,1.6.3,常变量,在程序中,数据以两种形式出现:,常量,:用于表示在程序执行过程中不变的数据。,变量,:用于表示在程序执行过程中可变的数据。,1.6.1 变 量,变量就是机器一个内存位置的符号名,在该内存位置可以保存数据,并可通过符号名进行访问。,变量的基本特性,名字:用标识符表示。,类型:指定变量能取何种值、对其能进行何种运算(操作)以及所需内存空间的大小等。,值:在类型的值集范围内可变。,内存空间和地址:存储变量当前值的内存空间以及该空间的地址。,变量说明一般格式为:,存储类型数据类型 变量名1,变量名2,变量名n;,例:,int age;,/说明1个整型变量age,float area,volumn;,/说明2个实型变量,char c1,c2;,/说明两个字符型变量c1,c2,double dx;,/说明一个双精度型变量dx,1.6.1 变 量,变量初始化:,定义变量时即给变量一个值称为变量初始化或给变量赋初值,例如:int a=3,b=4,c=5;float area=3.5,volumn=5.6;,变量初始化可以避免引用到随机变量,1.6.1 变 量,1.6.2 文字常量,1.,整型常量,4.,字符串常量,3.,字符型常量,2.,实型常量,文字常量:,在程序中通过直接写出常量值来使用的常量,通常又称为,直接量,(literal);存储在,程序区,,而非数据区;,根据取值和表示方法的不同,可分为以下几种:,整型常量,整型常量表示形式:,十进制,由09数字组成,第一个数字不能是0(整数0除外),如:26,185,-92,八进制,由数字0打头,07数字组成,如:047,0231,-0100,十六进制,由0 x或0X打头,09数字和AF(或af)字母组成,如:0 x2E,0 x61,-0 xA4,可在整型常量的后面:,加上l或L,表示long int类型的常量,如:32765L,也可加上u或U,表示unsigned int类型的常量,如:4352U,也可同时加上u(U)和l(L)表示unsigned long类型的常量,如:41152UL或41152LU,整型常量,实型常量,(,1),一般形式,,例如:,0.12 -325.74 0.0 .46 -35.,(2),指数形式(也称为科学表示法),表示为,尾数乘以10的次方形式,由,尾数,、,E,或,e,和,阶数,组,成,。要求:E或e前面的,尾数部分必须有数字,,后面的,指数部分必须为整数,。,例:判断下列表示是否合法,123E12,-.34e-2,E4,1.41E2.9,表示方法:,字符型常量,用单引号引起来的单个字符,。在内存中保存的是字符的ASCII码值。在所有字符中,可显示字符通常就用单引号引起来表示:,a /字符a,/字符,4/字符4,/空格字符,特殊情况字符,如不可显示的字符等,c+使用,转义序列,表示方法:,n/换行,/反斜杠(),101 /A(10进制编码=65),0 /null(10进制编码=0),x61 /a(10进制编码=97),4.字符串常量,字符串常量与字符型常量的区别:,字符串常量,a,占两个字节,存放a和 0,字符型常量,a,占一个字节,存放a,0,用双引号引起来的若干个字符。,例如:,I am a Chinese.,123,a,对字符常量的操作按char类型进行;对字符串常量的操作按字符数组的规定。,1.6.3 常变量,用常量说明符,const,给文字常量起的名字(标识符),例如:,const,float PI=3.14159;,const,int Number=100;,常变量必须也只能在说明时进行初始化;,常变量初始化之后,不允许再被赋值;,常变量必须先定义后使用;,常变量存储在数据区,并且可以按地址访问,编译时系统对常变量进行类型检查。,如某个常量在程序中经常出现,建议使用常变量,而不要使用文字常量,可以增强程序的可读性和可维护性。,变量和常量例题,#include,const,float PI=3.14159;,int main(),float v,r,h;,r=2.5;,h=3.2;,v=PI*r*r*h;,coutv=&=|=,格式为:,变量 复合赋值运算符 表达式,它等同于,变量=变量 运算符 表达式,例如:,x+=5,等同于:,x=x+5,x*=y+3,等同于:,x=x*(y+3),赋值表达式举例,a=5,表达式值为5,a=b=c=5,表达式值为5,a,b,c均为5,a=5+(c=6),表达式值为11,a为11,c为6,a=(b=4)+(c=6),表达式值为10,a为10,b为4,c为6,a=(b=10)/(c=2),表达式值为5,a为5,b为10,c为2,a+=a-=a*a,相当于:a=a+(a=a-a*a),Page,66,3.,自增自减运算,前置和后置运算,前置,是,先增减后引用,,即先对变量自加或自减,用新的值参与其他运算;,后置,则是,先引用后增减,,即用变量原来的值参与其他运算,然后再对变量进行自加或自减,+-,意义:使变量当前值加1或减1,,再赋给该变量。,要求:操作数只能是,变量,,不能是常量或表达式;,自增、自减运算符 (难点)+,i,6,i,3,7,int i,j;,i=3;,j=+i;,i=4 j=4,+在前,先运算,后赋值,int i,j;,i=3;,j=i+;,i=4 j=3,+在后,先赋值,后运算,j,4,4,i,3,j,3,4,例如:i=6;,i+;,i=6;,+i;,i,6,7,例:int a=2,j,k;,a+;/a的值为3,j=+a;/a的值为4,j的值为4,k=a+;/k的值为4,a的值为5,couta+;/输出5,a的值为6,coutc+d,/*等同于(a+b)(c+d),,结果为0或1*/,y=ab,/*计算ab的值0或1,赋给y,y的值为0或1*/,abc,/*等同于(ab)c,先求ab 的值,,再将结果0或1与c比较大小*/,4.,关系和逻辑运算,一些实数在计算机内部表示的是其近似值,用关系运算符直接对浮点数进行比较,有时会得出错误的结果。,应避免对两个实数进行,“,=,”,和,“,!=,”,比较运算,x=y可写成:fabs(x-y)1e-6,4.,关系和逻辑运算,优先级,运算符,名 称,语 义,2,!,逻辑非,单目,操作数的值为真,则结果为假;反之结果为真,11,&,逻辑与,双目,当两个操作数全为真时,结果为真,否则为假;,12,|,逻辑或,双目,两个操作数中有一个为真,则结果为真;,逻辑运算符包括:!、&和|,其优先级和语义见下表。,4.,关系和逻辑运算,由逻辑运算符连接的表达式,。其操作数和运算结果均为,逻辑值,。,在C+中0对应假,而一切非0值都对应真。,21&0/逻辑与,21与0,结果为假:0,21|0/逻辑或,21或0,结果为真:1,!21/逻辑非,21的非,结果为假:0,ab&bc /表示a大于b大于c,逻辑表达式:,逻辑表达式计算时,逻辑非优先级最高,关系运算其次,逻辑与和逻辑或最低。,已知:,int a=10,b=20,c=30;float x=1.8,y=2.4;,ay|ab-!c,按,优先级,与,结合性,,其,求值顺序,等同于:,(ay)|(a(b-(!c),t1=1,t2=0,t4=0,-,&,t3=0,t5=b,t6=1,|,得整个表达式的值为:,1,逻辑表达式求值的优化:,在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。,称为,“,求值优化,”,。,已知:,int a=3,b=0;,求:,!a&a+b&a+,t1=0,整个表达式的值为,0,可见:表达式 a+已不需要计算所以:,a不变仍为,3,编程人员在使用逻辑运算时应当加以小心,优化计算固然提高了运算效率,但可能产生副作用。,所谓副作用,就是出乎设计人员的意料,得到预想不到的结果。,5.,位运算,在C+中提供了对整型和枚举类型数据按操作数的各个二进制位分别进行运算的操作,包括:逻辑位运算和移位运算。,在一些系统软件中往往需要多种标志状态,用来控制寄存器等底层部件的状态。而为了节约内存往往将这些标志组合到一个字或字节中,位运算就能通过与特定的数作用从而提取出相应位的标志。位运算最大的作用是提高空间使用效率和运算速度。这在低配置环境如单片机或大运算量如人工智能方面都是很重要的。,(1)按位取反运算符,“,”,将操作数的每个二进制位取反,即1变为0,0变为1。例如,整数a的值为10011011,则a的值为01100100。,该运算不影响数据本身的值,而是只产生一个中间量,这个中间量被引用后即不再存在。,5.,位运算,(2)按位与运算符,“,&,”,将两个操作数的对应位逐一进行按位逻辑与运算。例如:,a 01001101,b 00001111,a&b 00001101,该运算可用来将整数的某些位置0,而保留所需要的位,上例保留了低四位。,(3)按位或运算符,“,|,”,将两个操作数的对应位逐一进行按位逻辑或运算。例如:,a 01001101,b 00001111,a|b 01001111,该运算符可用来将整数的某些位置1。上例高四位不变,低四位全1。,5.,位运算,s=(s|0 x40),/把第7位设置为1(从低位开始数),s=(s&0 xF7),/把第4位设置为0,(4)按位异或运算符,“,”,将两个操作数的对应位逐一进行按位异或运算。运算规则为:当对应位的值不同时,该位运算结果为1,否则为0。例如:,a 01001101,b 00001111,a b 01000010,该运算符可用来将一个整数的某些位取反,或将整型变量的值置0(将整型变量与自身按位异或)。上例低四位取反,高四位不变。,5.,位运算,(5)左移运算符,“,”,运算一般格式为:an,其中a为整数,n为一个正整数。语义为将a的值依次向左移动n个二进制位,并在低位补0。,例如:0 x3F61,”,将左操作数向右移动右操作数指定的二进制位数,,低位舍弃,高位按下面规则处理:,对于无符号数或有符号的非负数,高位补0,对于有符号数,高位与原来的最高位相同,一个整数右移n位相当于,除以,2的n次方,但比除法快。,5.,位运算,6.,逗号运算符与逗号表达式,用逗号连接起来的表达式称为逗号表达式,(C+中,逗号既是分隔符,又是运算符。),格式为:,表达式1,表达式2,,,表达式n,逗号表达式中的每一个表达式都会被运算,,整个逗号表达式的值为最后一个表达式的值。,例如:,a=(x=3,x+=6,5+6);,/a=11 x=9,7.sizeof(),运算符,计算某类型的数据占用的内存大小(字节数)。,一般格式为:,sizeof(数据类型名),或,sizeof(表达式),例如:,sizeof(int),/,值为4,sizeof(float),/,值为4,double x;,sizeof(x),/,值为8,8.,条件运算符与条件表达式,一般形式:,表达式1?表达式2:表达式3,执行顺序:,先求解表达式1,,若表达式1的值为true,则求解表达式2,表达式2的值为最终结果,若表达式1的值为false,则求解表达式3,表达式3的值为最终结果,注意:,条件,运算符优级,高于,赋值,运算符,,低于,逻辑,运算符,结合方向为自右至左,表达式1、2、3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。,例,:(xy)?x:y (x=0)?x:-x,ch=(ch=A,x0?1:xy?1:1.5,8.,条件运算符与条件表达式,表达式的副作用问题,在符合优先级和结合性的前提下,标准C+对表达式中各操作数的求值次序没有做统一规定。,例如:,(x+1)*(+x),由于C+没有规定操作符+和+谁先计算,因此,不同的编译程序可能会给出不同的实现:(假设x初值为1),先计算+,则结果为:4,先计算+,则结果为:6,应尽量避免把带副作用的操作符用在复杂的表达式中,最好把它们作为单独的操作来用。,1.7.3,表达式求解中的数据类型转换,在C+中,进行运算前有时需要对操作数进行,类型转换,,特别是对一些双目运算符,当两个操作数类型不同时,往往要把它们转换成相同类型,操作结果的类型一般与转换后的操作数类型相同。,C+的类型转换方式有两种:,自动类型转换(隐式转换),:由编译程序按照某种预定的规则进行自动转换。,强制类型转换(显式转换),:由写程序的人在程序中用类型转换操作符明确地指出转换。,不管是隐式转换还是显式转换,都不会改变被转换的操作数,,转换得到的结果将存储在临时的存储单元中,。,具体规则:,(1),字符,可以作为,整数,参与数值运算,,整数值为其ASCII码,。,(2)操作数为bool、字符或短整型时,系统自动变换成,整型,。,(3)其余情况,当两操作数类型不同时,将精度低(或表示范围小)的操作数的数据类型变换到与另一操作数类型相同再进行运算,bool,short,int unsigned long unsigned long float double long double,char,低 高,1.,自动类型转换,(4)当赋值号的左值和右值的类型不一致但类型相容时,赋值号右边的类型转换为左边的类型。转换规则如下:,实型数赋给整型变量,取整。超过整型变量的取值范围,溢出。,整数赋给实型变量,将整数转换成实数再赋值。,字符数据赋给整型变量,将字符转换为整型。,无符号字符数据,整型变量的低位字节不变,高位字节补0;,有符号字符数据,若符号位为0,高位字节补0,若符号位为1,则整型变量的低位字节不变,高位字节全部置1。,无符号整型或长整型数赋给整型变量,若数据在整型的取值范围内,则无需转换,且结果正确;但若超出取值范围,则发生溢出,赋值结果错误。,该规则适用于所有将数值范围较大的数赋给数值范围较小的数的情况。,1.,自动类型转换,例如:设有以下定义,double x=2.3,y;int i=2,j;,(1)j,2.3,x,2.3,2,2,(1)j=x;(2)y=i;,由,系统,按,左值,j、y,类型,自动,完成转换功能,(2)y,2,i,2,2.0,2.0,1.,自动类型转换,2.,强制类型转换,强制类型转换运算符格式为:,(type)表达式,/形式一,或,type(表达式),/形式二,作用:将表达式强制转换为type类型,,但表达式的值及其类型不变。,设有变量说明:,int a=7,b=5;float x;,表达式,x=a/b,的值将为,1,。,如果希望表达式求出这两个整数相除的实数商1.4赋给x,就需要将两个操作数或其中一个操作数进行强制类型转换。可表示为:,x=(float)a/(float)b 或 x=(float)a/b 或,x=a/(float)b,说明:,(1)强制类型转换不改变表达式本身的值类型,而是产生一个临时变量,用来暂存转换后的值,该临时变量引用后即自动释放。,(2)强制类型转换符优先级较高,只对紧随其后的表达式起作用,而对其他部分不起作用。,(3)以上是C风格的强制类型转换,在标准C+中,提供了四个类型转换关键字:static_cast、const_cast、dynamic_cast、reinterpret_cast。形式为:static_cast(表达式)等,语法上更严谨,。,2.,强制类型转换,1.7.4 语句,1 说明语句(定义和声明),2 表达式语句:,表达式;,3 空语句:,;,4 复合语句:,/若干语句,流程控制语句,(,用来控制或改变程序的执行方向),1.8,数据的输入输出,1.8.1,C+,输入输出简介,1.8.2,数据的输入输出,1.8.3,C,输入输出简介,C/C+语言本身并不带输入和输出(即I/O)功能,而是提供了输入输出库,也称为I/O库。,大多数C程序使用标准I/O库,该库也能够在C+中使用,相关头文件为stdio.h。,在C+程序中,一种称为iostream(I/O 流库)的I/O库用得更多。在C+中,I/O使用了流的概念。每一个I/O 设备传送和接收一系列的字节,称之为流。输入操作可以看成是字节从一个设备流入内存,而输出操作可以看成是字节从内存流出到一个设备。流可以看成是输入输出设备的另一个名字(一个文件、显示器、键盘等)。,1.8.1,C+,输入输出简介,要使用C+标准的I/O流库的功能,需要包括两个头文件:iostream和iomanip,形式如下:,#include,#include,using namespace std;,iostream文件提供基本的输入输出功能,iomanip文件提供格式化的功能程序,如果不需要格式化输入输出,可以不需要该文件。通过包含iostream流库,内存中就创建了一些用于处理输入和输出操作的对象。标准的输入流对象(通常是键盘)为cin,标准的输出流对象(通常是显示器)为cout。,1.8.1,C+,输入输出简介,cin用来在程序执行期间给一个变量或多个变量输入数据,一般格式为:,cin变量名1变量名2,变量名n;,其中,,“,”,称为提取运算符,程序执行到这条语句时便暂停下来,等待用户从键盘上输入相应数据,直到所列出的所有变量均获得值后,程序才继续执行。例如:,int a;double b;,cinab;/从键盘输入一个整数和实数,/数据之间用空格符、制表符或Enter键间隔。,1.8.1,C+,输入输出简介,cout实现将数据输出到显示器,一般格式为:,cout表达式l表达式2,表达式 n;,其中,,“,”,称为插入运算符,它将紧跟其后的表达式的值输出到显示器光标位置处。例如:,int d=5;,cout d;/输出d的值5 cout d endl;/输出d的值5并换行cout,“,This is the value of d:,”,d endl;,/先输出字符串,再输出d的值5,最后换行(换行也可以使用,n,),1.8.1,C+,输入输出简介,1.8.2,数据的输入/输出,1字符的输入/输出,用cin为字符变量输入数据时,输入的各字符之间可以间隔开,也可以无间隔,系统会自动跳过输入行中的间隔符。,从键盘输入数据的个数、顺序、类型必须与cin中所列的变量,对应,否则将造成输入数据错误,同时影响后面数据的提取,而且很多情况下程序并不给出错误提示。,1.8.2,数据的输入/输出,如果希望将键盘上输入的所有字符(包括间隔符)都作为输入字符赋给字符变量,则必须使用函数cin.get()。cin.get()函数一次只能提取一个字符,其格式为:,cin.get(字符变量);,例如:,char c1,c2,c3,c4;,cin.get(c1);,cin.get(c2);,cin.get(c3);,cin.get(c4);,程序执行过程中若输入:,A b,/Ab间有空格,C,则字符,A,、,空格,、,b,、Enter键将分别赋给变量c1、c2、c3、c4;输入缓冲区中保留字符,C,和Enter键。,1.8.2,数据的输入/输出,2非十进制整型数据的输入/输出,#include /包含头文件,using namespace std;/使用名字空间,int main(),int a,b,c,d,e;,coutInput a(dec),b(oct),c(hex),d(hex),e(dec):,a;,/输入为十进制数,cin oct b;,/输入为八进制数,cin hex c;,/输入为十六进制数,cin d;,/输入仍为十六进制数,cin dec e;,/输入为十进制数,couthex:a=hex aendl;,/十六进制形式输出a的值,coutdec:b=dec bendl;,/十进制形式输出b的值,coutdec:c=c endl;,/十进制形式输出c的值,coutoct:d=octdendl;,/八进制形式输出d的值,coutoct:e=eendl;,/八进制形式输出e的值,cout dec endl;,/恢复十进制输出形式,return 0;,执行时输出:,Input a(dec),b(oct),c(hex),d(hex),e(dec):,此时从键盘输入:,18 23 4E 5D 67,则输出结果为:,hex:a=12,dec:b=19,dec:c=78,oct:d=135,oct:e=103,注意:使用不带.h的头文件时,必须在cin语句中指明数制,否则从键盘输入时,不认八进制和十六进制数开头的0和0 x标志。指明后可省略0和0 x标志。在cin和cout中指明数制后,将一直有效,直到重新指明其他数制为止。,1.8.2,数据的输入/输出,3.设置输出数据项的宽度,为了使数据间隔开,还可以用C+提供的函数setw()指定输出数据项的宽度。,#include,#include,using namespace std;,int main(),int a=2;,float x=1.5;,cout*endl;,coutsetw(4)asetw(8)xendl;,coutsetw(4)*endl;,coutsetw(2)xsetw(5)aendl;coutsetw(14)*y)输出x,else 输出y,x,7,y,12,CPU,比较,显示结果:12,流程图,P,A,B,Y,N,演示算法执行过程,2.1.3,算法描述的,3,种基本结构,3,循环结构,流程图,P,A,Y,N,【例2-3】求100个整数的和。,演示算法执行过程,count,0,sum,0,累加和的初值,while(count100),x,输入一个整数,sum,sum+x count,count+1,输出sum,重复100次,结构化程序设计,结构化程序设计(,Structured Programming,,简称,SP,)是指,“,按照一组能够提高程序易读性与易维护性的规则进行程序设计的方法,”,SP不仅要求所编出的,程序结构良好,,而且还要求,程序设计过程,也是结构良好的,后者是前者的基础。,对程序设计过程而言,,“,结构良好,”,是指,采用分解和抽象的方法来完成程序设计任务,,具体体现为:,“,自顶向下、逐步精化,”,的程序设计过程。,对程序而言,,“,结构良好,”,是指:,每个程序单位应具有,单入口、单出口,的性质。,不包含不会停止执行的语句,程序在有限时间内结束。,程序中没有无用语句,程序中所有语句都有被执行的机会。,通常可用三种基本结构来实现。,2.2,分支结构,分支结构的流程控制语句,2.2.1,if语句,2.2.2,if语句的嵌套,2.2.3,switch语句,2.2.1,if,语句,if语句基本格式:,1、,if(表达式)语句1;,2、,if(表达式)语句1;,else语句2;,语句,条件,真,假,语句2,语句1,条件,真,假,if,语句,【例2-4】输入一个年份,判断是否闰年。,算法分析,:,假定年份为year,闰年的条件是:,year%4=0&year%100!=0|year%400=0。,#include,using namespace std;,int,main(),int,year;,cout输入年份:year;,if,(year%4=0&year%100!=0|year%400=0),coutyear年是闰年endl;,else,cout year年不是闰年endl;,return,0;,分析:读入三个数,先求出两个数中较大者,再将该大数与第三个数比较,求出最大数。,#include,using namespace std;,int main(),int a,b,c,max;,cout 请输入三个整数:a b c;,if(a b),max=a;,else,max=b;,if(c max)max=c;,cout 最大者为:max 0)y=1;,if(x=0)y=0;,if(x=0),if(x 0)y=1;/嵌套的if形式,else y=0;,else y=-1;,if语句的嵌套形式:,为了改进程序的可读性,也
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服