第一章C 语言简介.docx

上传人:夺命阿水 文档编号:463338 上传时间:2023-07-05 格式:DOCX 页数:22 大小:231.93KB
返回 下载 相关 举报
第一章C 语言简介.docx_第1页
第1页 / 共22页
第一章C 语言简介.docx_第2页
第2页 / 共22页
第一章C 语言简介.docx_第3页
第3页 / 共22页
第一章C 语言简介.docx_第4页
第4页 / 共22页
第一章C 语言简介.docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《第一章C 语言简介.docx》由会员分享,可在线阅读,更多相关《第一章C 语言简介.docx(22页珍藏版)》请在课桌文档上搜索。

1、第一章C+语言简介本章内容 C+语言的发展简史 C+语言的特点 C+语言的程序结构第一节c+语言的发展简史常考考点: C+语言的发展历史 C+语言与C语言的关系 C+是高级程序设计语言:易懂(接近于自然语言)、易读 高级语言需要编译(将程序编译为计算机指令进行运行) C+是由C发展而来的,与C兼容,是C的超集 C+既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言 面向对象和面向过程不是矛盾的,而是各有用途、互为补充第二节C+语言的特点常考考点: C+语言与C语言之间的主要异同点 C+的基本输入/输出语句,程序的输入/输出方法 函数的声明、参数传

2、递方式、参数默认值、内联函数等相关知识、函数重载的概念,const的含义及作用 指针的概念,C+中动态内存分配及释放的方法,并在程序中灵活运用、引用的基本概念,引用的定义与使用,类String的基本功能,声明类String对象,调用类string中的成员函数进行基本操作1.C+语言是一种编译式的、通用的、大小写敏感的编程语言,完全支持面向对象的开发模式。2.C+语言的主要特点表现在以下方面:它是C语言的继承,尽量兼容C语言,同时也增强了C语言对类型的处理;加入了面向对象的特征:抽象、封装、继承、多态;支持过程化编程、面向对象编程和泛型编程;C+语言可运行于多种平台上,如WindOWs、UAC操

