已阅读5页,还剩90页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+程序设计,计算机语言的基本体系结构,语言的基本体系结构,程序设计语言,本章将简要介绍C+中的数据类型及相关运算,以及常量、变量、表达式、语句等,最后介绍简单的输入输出方法。,第一章C+基础知识,第一章C+基础知识,1.3C+的词法单位,1.6运算符和表达式,1.8简单的输入输出,1.7数组与字符数组,1.5常量和变量,1.4C+中的数据类型,ok,1.1C+语言概述,1.2一个C+程序实例,1.1C语言概述,历史:C+是由C语言为基础发展起来的。C语言是作为UNIX操作系统的开发语言为人们所认识。七十年代末,C语言开始移植到非UNIX环境中,并逐步脱离UNIX系统成为一种独立的程序设计语言。1988年美国国家标准协会ANSI对C语言进行了标准化,产生了ANSIC。,1.1C语言概述,(1)C语言既具备高级语言的结构和编程环境,又提供类似于汇编语言那样的系统资源操纵能力及程序执行效率。适合解决有实时要求的问题。,C语言的主要特点:,(2)有丰富的运算符和数据类型,表达式类型多样化,可以方便地实现在其他语言中较难实现的运算,对各种不同类型的程序设计都有良好的适应性。,(3)以函数为基础实现程序的结构化设计,支持大型程序的多文件构成及单个文件独立编译,适合大型复杂程序的设计。,(4)语言简洁、紧凑,使用方便、灵活。,(5)可移植性好。,1.1C语言概述,C+是由C发展成为的以面向对象为主要特征的语言。作为C语言的超集,C+继承了C的所有优点,又对数据类型做了扩充,使得编译系统可以检查出更多类型错误。,C+支持面向对象程序设计,通过类和对象的概念把数据和对数据的操作封装在一起,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。,C+语言的主要特点:,1.1C语言概述,C+与C完全兼容,很多用C编写的库函数和应用程序都可以为C+所用。,但正是由于与C兼容,使得C+不是纯正的面向对象的语言,它既支持面向对象程序设计,也支持面向过程设计。但我们应当注意用面向对象的思想进行设计,以发挥出C+的优势。,C+语言的兼容性:,1.2一个C+程序实例,#includeintmax(inti,intj)/Aif(i=j)returni;elsereturnj;intmain(void)/Bcoutij;/从键盘上输入变量值coutmaxnumberis:max(i,j)(c+d),结果为0或1*/y=ab/*计算ab的值0或1赋给y,y的值为0或1*/abc/*等同于(ab)c,先求ab的值,再将结果0或1与c比较大小*/,由关系运算符连接的表达式。值为true或false。,ok,4.逻辑运算、逻辑表达式及其求值优化,设有定义floata=3.2;intb=5;则:3ab/结果是?,根据右结合原则其运算过程如下:,a,5,b,3.2,3,F,即0,F即0,逻辑运算符:,包括:!、floatx=1.8,y=2.4;,ay|ay)|(a(b-(!c),t1=1,t2=0,t4=0,-,求:a”(4)按位与运算符“sizeof(x)值为8,1.6.3语句,1表达式语句:表达式;2空语句:;3复合语句:/若干语句流程控制语句:流程控制语句用来控制或改变程序的执行方向;,1.6.3结束,1.6.4算术类型转换和赋值类型转换(选读),1混合运算的类型转换规则,2赋值类型转换,ok,运算过程中,当某个二元运算符两边的操作数类型不同但属于类型相容时,系统先将精度低的操作数变换到与另一操作数精度相同,而后再进行运算。,类型相容:类型不同但系统可以自动进行转换。,当赋值号的左值和右值类型不一致但属于类型相容时,由系统自动进行类型转换。,3强制类型转换,1.混合运算的类型转换规则,数据类型转换方向,ok,具体规则:(1)字符可以作为整数参与数值运算,整数值为其ASCII码。(2)操作数为字符或短整型时,系统自动变换成整型。(3)操作数为实型时,系统自动变换成双精度型。(4)其余情况,当两操作数类型不同时,将精度低(或表示范围小)的操作数的数据类型变换到与另一操作数类型相同再进行运算,例:charc1,c2;inti1,i2;floatx1,x2;则表达式x2=c1*i1+c1*x1+c1*c2的求值过程为:将c1转换成整型,完成c1*i1,结果表示为t1;将c1和x1均转换成双精度型,完成c1*x1,结果表示为t2;将c1和c2均转换成整型,完成c1*c2,结果表示为t3;然后t1转换成双精度型,完成t1+t2,结果表示为t4;将t3转换成双精度型,完成t4+t3,最后结果转为单精度型赋给x2。,2.赋值类型转换,2.5.3结束,系统自动进行类型转换规则:1、实型数赋给整型变量:取整;注意溢出;2、整型数赋给实型变量:先转换为实型数;3、字符型数赋给整型变量:ASCII码为依据;分为两种情况:符号位是0或1时不同;若符号位为1,则低位字节不变,高位字节全部置1再赋值。4、绝对值较大的数赋给表达范围较小的数据类型时,注意溢出;,赋值运算中,当左值与右值类型不一致时,系统将按照左值的类型,自动进行强制转换。,例如:设有以下定义doublex=2.3,y;inti=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,3强制类型转换,ok,强制类型转换运算符格式为:(type)表达式/形式一或type(表达式)/形式二,作用:将表达式强制转换为type类型,但表达式的值及其类型不变。,设有变量说明:inta=7,b=5;floatx;表达式x=a/b的值将为1.0。如果希望表达式求出这两个整数相除的实数商1.4赋给x,就需要将两个操作数或其中一个操作数进行强制类型转换。可表示为:x=(float)a/(float)b或x=(float)a/b,说明:(1)强制类型转换不改变表达式本身的值类型,而是产生一个临时变量,用来暂存转换后的值,该临时变量引用后即自动释放。如上例,执行强制类型转换后变量a和b的值及类型都不变,而是各自产生一个临时变量,用这两个临时变量的值进行运算。(2)强制类型转换符优先级较高,只对紧随其后的表达式起作用,而对其他部分不起作用。如表达式(float)a/b的含义是先将变量a强制转换为浮点数,然后与整数b运算。新的C+标准中,强制类型转换采用static_cast,const_cast,dynamic_cast,reinterpret_cast等4个关键字,形式为static_cast,语法上更加严谨。,1.6.5求值次序与副作用(选读),ok,在符合优先级和结合性的前提下,C语言的标准对表达式中各操作数的求值次序没有做统一规定。,编译器为提高代码质量,在不影响优先级和结合性的前提下也要对操作数的访问次序作调整。在安排顺序时,如果某个操作数经历了求值运算,那么这个求值可能影响到其他操作数的值,这时就会产生副作用。例如,设有inta=2,b=5,c;对表达式c=a*b+(+a)+(b=10)三个同级运算中,是先算a*b,还是+a,还是b=10,其次再算哪个?显然求值次序不同将导致结果不同。,1.7数组与字符数组,1.7.1数组,1.7.2字符数组,本节介绍一种用户自定义的导出数据类型数组类型,ok,1.7.1数组,数组定义:数组是有限个同类型元素的有序集合,这些元素有一个共同的名字,每个元素以其在数组中的位置区分,位置用下标表示。例如数列或向量就可以看作一个数组,其中的元素用一个下标即可确定。矩阵也可看作一个数组,其中的元素需要用“行”、“列”两个下标确定。数组下标的个数称作维数,上述代表数列的数组和代表矩阵的数组分别称为一维数组和二维数组。本节只介绍一维数组。,ok,一维数组,一维数组的定义格式:存储类型数据类型数组名常量;数据类型指的是数组中元素的数据类型,可以是C+中定义的任何一种数据类型。写在方括号中的常量用来定义数组大小,即数组中元素的个数。例如:intm5;/定义数组m,其中有5个整数constintN=3;floatxN;/数组x中有3个实数,ok,一维数组,数组的存储:数组在存储单元中是按下标的顺序连续存放的,数组名代表数组存储区域的首地址。数组的元素:标识方法是用数组名和下标:数组名表达式表达式用来计算下标值。C+中规定数组第一个元素的下标为0。,ok,一维数组,注意:C+中数组大小在编译时确定,编译系统按照定义为数组分配一段连续的存储单元,这段单元的大小也是不能改变的,因此数组大小不能用变量定义,而只能是一个正整数常量。为避免使用时数组出界,通常“大开小用”。下列定义是非法的:intcount;floatscount;/数组个数不能是变量,且必/须在定义时指明;constfloatNum=3;intnNum;/数组个数不能是实数;对数组的访问指的是对数组元素的访问,不能直接将数组名作为访问对象,对数组赋值也必须对每一个元素逐个赋值。,ok,一维数组,数组的初始化数组初始化的方法是在定义时用大括号列出元素的值。例如:intscore5=88,92,90,85,78;初始化值的个数可以少于定义的元素个数,这时从第0个元素开始逐个取得初始化值,其余的元素初始化为0。例如:floaty5=3.4,4.2,7;/5个元素的取值分别为/3.4,4.2,7,0,0对于定义时初始化的情况,可以不指明元素个数,编译器会按照初始化值的个数确定数组大小。例如:intn=1,2,3,4;/数组n有4个元素intnn;/非法定义,必须指明数组元素个数,ok,一维数组,1,1,2,3,1,输出,2.4.1结束,1,2,3,1+2=3,【例1.2】使用数组的简单例子。#includevoidmain()intint_arr4;int_arr0=1;int_arr1=1;int_arr2=2;int_arr3=int_arr1+int_arr2;coutint_arr0nint_arr1nint_arr2nint_arr3n;,1.7.2字符数组,字符数组定义:如果数组中的元素为字符,就称为字符数组。例如:charstring110;/可用来保存10个字符的字符数组;charcity_name1=N,a,n,j,i,n,g;/可用来保存7个字符的字符数组;字符串与字符数组:C+中用字符数组保存字符串。允许直接用字符串常量给字符数组初始化。例如:charcity_name2=”Nanjing”;用字符串初始化,字符数组会自动加上一个串结束符0。串结束符在字符串操作中具有十分重要的意义,因此在定义字符数组大小时,要注意留出足够的空间保存串结束符。,ok,1.7.2字符数组,字符串处理函数:字符串处理函数定义在头文件中,其中包括:strlen(s)/返回字符串s的实际长度(不包括0)strcpy(s1,s2)/将字符串s2中0之前的所有字符/依次赋值到字符串s1中,最后再加上一个0。由于不能直接对字符数组名赋值,所以将一个字符串的值赋给另一个字符串必须用字符串复制函数完成。例如:charstring220;string2=”VC+”;/非法strcpy(string2,”VC+”);/合法,1.7.2字符数组,【例1.3】字符数组和字符串处理函数的应用。#include#includeusingnamespacestd;intmain()chars1=HelloC+;/初始化决定数组s1有10个元素chars210,s320;s20=B;s21=e;s22=g;s23=i;s24=n;s25=0;/对字符串结束处理非常重要strcpy(s3,s2);coutThelengthofs1is:strlen(s1)n;couts2ts3变量名1变量名2变量名n;输出流对象cout:cout实现将数据输出到显示器的操作,一般格式为:coutusingnamespacestd;,ok,1.8.1C+输入输出简介,1.8.2数据的输入输出,(1)cin例如:charc1,c2,c3;cinc1;/Acinc2c3;程序执行到A行时,等待用户输入数据。若输入:Abc则cin分别将字符A、b、c赋给变量c1、c2、c3。cin自动跳过输入的空白字符(包括空格,制表,backspace和回车等)。,ok,1.字符的输入输出,1.8.2数据的输入输出,(2)cinget()例如:charc1,c2,c3,c4;cin.get(c1);/Bcin.get(c2);cin.get(c3);程序执行到B行时,若输入:Ab则执行结果是:字符A、空格、字符b分别赋给变量c1、c2、c3;输入行中仍保留回车符。cin与cinget()的区别:cin.get()把从键盘上输入的所有字符,包括空白字符,都作为输入字符赋给字符变量,ok,字符的输出:使用cout。假定字符c1、c2、c3的值分别为字符a、b和c,执行以下语句序列:coutc1tc2n;coutc3endl;coutOkendl;屏幕上将输出:abcOk输出时字符之间是无间隔的,如果想让字符间有间隔,必须输出间隔符,如t(制表符,自动跳过若干字符位置)、n或endl(基本含意一样,表示回车换行,并清空缓冲区)。,1.8.2数据的输入输出,2.字符串输入输出,输入:常用函数getline():cin.getline(char,int)其中第一个参数是已经定义的字符数组名,第二个参数是读入字符的最多个数n(包括字符串结束符/0)。getline()输入以用户按下回车键作为结束。,ok,输出:常用cout输出字符串。双引号中的字符串常量照原样输出,程序中通常通过输出字符串常量来输出一些提示信息。字符数组将输出串结束符前所有字符。,说明:函数getline()保证在执行时总会为字符串的结束符保留一个字节。当键盘的输入字符(字节)数多于(n1)时,后面的字符不会进入字符数组,字符串结束符自动加在字符数组的最后一个字节中。当输入字符数少于该值时,字符串结束符自动加在输入到字符数组中的最后一个字符的后面。例:charcity11;cin.getline(city,10);/将从输入行中提取最多/9个字符,再加上一个0字符输入到city中cout“城市名:“cityj;/Dcinxy;cout则程序输出:i=10j=20 x+y=13.1输出时各数据间是无间隔的,因此应当有意输出一些间隔符,ok,3.十进制数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年绍兴市上虞区中医医院医共体招聘编外人员5人模拟笔试试题及答案解析
- 2025年福建泉州惠安县宏福殡仪服务有限公司招聘5人参考考试试题及答案解析
- 2025年杭州市上城区闸弄口街道社区卫生服务中心招聘编外1人考试参考试题及答案解析
- 深度解析(2026)GBT 26103.5-2010NGCLZ型带制动轮鼓形齿式联轴器
- 2025浙江宁波市象山半边山紫冠投资有限公司酒店管理分公司(宁波象山海景皇冠假日酒店)招聘3人参考考试题库及答案解析
- 深度解析(2026)《GBT 25982-2024客车车内噪声限值及测量方法》(2026年)深度解析
- 2025四川德阳市旌阳区孝泉镇卫生院(旌阳区第二人民医院)招聘2人备考笔试题库及答案解析
- 深度解析(2026)《GBT 25796-2010反应艳黄W-2G(C.I.反应黄39)》
- 深度解析(2026)《GBT 25734-2010牦牛肉干》(2026年)深度解析
- 深度解析(2026)《GBT 25688.2-2010土方机械 维修工具 第2部分:机械式拉拔器和推拔器》
- 2025广西专业技术人员公需科目培训考试答案
- 网络故障模拟与处理能力测试试题及答案
- 2025至2030中国聚四氟乙烯(PTFE)行业经营状况及投融资动态研究报告
- 教育、科技、人才一体化发展
- 营销与客户关系管理-深度研究
- 耐压试验操作人员岗位职责
- 2020-2021学年广东省广州市黄埔区二年级(上)期末数学试卷
- 财政部政府采购法律法规与政策学习知识考试题库(附答案)
- 长鑫存储在线测评题
- DL∕T 5344-2018 电力光纤通信工程验收规范
- T-CCIIA 0004-2024 精细化工产品分类
评论
0/150
提交评论