已阅读5页,还剩99页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章C+的基础知识,程序设计语言是人类在计算机上解决实际问题的一种工具。当一个求解问题能够用数学模型表达时,人们会考虑用某种程序设计语言将该问题的数学模型表示成计算机可以接受的程序形式,再由计算机自动处理这个程序,生成人们所需要的结果。,1.1程序设计语言的基本概念,1.面向过程的结构化程序设计语言2.面向对象的程序设计语言有两类:一类是完全面向对象的语言,另一类是兼顾面向过程和面向对象的混合式语言。C+语言就是后一种形式的典型代表。,1.2C+程序的基本结构,1.2.1C+程序结构一般来说,C+程序的结构包含声明区、函数区两个部分,在任何一个区内都可以随时插入程序的注释。,【例1.1】从键盘输入圆的半径,求圆的面积。程序代码如下:/*ex1_1.cpp*#include#definePI3.14159floatsum(floatx);voidmain()floatr,s;coutr;s=sum(r);coutr=rs=sendl;floatsum(floatx)returnPI*x*x;,1声明区声明区在函数之外。程序的声明区可能需要编写:(1)包含文件,如例1.1中的#include;(2)宏定义,如例1.1中的#definePI3.14159;(3)函数声明,如例1.1中的floatsum(floatx);(4)条件编译;(5)全局变量声明;(6)结构体等的定义;(7)类的定义。,2函数区一个程序由一个主函数main()和多个(可以是0个)其他函数组成。每个函数都是由函数声明部分与函数体部分组成。程序的执行从main()函数开始。函数声明部分包括函数返回值类型、函数名、函数的形式参数。函数体部分是用一对花括号括起来的完成该函数所表达的功能的语句的集合。语句可以是数据描述语句或数据操作语句。,任何一种程序设计语言可用下面的模型描述:,一种程序设计语言的模型与人类的自然语言模型是一致的,都遵守这种模型。读者可以借鉴人类自然语言的学习方法来学习某种程序设计语言。,1.2.2C+程序的书写格式C+程序的书写格式比较灵活,书写程序时可以任意换行,一行内可以书写多条语句,一条语句可以书写在多行上,只要每条语句以分号(;)结束即可。也因为如此,所以C+程序可读性差,为了提高程序的可读性,C+程序的书写格式有如下约定:(1)C+程序中,每行一般书写一条语句;语句较短时,多条语句可书写在一行内。语句较长时,一条语句可写在多行上。,(2)C+程序中,每条语句以分号结束,表示一条语句的结束,但函数说明行和声明区的多数语句后不用分号。语句前面没有标号,只有goto语句的转向目标语句前加标号。(3)C+程序中,使用向右缩进方法表达程序中的层次结构,如花括号内的函数体、循环语句的循环体、if语句的if体和else体一般都向右缩进几个字符。花括号是函数体或复合语句的定界符。(4)C+程序中,可使用多行注释或单行注释以增强程序的可读性。多行注释以“/*”开始,以“*/”结束,占据多行。单行注释以“/”开始,占据一行。,1.3一个应用程序的开发过程,1.3.1VisualC+6.0开发环境采用VisualC+6.0开发环境;这是一个集编辑、编译、链接、调试运行于一体的集成环境,即在一个程序的控制下可以分步或一次性地完成编辑、编译、链接、调试运行工作。,1.3.2一个应用程序的开发过程,1启动VisualC+6.0开发环境,2创建工程项目,3打开项目文件,4创建C+源程序文件并添加到项目文件中,5编译、链接与运行程序,在上页图中单击“Compile”按钮进行编译,单击“Build”按钮进行编译与链接(在没有编译的情况下),单击“ExecuteProgram”按钮进行编译、链接和运行(在没有编译、链接的情况下)。,例1.1程序所建立的项目的运行结果如下:Inputr:10r=10s=314.159,1.4C+的词法规则,一个程序包含两个方面的主要内容:数据描述和数据操作。数据是操作的对象,数据的存储方式决定于该数据的数据类型,描述数据就是定义数据的类型。数据类型的定义表现在常量、变量等的定义之中,而常量、变量又是一种程序设计语言的基本单词。除了常量、变量之外,一种程序设计语言还有标识符、运算符、关键字、分隔符等基本单词,这些单词的构成(书写规则)都必须遵守该语言的词法规则。,本节介绍的就是C+中各种单词的构词规则。请读者结合前面的语言模型图学习本节内容并思考本节内容属于语言模型图的哪个环节。由一种语言提供的字符集中的字符构造的单词必须遵守该语言的词法规则。在一种语言中,单词涉及标识符、关键字、运算符、常量、变量、注释符、分隔符等。C+也不例外。本节只讨论C+中的基本词法规则。,1.4.1C+的字符集组成,C+的字符集包括如下字符:(1)26个小写字母:az。(2)26个大写字母:AZ。(3)10个数字:09。(4)标点和特殊字符:+-*/,:;?”|!#%),主要用于for语句的for关键字后的圆括号内,作分隔符;冒号(:),用来标识语句标号和开关语句,常用于switch的case关键字后。,1.5C+基本数据类型,表1-2C+基本数据类型,数据类型,字节数,数据表达范围,1.6常量与变量,常量与变量是C+中最基本的数据描述形式。本节只介绍常量和变量的基本概念,包括4种常量和基本数据类型的变量。关于构造类型的变量将在后续章节中介绍。1.6.1常量常量是在程序中不改变的量。C+程序中有4种常量:整型常量、浮点型常量、字符常量和字符串常量。,1整型常量C+程序中,整型常量和浮点常量统称数值常量。整型常量有三种形式:十进制、八进制和十六进制。十进制常量的写法就是算术表达方式,如12、345都是合法的十进制常量。八进制常量在数值前要加上一个零(0),如011、077都是合法的八进制常量。十六进制常量的写法是在数值前加上一个零(0)和一个字母X(大小写均可),如0X11、0 xF都是合法的十六进制常量,分别等于十进制数17和15。,2浮点型常量浮点型常量又称实数型常量。分为十进制数形式和指数形式两种表示方法。(1)十进制数形式的浮点型常量的书写格式:.其中小数点不能省略。如1.2345、1.0、1.、.12345均是合法的浮点型常量。,(2)指数形式的浮点型常量的书写格式:.E其中,指数形式表示符“E”大小写均可。.部分允许不含小数点的,或含小数点的,必须是整数。如12E-3、0.1E2、.12345E6、0E0等均是合法的。,【例1.2】浮点型常量的运用。程序代码如下:/*ex1_2.cpp*#include#includevoidmain()floata,b,c;a=12.34567;b=.11183155;c=12.e2;couta=setprecision(7)a;coutta=setiosflags(ios:scientific)aendl;coutb=b;couttc=cendl;,程序的运行结果如下:a=12.3457a=1.234567e+001b=1.118316-001c=1.200000e+003,3字符常量字符常量是一个用单引号括起来的字符。单引号是字符常量的定界符,单引号本身表示成。在C+中,字符常量具有整数值,其值是该字符的ASCII码。一个字符常量可以与整数进行加减运算。下面的程序给出了字符与整数进行加减运算的实例。,【例1.3】字符常量的运用。程序代码如下:/*ex1_3.cpp*#include#includevoidmain()chara,b,c,d;a=A;b=B;c=a+3;d=;coutatbtcendl;couthexint(a)tint(b)tint(c)endl;coutds2;couts1ts2s2;couts1ts2s2;couts1ts2endl;chars110,s210;,4变量的值变量的值是变量三要素之一。可以在定义变量时对变量赋初值(变量初始化),也可以在引用变量时通过其他方法(赋值表达式、cin、scanf函数等)对变量赋值。变量初始化格式:=,=,;,如果外部类和静态类变量不进行初始化,那么它们由编译程序赋以“零值”(数值型变量赋数值0,字符型变量赋空字符)。如果自动类和寄存器类变量不进行初始化,那么它们不具有有意义的值,必须通过赋值后才能引用。外部类和静态类变量初始化是在编译时给定的。即在第一次执行定义或说明时给定,以后进入所定义的函数体或分程序不再赋初值。而自动类和寄存器类变量的初始化是在每次进入函数体或分程序时重新定义初值。,可见,变量有定义和引用两个方面。变量的定义涉及变量名称、存储类和数据类型。引用即使用,通常先定义,后使用。例1.6是特例,但在使用前必须说明。引用一个变量,其值是否有意义是一个重要的问题。如在一个函数内定义内部静态存储类的变量,离开这个函数后,虽然变量仍然存在,但它的值可能无效了,所以不能引用。下面是一些合法的定义:inta=1,b=2,c=3;staticcharxyz=A,buffer10=Hello;doublea5=1.12345,2.23456,3.34567,4.45678,5.56789floats=1+2+3;,关于在引用变量时通过赋值表达式、cin、scanf函数等方式对变量赋值,在前面的实例中已大量使用。值得一提的是赋值表达式,在下面的程序段中:inta;a=12;“a=12”是一个赋值表达式。C+允许表达式当作语句使用,其后要加分号,所以“a=12;”是赋值表达式语句。“a=12”这个表达式有双重意义:表达式“a=12”具有12的值,另外表达式“a=12”的副作用使变量a具有12的值。给变量赋值正是利用了这种副作用。这是C+与其他高级程序设计语言不同的地方,其他语言称“a=12”是赋值语句。,1.7运算符与表达式,C+的表达式包括算术表达式、关系表达式、逻辑表达式、赋值表达式、条件表达式和逗号表达式。C+的类型转换包含隐含转换和强制转换两种方法。任何表达式后加“;”构成表达式语句。1.7.1算术运算符与算术表达式1算术运算符算术运算符有:(1)单目运算符:-(取负)、+(增1)、-(减1)。(2)双目运算符:+(加)、-(减)、*(乘)、/(除)、%(取余)。,单目运算符的优先级高于双目运算符的优先级,双目运算符中的*、/、%的优先级高于+、-的优先级。+(增1)运算可写在变量前或变量后,分别称作前缀运算和后缀运算。如果定义一个变量i,前缀运算记为:+i,后缀运算记为:i+。这样形成了前缀运算表达式+i和后缀运算表达式i+,在C+中,两个表达式都对变量i进行增1运算,这是此两类表达式的副作用。但把两个表达式分别赋给变量a和b时,则a和b取不同的结果(见例1.7和例1.8)。,【例1.7】前缀运算表达式的运用。程序代码如下:/*ex1_7.cpp*#includevoidmain()inti=0;inta;a=+i;couta=ai=iendl;程序的运行结果如下:a=1i=1,【例1.8】后缀运算表达式的运用。程序代码如下:/*ex1_8.cpp*#includevoidmain()inti=0;intb;b=i+;coutb=bi=iendl;程序的运行结果如下:b=0i=1,取余运算只能用于两个整型数的运算。功能是求两个整型数相除的余数。用下面的公式:余数=被除数-商除数注意:5%-3=2,而-5%3=-2。【例1.9】取余运算。程序代码如下:/*ex1_9.cpp*#includevoidmain()inta,b;a=5%-3;b=-5%3;couta=atb=b0时,表达式“x+yx”是永真的。但在用计算机语言判断关系表达式“x+yx”时,可能会得出不真的结论。这种情况往往出现在x和y两个数差别很大,一个很大,另一个则小到了语言表达精度以下,以致这个很小的数对相加结果不产生影响。,【例1.10】关系表达式的运用。程序代码如下:/*ex1_10.cpp*#include#defineEPS1.0E-16voidmain()doublea,b;intc;a=5.0;b=EPS;c=a+ba;couta=atb=btc=c:右移位运算符或:,右移位操作是将操作数化成二进制数,将操作数右移指定位数,移出的二进制位丢弃,左边补0或符号位(根据编译决定)。左移位操作是将操作数化成二进制数,将操作数左移指定位数,移出的二进制位丢弃,右边补0。,【例1.12】逻辑位运算和移位运算。程序代码如下:/*ex1_12.cpp*#includevoidmain()inta,b;a=7;b=2;cout2=2)2=2)2=1a2=3,1.7.5赋值运算符与赋值表达式1赋值运算符赋值运算符有11种,均为双目运算符,优先级仅高于逗号运算符,结合性是从右至左。11种赋值运算符中有1个基本赋值运算符,10个复合赋值运算符,分别为:(1)=:基本赋值运算符(2)+=:加赋值运算符(3)-=:减赋值运算符,(4)*=:乘赋值运算符(5)/=:除赋值运算符(6)%=:取余赋值运算符(7)”,即:=;,赋值表达式执行的结果使赋值表达式本身具有一个值,就是赋值运算符(=)右边表达式的值。还有一个副作用:使赋值运算符(=)左边的变量具有右边表达式的值。前面的所有实例中出现的赋值表达式正是利用这种副作用对变量赋值。可以通过下面的实例理解赋值表达式具有值这一概念。,【例1.13】赋值表达式的值及其副作用。程序代码如下:/*ex1_13.cpp*#includevoidmain()inta=1;couta=aendl;cout(a=2)=(a=2)endl;couta=a=等价于=复合赋值表达式比基本赋值表达式书写简单、编译时生成的目标代码少,因而运行效率高。,使用赋值表达式应注意以下问题:(1)可以使用赋值表达式连续赋值。例如:inta,b,c;a=b=c=1;表达式a=b=c=1使3个变量均拥有值1。由于赋值运算符的结合性是从右至左,所以变量c和表达式c=1先拥有值1,然后变量b和表达式b=c=1拥有值1,最后才是变量a和表达式a=b=c=1拥有值1。,(2)使用赋值表达式多用来改变变量的值,赋值表达式本身的值用得少。在赋值表达式中,赋值运算符左边的变量称左值,右边的表达式称右值。计算时,先计算右值,再转换其类型为与左值相同的类型,将右值赋给左值,同时赋值表达式具有右值的值。右值类型转换过程是自动完成的,但转换时有数据精度损失。,1.7.6三目运算符与三目条件表达式在C+中只有一个三目运算符?:,三目条件表达式格式如下:?:先计算,当非0时,三目条件表达式取的值,否则取的值。三目条件表达式的功能可以解释成一个简单的条件语句(参见第2章)。三目运算符?:的结合性是从右至左。,【例1.14】三目条件表达式的运用。程序代码如下:/*ex1_14.cpp*#includevoidmain()inta=1,b=2,c=3;coutb?b-:+a=b?b-:+a)b?+a:+b=b?+a:+b)b?a:bc?b:c=b?a:bc?b:c)b?a:bc?b:c=6,程序中有4个cout语句,第1个cout语句输出三目条件表达式的值,显然是1。在第2个cout语句中,三目条件表达式的值取+a的值,结果是2。因为ab为0,b-并没有执行,故b的值仍然是2。第2个cout语句已修改了变量a的值,使a=2。在第3个cout语句中,由于三目运算符的优先级高于赋值运算符,所以先计算三目条件表达式ab?+a:+b,由于ab为0,所以三目条件表达式取+b的值,结果是3;再计算赋值表达式c+=3,结果是6。此行cout语句修改了b、c两变量的值,使b=3、c=6。在第4个cout语句中,由于三目运算符是从右结合的,所以先计算bc?b:c,结果为6;再计算ab?a:6,结果为6。,1.7.7逗号运算符与逗号表达式逗号在C+中可以作为分隔符或运算符。逗号运算符为双目运算符,它的优先级最低,结合性是从左至右。逗号运算符用来连接两个或两个以上的表达式,形成逗号表达式。计算逗号表达式时,从左至右依次计算各个表达式,逗号表达式的值取最后一个表达式的值。多用在for循环语句的for关键字后的圆括号内,圆括号内由分号分隔的表达式可以是逗号表达式。注意例1.15中倒数第二行的输出结果。,【例1.15】逗号表达式的运用。程序代码如下:/*ex1_15.cpp*#includevoidmain()inta=1,b=2,c=3;couta=atb=btc=cendl;c=(a=10,b=a*2,b*2);couta=atb=btc=cendl;couta,b,c,c*3=(a,b,c,c*3)2;y=x-(-1);coutx=xty=yendl;z=xy?x-y?x:y:x*y;coutsizeof(int)=sizeof(int)tsizeof(z)=sizeof(z)endl;coutx=xty=ytz=z2;的计算顺序是:第一步先计算单目运算,单目运算有两个:!和-,按从右至左的结合性,先计算-5,再计算!(-5),结果为0;第二步计算算术运算0+31;第三步计算右移运算,结果为7,即x=7。语句y=x-(-1);中间有三个-,前两个是减1单目运算,后一个是算术减运算。计算顺序是:第一步计算x-,使x=6,这是减1表达式的副作用,并不计算在y=x-(-1);语句中,所以语句y=x-(-1);变为y=7-(-1),结果使y=8。这时要注意x的值因为副作用发生了变化,即x=6。所以在第一条cout语句输出时x=6、y=8。,语句z=xy?x-y?x:y:x*y;中有单目运算,先计算之,-y的结果表明为7,故语句变成z=xy?x7?x:y:x*y;,语句中有两个三目表达式,三目表达式中的“?”和“:”分别相当于前圆括号“(”和后圆括号“)”,成对出现。按从右至左的结合性,先找最右边的“?”,再找与之最近匹配的“:”,得其表达式为:x7?x:y,结果取x的值6。从而整个语句变成z=xy?6:x*y;,所以z=6。在这条语句中,x的值没改变,y的值变为7,故在第三条cout语句输出时x=6、y=7、z=6。,1.7.10类型转换C+的数据类型转换灵活,表现在它的许多数据类型之间具有自动(隐含)转换功能,当然也可以使用强制类型转换功能。(1)隐含自动转换,从低类型向高类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年蚌埠市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)完整参考答案详解
- 2026年周口市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(考试直接用)
- 省属虚拟市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解
- 楚雄州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(突破训练)
- 昌吉州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(夺分金卷)
- 开县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解1套
- 台州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(必刷)
- 莱芜市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及一套参考答案详解
- 开封市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(夺冠系列)
- 广东省农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解ab卷
- 极地冰盖环境下履带机器人控制系统设计研究
- 乳管内乳头状瘤护理讲课件
- 2024年中国渗透汽化膜行业市场调查报告
- 保洁人事管理制度
- 水利工程合同管理制度
- 《环境健康安全管理体系概览》课件
- 肝硬化护理一病一品
- 写字楼突发事件处理培训
- 2025-2030中国石蜡产品行业市场现状分析及竞争格局与投资发展研究报告
- 新能源汽车驱动电机及控制技术 课件 项目5 驱动电机冷却系统原理与检测
- 高血压危象应急预案
评论
0/150
提交评论