3、作系统及UNIX的多种版本。一、基本的输入/输出1个头文件:include2个流类、2个流类对象、2个运算符号、2条语句:istream输入流类stream输出流类cin输入流对象COUt输出流对象流提取运算符(流插入运算符cin输入语句cout输出语句两个对象都不支持用户自定义类型数据的直接输入/输出,需要对两个运算符进行鳏操作【牛刀小试】在C+中使用流进行输入/输出,其中用于屏幕输出的对象是()。A.cerrB. cinC. coutD. Cfile正确答案C答案解析在C+中使用流进行输入/输出,其中用于屏幕输出的对象是“c。Ul【牛刀小试】在C+程序中,用来读取从键盘输入值的标准输入流对

4、象是O正确答案cin答案解析在C+程序中,用来读取从键盘输入值的标准输入流对象是“cin”【程序1-11输入/输出示例#include#includeusingnamespacestd;intmain()intonelntl,onelnt2;charStrArray20;stringstr;doubleoneDouble;charoneChar=*a;CoUt输入两个整型值,一个字符,一个字符串和一个浮点值,”;COUt以空格、Tab键或(Enter)键分隔:oneIntloneInt2oneCharstrArrayoneDouble;Str=StrArray;CoUt输入的数据是:“endl

5、;CoUt”字符串是:ttz,strendl两个整型值分别是:tOnelnt1和tonelnt2endl字符是:ttz,oneCharz,n“浮点值是:ttz,oneDoubleleaseinputtheint/char/str/doublenuaber:1M%aChifWl3.H1926 定义变量,字母大小写敏感 ,符号之后只能跟随一项(变量、表达式、函数调用语句等) 在输入数据过程中,使用空格、Tab、Enter将数据分开 输入完数据以后,回车,结束输入过程,并显示输出结果 加入适当的引导语,可以帮助用户实现操作二、头文件和命名空间1.C语言中使用头文件保存程序中用到的声明:包括函数声明、

6、常量的定义等等。2 .C+中也是如此,使用头文件保存:函数声明、类体的定义等等。3 .2includeGoStreamC+标准输入/输出流,使用Cin或COUt对象时,必须使用该库,可以包含多个头文件。4 .头文件包含:J系统提供的头文件includeJ用户自定义头文件includestudent,h”J当使用尖括号时,C+编译器将指令中指定的目录中去查找J采用双引号时,C+编译器在用户当前目录下或指令中指定的目录下寻找要包含的文件5 .常用头文件有:,标准输入输出流:标准文件流:,标准字符串处理函数:标准数学函数:【牛刀小试】指示编译器将一个源文件嵌入到带该指令的源文件中的指令是O正确答案i

7、nclude答案解析指示编译器将一个源文件嵌入到带该指令的源文件中的指令是“include”。6 .命名空间USingIIameSpaCeStd;C+中为了避免标识符之间命名重复现象,引入“命名空间”概念,即namespace 命名空间的作用是为了消除同名引起的歧义 这是C+的一种机制,使用关键字namespace把大量有逻辑联系的程序实体组合在一个标识符下 C+-标准程序库中的所有标识符都定义在一个名为Std的命名空间中 使Cir1、coutendl合法化,不能缺少命名空间(即std:Cin、std:COUt、std:endl)三、强制类型转换运算符当不同类型的量进行混合算术运算时,系统自动

8、进行合理的类型转换,也可以在程序中使用强制类型转换运算符static_cast或是const_cast进行转换。1. static_cast用于将一种数据类型转换成另一种数据类型,-一般情况下,Statijcast可以缺省。StatiCcast(表达式)#includeusingnamespacestd;intmain()doublea=34.23;cout(int)aendl;coutint(a)endl;coutstatic_cast(a)(表达式) 这个运算符的功能是,将常量指针转化成非常量的指针,并且仍然指向原来的对象; 或是将常量引用转换成非常量的引用,并且仍然指向原来的对象。int

9、nain()Inte;constintapft)constintc30jIntqjcout*txtndljcoutp,t*ptnjcout*tndljq三constwcast(p)j C LMerAdrwutrtoD*top*endl;W划couttt,xnJcoutpt*pendljcoutqtv*endl)cout*qconst.cMt(p)jcoutAct*candl;coutptpndljcoutqt*endl)rturn9四、函数参数的默认值常考知识点:1.选择题一一函数声明原型 函数原型的声明形式是否正确 基于函数原型,调用形式是否正确2.选择题、程序填空题一一函数默认参数函数原型

10、如果带有默认参数,如何定义,如果实现传参将带有默认参数的函数原型,补充完整【牛刀小试】一个C+源文件中包含3个函数:main,fa和fb函数,它们之间不正确的调用是()。A.在mainO函数中调用fb()函数B.在faO函数中调用fbO函数C.在fa()函数中调用faO函数D.在fb()函数中调用mainO函数正确答案D答案解析一个工程中有且仅有一个主函数(main),mian函数有调用任意其它用户自定义函数或库函数的权限;其它函数或用户自定义函数是没有调用主函数(main)的权限。任意其它用户自定义函数或库函数之间可以互相调用。【牛刀小试】有函数原型“intfun4(int,int);,以下

11、正确的语句是()。A. inta=fun4(1);B. coutfun4(3,4);C. inta=fun4(1)+fun4(1);D. coutfun4(3+4);正确答案B答案解析定义了两个整形参数,输出也要是两个整形参数,所以B正确。intfun4(int,int);cout,intCreturna+b+c;includeusingnamespaceStdjintfun(inta三10intb三2Gjintc36)rturnbc;intmain()Bcoutfun()endl;coutfun(le)endl;coutfun(lej2e)endl;coutfun(l8i208j30)end

12、l;return0;调用函数时,主调函数的实参与被调函数的形参按从左至右的顺序进行匹配对应,如果实参的个数与形参的个数相等,则它们:一一对应intfun(inta=10,intb3intc三30)returna+b+c;MeSSgInfunctionintfun(intmtint(ErrordefaultWgUmentmissingforparameter2ofIntfn(inint呻如果实参的个数m少于形参的个数n,则函数原型形参表中最前面的m个形参与m个实参相对应,后面的n-m个形参则使用默认值进行初始化*includeusingnamespacestd;intfun(inta1intb2

13、,intc30)returnabc)intmain()(cotfun(l0)endl;coutfun(10020)endl;coutfun(100j200j300)usingnamespacestd)intI8,A76;Intmx(intmintn)Kreturnn:n;arintfunc2(intx,*ntyaMx(,b),intz-b)fi GXUsersVAdministrareturnxyx;)intin()Kcoutfunc2(l)endl;return0;【牛刀小试】在函数调用时,若某一参数要指明一个特定值,则需要满足()。A.其之前所有参数都必须赋值B.其之后所有参数都必须赋值C

14、.其前、后所有参数都必须赋值D.其前、后所有参数都不必赋值正确答案A答案解析在函数调用时,若某一参数要指明一个特定值,则需要满足其之前所有参数都必须赋值。【牛刀小试】以下程序的输出是590,请将程序补充完整。#includeusingnamespacestd;voidfunc(inta,int,int)coutabcendl;intmain()func(5,9);returnO;)正确答案b、c=0Mincludeusingnamespacestd;voidfunc(IntajintbiIntc三) C:UsersAdnS90coutabcendl;intmain()func(5,9);ret

15、urn0;五、引用和函数参数的传递常考知识点: 引用的概念 引用的表示 引用在函数参数中的使用 地址传递1.引用的定义引用相当于给变量起了一个别名。变量对应于某个内存地址,如果给某个变量起了别名,相当于变量和这个引用都对应到同一地址。“引用”的定义格式如下:类型名&引用名:同类型的某变量名;举例如下:inta=100;int&c=a;声明引用ttincludeusingnamespaceStdintmain()inta100;int&ca;coutaendl;coutcendl;c=5;coutaendl;coutcendl;return0;) GUserszWlncludeusingname

16、spacestdj:Intmain()Inta-10)int&ca;coutendl;cortcendl;a*20;coutendl;coutcendl)return0;Ml引用变量与原变量对应的是同个内存地址,也就是“你变,我就变; 系统并不为引用变量分配空间,我变,你也变” 声明引用变量时,原变量必须初始化 不能有空引用,即引用必须指向某个已存在的内存区域的首地址,也不能声明引用的引用例如:int&c=&b;(错误)2.引用在函数中的使用引用既可以作为函数的参数使用,也可以作为函数的返回值使用。C+中,函数调用时参数的传递有两种方式:传值和传引用。 传值,传递对象的值如果函数的形参不是引用

17、,那么调用时实参传递给形参通常采用的是传值的方式,即将实参的值拷贝给形参,函数内部对形参的改变不会影响到函数外实参的值。incldeusingnamespacestd)voidSW叩(Inta,Intb)kintt;二b;bt;Iintmain()int=12,b=18;SW叩此coutatbendljreturn0; 传引用,递对象的首地址值如果函数的形参是引用,则调用时实参传递给形参采用的是传引用的方式。函数调用时,实参对象名传递给形参对象名,形参对象名就成为实参对象名的别名,即形参是对应实参的引用,它们是等价的,代表同个对象,也可以看作是将实参的地址传递给了形参。在函数内部对形参的操作,

18、都是对这个地址的内容进行的,相当于对实参的值进行了操作。所以当函数执行完毕返回后,实参的变化被保留下来。iluiusingnamsMCstdvoidswep(intlntAb)InttjI;ab;bt)力IntIRaIMHInta12.bU;wp()coutwt*bendl;return町O 引用作为函数返回值int&fun(int&c)函数的返回值是一个引用,所以可以作为赋值语句中的左值使用。 扩展(了解):函数的返回值还可以是指针,这样的函数称为指针函数。函数原型格式如下:类型标识符*函数名(参数列表);#includeusingnamespacestd)inta三10;intb=20;i

19、nt&fun(int&x)Sreturnx;)1intmain()coutfun(a)endl;fun(a)三50;coutaendl;fun(b)=40;coutbendl;return0;【牛刀小试】使用值传递方式将实参传给形参,下列说法正确的是()。A.形参是实参的备份B.实参是形参的备份C.形参和实参是同一对象D.形参和实参无联系正确答案A答案解析使用值传递方式将实参传给形参,形参是实参的备份。【牛刀小试】程序分析题:给出以下程序的输出结果:#includeusingnamespacestd;Intmain()Inta=10;IntAba;b2;coutMaMaMbMbendl;Int

20、p=4b;ASejreturn0;DJ,UsersAdministratoDesktopUtitlca-20vb-2Hla3Hrb*3Hr*p3W六、const与指针共同使用【常考知识点】 const修饰指针过程中的三种组合,对指针以及数据的影响 常见题型一一选择题、程序填空题C+语言也可以使用COnSt限定访问权限,告诉编译器,它所修饰的量是不能改变的,也就是不能作为左值使用。程序中使用指针时,涉及的量有两个: 一个是指针本身(地址) 另一个是指针所指向的内容(数据)当ConSt与指针共同使用时,其确切含义是什么?是说指针本身不能改变,即不能让其指向其他地址?还是指针所指向的内容不能改变?抑

21、或两个含义都有?当ConSt与指针共同使用时,其书写的位置不同,语句含义也不同。ConSt修饰指针变量时,基本含义如下:1)如果唯的COnSt位于符号*的左侧,表示指针所指数据是常量,数据不能通过本指针改变,但可以通过其他方式进行修改;指针本身是变量,可以指向其他的内存单元。2)如果唯的ConSt位于符号*的右侧,表示指针本身是常量,不能让该指针指向其他内存地址;指针所指的数据可以通过本指针进行修改。3)在符号*的左右各有一个CorlSt时,表示指针和指针所指数据都是常量,既不能让指针指向其他地址,也不能通过指针修改所指向的内容。我们先从基本示例开始理解:*includeusingnamesp

22、aceStdjintmain()intal)intpjcouta*tpendljAIM,couta,t1pndl;rturnjWincludeciostrea-/usingnamspaceStdjintmain()intal。;int*psfta)coutatpendlj=98;couttt,pendlireturnj169 constint*p=&a;/指向常量的指针定义一个指针指向一个常量,不能通过指针来修改这个指针指向的值(指针指向不可变)。jMncluctusingCaMSPac。Ftdjintmin()Hintil3e;int12*49jconstintPiZi1;coutwpien

23、dl;“脸电杲油pi三U2;-maSMM!懊电龌i2=80i/翊,这要能二M当tf不谎cout*pi int*constp=&a;常量指针P是一个常量类型的指针,不能修改这个指针的指向,但是这个指针所指向的地址上存储的值可以修改(指针不可变)。VlncludxiMtreaiiousingna*sacstd;Intmaln()Rintil30;ifti2a40jintconitPiBIiI/irtwa;注融这呈,E本再这时施痂及虐/不=*瘠向Ji一个局at.所取我B憩注舞了coutepiendl;/MjK3ilWjZ5UWT:-iKW可旗,RKqCmtF整氢ItMt.coutpindl;除/SM

24、rturn constint*constP=&a;/指向常量的常量指针对于“指向常量的常量指针”,就必须同时满足上述两个中的内容,既不可以修改指针的值,也不可以修改指针指向的值(指针和指针指向都不可变)。上述两个代码的结果显示:r C:UsersV3080小结const和指针的用法:NAMEDEFNOYES指向常量的指针(指针所指数据是常量)constint*p修改数据*p=c修改指针p=&d常量指针(指针本身是常量)int*constp修改指针P=&C修改数据*p=d指向常量的常指针(指针和指针所指数据都是常量)constint*constp修改指针以及数据X【牛刀小试】设有说明constc

25、har*constp=ABCD”,则下列选项中正确的是()。A.允许修改指针P本身,且允许通过P修改所指向的数据B.允许修改指针P本身,且禁止通过P修改所指向的数据C.禁止修改指针P本身,且允许通过P修改所指向的数据D.禁止修改指针P本身,且禁止通过P修改所指向的数据正确答案JD答案解析“constchar*constp=ABCD”这个语句禁止修改指针P本身,且禁止通过P修改所指向的数据。【牛刀小试】以下程序的输出是6,请将程序补充完整。iincludusingnamespaceStdjIintmain()constIntx三5jy*6;constInt*p=lx;cout正确答案PKy;七、

26、内联函数为了避免这种频繁的函数调用与返回,C+语言引入了内联函数的概念。使用内联函数,编译器在编译时并不生成函数调用,而是将程序中出现的每一个内联函数的调用表达式直接用该内联函数的函数体进行置搀,就像整个函数体在调用处被重写了遍样。很显然,使用内联函数会使最终可执行程序的体积增大。这是以空间消耗节省时间开销。内联函数应该定义在前,调用在后,定义时只需在函数头返回值类型的前面加上关键字inline。定义内联函数的格式如下:inline返回值类型函数名(形参表)(函数体【牛刀小试】用来声明内联函数的关键字是:O正确答案inline答案解析用来声明内联函数的关键字是“inline”。 内联函数主要应

27、用于代码量少的函数 编译时,编译程序将整个函数体的代码复题到调用该函数的位置,而不会编译成函数调用的指令 内联函数不是在调用时发生控制转换,而是在编译时将函数体嵌入在每一个调用处 如果函数体中有循环语句和SWitCh语句则通常不定义为内联函数 如果将一个较复杂的函数定义为内联函数,大多数编译器会自动地将其作为普通函数来处理【牛刀小试】下列哪个类型的函数适合声明为内联函数()。A.函数体语句较多B.函数体语句较少C.函数体内含有循环D.函数体内含有switch语句正确答案B答案解析函数体语句较少的函数适合声明为内联函数。八、函数的重载阅读下面的代码:说出你的认识。intmaxint(intxji

28、nty)returnxy?x:y;charmax-char(char,chary)returnxy?x:y;doublemax_double(doublexjdoubley)(returnxy?x:yj)你的感觉应该是:虽然函数名称不同,但是函数功能相同。不如我们改良一下:Irinclodeusingnaaespctd;Intma(itIbiflty)(rtMrnxyFxyjcharx(charxfcary)rtumxyy)doubleta*(dcMblex#doubley)retvrnxyhttyj C:UsersAdn?Intmin()Intljb23;doublec3.14,d1.23;

29、|charcMsvd2Blk4jcoutMx4b)enlljcoutd)ndl;coutmx(chl/ch2)fi3三o 要注意的是,返回值类型不能用来区分函数【牛刀小试】1 .以下正确的函数重载是()。A. intsame(int,double);doublesame(int,double);B. intsamel(int,double);intsame2(int,double);C. intsame(int=0);intsame(int);D. intsame(int,double);intsame(int,double,double);正确答案D答案解析参数表中对应的参数类型不同;参数表

30、中参数个数不同:返回值类型不能用来区分函数。2 .“intFun2(int,int)不可与下列哪个函数构成重载()。A. intFun2(int,int,int);B. doubleFun2(int,int);C. doubleFun2(double,double);D.doubleFun2(int,double);正确答案B答案解析参数表中对应的参数类型不同;参数表中参数个数不同:返回值类型不能用来区分函数。3 .使用重载函数编写程序的目的是or正确答案使用相同函数名调用功能相似的函数答案解析用重载函数编写程序的目的是使用相同函数名调用功能相似的函数。4 .程序分析题:给出下面程序的输出结果

31、。vincludusingnaaespacestd;classA(public:Intfun(double);Intfun(it)IntA:fun(double)(return(int)x2jitAisfun(lnt)(return2jIntMin()Ints*.fun(2)jcoutcndlreturn0jr正确答案7九、指针和动态内存分配指针变量中保存的是一个地址,也称指针指向一个地址。【牛刀小试】若有以下的定义:inta=100,*p=则下列选项中,表述错误的是()。A.声明变量p,其中*表示P是一个指针变量B.变量P经初始化,获得变量a的地址C.变量P只可以指向一个整型变量D.变量P的

32、值为100正确答案D答案解析指针变量中保存的是一个地址,也称指针指向一个地址。关于空间分配: 静态内存分配编译时确定数组空间大小的方式。 动态内存分配在程序运行期间,根据实际需要,临时分配一段内存空间用于存储数据。在C+中,使用new运算符实现动态内存分配p=newT;T是任意类型名,p是类型为T*的指针。这样的语句会动态分配出一片大小为SiZeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给指针p。使用new运算符还可以动态分配一个任意大小的数组:P=IIeWTN;其中,T是任意类型名,P是类型为T*的指针,N代表数组“元素个数”,可以是任何的值为正整数的表达式。数组中元素的类型是

33、T类型。这条语句动态分配了N*sizeof(T)个字节的内存空间,指针P指向这段空间的首地址。使用new运算符动态申请的内存空间,需要在使用完毕释放。C+提供了delete运算符,用来释放动态分配的内存空间。delete运算符的基本用法如下:delete指针;delete指针;#includetincludeusingnamespacestd;Intmain()Inttp=newint;*p三ejcoutpendljint*pp=nwint5;for(intis0ji5ji*)(ppiii;)for(intisejl5ji)(coutppi)J)coutndl;dltpjletepM_retu

34、rn;【牛刀小试】1、动态申请含20个元素的整型数组A的语句是O正确答案int*A=newint20;答案解析动态申请含20个元素的整型数组A的语句是“int*A=newint20;”。2、使用new动态分配的内存,释放时使用的运算符是o正确答案delete答案解析使用new动态分配的内存,释放时使用的运算符是“delete”。3、设在程序中定义了类Point,并使用如下语句申请了一个Point对象数组:Point*ptr=newPoint2;则释放Ptr指向的动态数组对象的语句是O正确答案deleteptr;答案解析释放Ptr指向的动态数组对象的语句是deleteptr;。十、用string

35、对象处理字符串常考知识点: string对象、对象数组的创建、数组的遍历 string类中的基本对象操作运算符:赋值、关系比较、输入输出等 string类中成员函数的访问方法:大小、长度获取、大小写转换、测试是否为空、查询、插入等操作C+标准模板库中提供了string数据类型,专门用于处理字符串。这个类型的变量称为“string对象”。String对象所代表的字符串保存在内存中,这段内存的首地址保存在String对象。通常不去区分字符串本身或是保存字符串的地址,“字符串对象中的字符串”就是指“字符串对象所保存的地址中的字符串”o要在程序中使用String对象,必须在程序中包含头文件String

36、,即在程序的最前面,要加上如下语句:.incudcQttjJlg,1、声明String对象string变量名;String对象string变量名口;String对象数组 sizeof(string)数组占用的空间大小 sizeof(数组名)每个String对象的大小 sizeof(city)sizeof(string)数组元素的个数WincludeWincludeusingnamespacestd;Intmain()stringitrl=MchinaMtr2Jtr3=MbeijingM;stringcityanbeijing,fNshanghaiMJMguangzhounanjingjstr2

37、三strljcoutstrlendl;coutstr2endljcouttr3ndl;for(IntiB;isizeof(city)sizeof(string)ji*)coutcityij,j)coutndl;return0;C:Useichina china be Lj Ing be IJ ing 零 hangha i.gangz hou, can jifg.2、String对象操作(I)对象直接通过标准输入输出语句进行输入输出。#include #include using namespace stdj int main()string strlstr2;cinstrlstr2;couts

38、trll- - t,str2endl; return 0;) C:UsersAdministratochina北厅、china北印(2) String对象之间的运算符 赋值运算:二 关系运算:、=、!=、=大小的判定标准是按字典序进行的,而且是大小写相关的。 连接运算:+,string对象数组支持循环遍历includewineluduingnamespaceStdjIntain(stringtrl*HUow3Ctrl*nNorldaijtr3*mB1jifm,tr4*,str5*ftbanghaijcout*trl*str2ndl;str44strljcoutstr4*str3endl;cou

39、tABtr5)emU.;coutstr5)ndlreturnjGUsersAdmimstratoDesktopUntitleHlloWorldHlloBeiJing(3)String对象用法示例调用成员函数的方法:string对象名.成员函数名(参数)成员函数是类中为这个类的对象提供的处理方法函数功能constchar*c_str()const;返回一个指向字符串的指针,字符串内容与本String串相同,用于将String转换为COnStchar*intsize()const;返回当前字符串的大小intlength()const;返回当前字符串的长度boolempty()const;判定当前字符串是否为空size_typefind(constchar*str,size_typeindex);返回Str在字符串中第一次出现的位置(从index开始查找),如果没找到则返回Tsize_typefind(charch,SiZet

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号