




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(完好版)C复习资料(谭浩强)(完好版)C复习资料(谭浩强)PAGEPAGE21(完好版)C复习资料(谭浩强)PAGE
第一章C++的初步认识
1、C语言的主要特色是:
1、C语言是一种结构化的程序设计语言,语言自己简短、使用灵巧方便。
2、它既有高级语言的特色,又拥有汇编语言的特色。
3、程序的可移植性好。
4、程序的语法结构不够严实,程序设计的自由度大。
缺乏:C语言对数据种类检查的体制比较弱;缺乏支持代码重用的结构;跟着软件工
程规模的扩大,难以适应开发特大型的程度等等。〔又把运算符的重载、引用、虚函数等功能参加到
C++中,使
C++的功能日益完美。〕2、源程序
*.CPP
—>目标文件
*.OBJ
—>可履行文件
*.EXE编译过程:1〕启动VisualC++,选择“文件〞菜单中的“新建〞命令,选择“文件〞标签中的“File〞项。选
C++Source2〕选择源程序寄存的目录和输入源程序名,单击“确立〞。3〕在编写器中编写源程序。4〕单击F7或“编译〞中的“重修所有〞编译源程序,假定编译经过,单击
“履行〞,在
DOS
屏上看结果,任按一键返回编写器。第二章数据种类、运算符与表达式1、CPU<—>〔data〕内存<—〔program
〕外存用一个字节表示整数,范围为
-128~127;用两个字节表示整数,范围为
-32768~32767。一般用四个字节表示整数。2、变量在程序的履行中能够赋值,发生变化。变量有一个名字,并在使用以前要说明其种类,一经说明,就在内存中占有与其种类相应的储存单元。变量名、数组名、函数名称为表记符。表记符只好由字母、数字、下划线这三种字符构成,且第一个字符一定为字母或下划线,长度不大于247个字符,大小写不通用。〔重点字不可以作为表记符〕。变量一定使用前定义,以分派空间。常量是依据其表面形式来判断,整型量即是没有小数点的整数,范围:有三种形式:1〕十进制〔默认方式〕2〕八进制以0开头3〕十六进制整型变量:分为有符号型与无符号型。有符号型:short在内存中占两个字节,范围为-215~〔215-1〕int在内存中占四个字节,范围为-231~〔231-1〕long在内存中占四个字节,范围为-231~231-1
-231~〔231-1〕,以0x开头无符号型:最高位不表示符号位unsignedshort在内存中占两个字节,范围为unsignedint在内存中占四个字节,范围为unsignedlong在内存中占四个字节,范围为1〕整型常量亦有长短之分,常量中无unsigned
0~216-10~232-10~232-1型,但一个非负的整型常量能够赋给
unsigned型的变量。2〕假定一个常量定义为长整型数,那么在后来加l或L进行划分。不一样种类的整型数据间的赋值归根究竟就是一条:按储存单元中的储存形式直接传递。#include<iostream.h>voidmain(){unsignedshorta;
shortintb=-1;
a=b;cout<<"a="<<a<<endl;}
结果:65535实型数又称浮点数,有两种表示方式:1〕十进制形式:〕指数形式:45e-1e前有数字,后边一定是整数。实型变量分单精度float和双精度double两种形式:float:占四个字节,供给7~8位有效数字。double:占八个字节,供给15~16位有效数字。一般用4个字节表示一个浮点数,也实用8个字节表示的。字长必定,尾数越多,精度越高;阶码越多,范围越大。当计算机中出现小于机器所能表示的最小数时,机器只好当零来办理,当出现超出机器所能表示的最大数时,出现溢出现象,一旦出现溢出,就会停止运算。定点数,浮点数均会出现溢出现象。字符型数据其实是作为整型数据在内存中储存的。计算机是以字符编码的形式办理字符的,所以,我们在计算机内部是以ASCII码的形式表示所有字符的。所以7位二进制数即可表示出一个字符,我们用一个字节的容量〔8位〕存储一个字符。在程序中表示为:chargrade;//定义一个字符型的变量空间(1个字节)grade=‘A’//;一定用‘’表示,否那么易与表记符混杂‘内’括起来的字符表示该字符的ASCII码。进一步,因为在内存中的形式与整型数据相同,所以,能够直接用其整型值给变量赋值。非打印字符有些ASCII的字符代表某些操作,不可以打印出来,如回车、退格等,可用两种方式表示这些字符。1〕用
ASCII
码的形式
char
re=13;2〕用转义字符
char
re=‘n’;〔p24)转义字符固然包含2个或多个字符,但它只代表一个字符。编译系统在见到字符“〞时,会接着找它后边的字符,把它办理成一个字符,在内存中只占一个字节。字符串常量:用""表示,在内存中次序寄存,以'\0'结束。如:"CHINA"实质上内存是对应字符的ASCII码形式'a'在内存中占一个字节"a"占两个字节表记符常量在C++中有二种方法定义表记符常量,一种是使用编译预办理指令;另一种是使用C++的常量说明符const。变量在程序的履行过程中,其值能够改变的量称为变量。变量名一定用表记符来表记。变量依据其取值的不一样值域,分为不一样种类的变量:整型变量、实型变量、字符型变量、结构型变量、指针型变量等等。关于任一变量,编译程序要为其分派假定干个字节〔连续的〕的内存单元,以便保留变量的取值。当要改变一个变量的值时,就是把变量的新的取值寄存到为该变量所分派的内存单元中;用到一个变量的值时,就是从该内存单元中拿出数据。不论什么种类的变量,往常均是变量的说明在前,使用变量在后。开拓空间后,空间中为随机值变量赋初值在定义变量的同时给变量赋值,即在内存中开拓出一个空间后立刻给此空间赋值。但这个空间的值其实不是固定不变的,在程序的运转中相同能够改变。C++的运算符P31制型〔double)a在制型运算后原量不,但获取一个所需型的中量。四、自增、自减运算符(点〕++--在前,先运算,后++在后,先,后运算1〕自增、自减运算符只好用于量,不行用于常量和表达式因表达式在内存内没有详细空,常量所占的空不可以从头3++〔x+y)++(-i)++2〕合方式自右至左,先最高,向右取最大运算符和表达式"="左必是量名。假定“=〞两量型不一样,在要行型。原:依据左量的型。少字—>多字1〕假定多字量unsigned,后剩余字零。2〕假定多字量有符号型,后展少字的最高位。后,数据的符号不。多字—>少字低位照搬"="的合性自右至左关系运算符和关系表达式算运算符的先大于关系运算符的先关系表达式:用关系运算符将表达式接起来称关系表达式。其非真即假。在
C++言中,用非0代表真,用0表示假。关系表达式的果只有两个,真1,假
0。运算符注意事1.作条件,所有非2.不行写1<x<10
0均真;作果,只有:1<x&&x<10
0或
1两种。3.目前面的表达式能够得出整个表达式的果,不用再求后边的表达式。sizeof()运算符是一个目运算符,用于算某一个操作数型的字数。其格式:sizeof〔<型>〕逗号运算符和逗号表达式表达式1,表达式2,表达式3,⋯,表达式n序求解,果最后一个表达式的,并且先最低。各数型数据的混杂运算整型、型、字符型数据能够混杂运算。内行运算,不一样型的数据要先成同一型的数据再行运算。以下:P33第三章的入进出句:cin要使用C++供给的入出,必在程序的开增添一行:#include<iostream.h>入句自空白字符。字符型量空白字符。cin格式空白字符在缺省的状况下,cin自跳入的空格,言之,cin不可以将入的空格字符型量,同地,回也是作入字符之的分开符,也不可以将入的回字符字符型量。假定要把从键盘上输入的每一个字符,包含空格和回车键都作为一个输入字符赋给字符型变量时,一定使用函数cin.get()。其格式为:cin.get(<字符型变量>);cin.get()从输入行中拿出一个字符,并将它赋给字符型变量。这个语句一次只好从输入行中提取一个字符。在缺省的状况下,系统商定输入的整型数是十进制数据。当要求按八进制或十六进制输入数据时,在cin中一定指明相应的数据种类:hex为十六进制;oct为八进制;dec为十进制。inti,j,k,l;cin>>hex>>i;//指明输入为十六进制数cin>>oct>>j;//指明输入为八进制数cin>>k;//输入仍为八进制数cin>>dec>>l;//指明输入为十进制数当履行到语句cin时,假定输入的数据为:11111212<CR>使用非十进制数输入时,要注意以下几点:1、八进制或十六进制数的输入,只好合用于整型变量,不合用于字符型变量,实型变量。2、当在cin中指明使用的数制输入后,那么所指明的数制向来有效,直到在接着的明输入时所使用的另一数制为止。如上例中,输入k的值时,仍为八进制。
cin
中指3、输入数据的格式、个数和种类一定与
cin
中所列举的变量种类一一对应。
一旦输入犯错,不单使目前的输入数据不正确,并且使得后边的提取数据也不正确。输出数据
cout与输入
cin
对应的输出是
cout
输出流。当要输出一个表达式的值时,可使用
cout
来实现,其一般格式为:cout<<<表达式>?<<<表达式>?;此中运算符“<<〞称为插入运算符,它将紧跟后来的表达式的值,输出到显示器目前光标的地点。‘t’为转义字符
Tab
endl
为回车或‘n’cout将双引号中的字符串常量按其原样输出指定输出项占用的宽度:在输出的数据项之间进行分开的另一种方法是指定输出项的宽度。如上边的两个输出语句可改写为:cout<<setw(6)<<i<<setw(10)<<j<<endl;_____4_________12此中setw(6)指明后来的输出项占用的字符宽度为6,即括号中的值指出紧跟后来的输出项占用的字符地点个数,并向右对齐。setw是“setwidth〞的缩写。使用setw()应注意以下三点:1、在程序的开始地点一定包含头文件,即在程序的开头增添:#include<iomanip.h>2、括号中一定给出一个表达式〔值为正整数〕,它指明紧跟后来输出项的宽度。3、该设置仅对后来的一个输出项有效。一旦按指定的宽度输出后来的输出项后,又回到本来的缺省输出方式。输出八、十六进制数和科学表示法的实数关于整型数据可指定以十六进制或八进制输出,而关于实型数据可指定以科学表示法形式输出。比如,设有以下一个程序:#include<iostream.h>voidmain(void){floatx=3.14,y=100;cout.setf(ios::scientific,ios::floatfield);说明浮点数用科学表示法输出cout<<x<<t’’;cout<<y<<endl;}cin中类同,当在cout中指明以一种进制输出整数时,对后来的输出均有效,直到指明又以另一种进制输出整型数据为止。对实数的输出,也是这样,一旦指明按科学表示法输出实数,那么接着的输出均按科学表示法输出,直到指明以定点数输出为止。明确指定按定点数格式输出〔缺省的输出方式〕的语句为:cout.setf(ios::fixed,ios::floatfield);C++的流程控制语句if语句P64注意:1)if后可跟复合语句。2)注意;的地点。(if语句;else语句;)假定为if〔〕;即是一个空判断。3)注意多重ifelse的搭配。〔可省略else〕互相配对的语句要对齐。if老是与它上边近来的else配对,如要改变,用复合语句{}。例:输入两个实数,按代数值由小到大序次输出这两个数。voidmain(void){floata,b,t;//定义变量cout<<“Input2RealNumber:\n";//在屏幕上的提示信息cin>>a>>b;//给变量赋值a:7,b:3if(a>b){t=a;a=b;b=t;}//互换数据,用中间变量cout<<a<<‘t’<<b<<endl;//输出变量}输出结果:37嵌套的条件语句x=100;a=10;b=20;ok1=5;ok2=0;if(a<b)if(b!=15)if(!ok1)
x=1;else
if
(ok2)
x=10;
x=-1;输出结果:x=-1条件运算符是C++中的独一的三目运算符。注意:1.条件运算符的优先级比赋值运算符高
表达式1?表达式x=(x=3)?x+2:x-3
2:表达式
32.联合方向自左至右
a>b?a:c>d?c:d3.三个表达式的种类可不一样
z=a>b?'A':a+bx=9,y=6,
z=5;x=((x+y)%z>=x%z+y%z)?1:0;cout<<"x="<<x<<endl;输出结果:x=0x=1;y=2;z=3;x+=y+=z;cout<<〔z+=x>y?x++:y++〕<<endl;输出结果:9履行以下程序段后,变量a,b,c的值分别是:intx=10,y=9;inta,b,c;a=(--x==y++)?--x:++y;b=x++;c=y;输出结果:x=8y=10a=8b=8x=9c=10voidmain(void){inta=5,b=1,c=0;if(a=b+c)cout<<“*n〞;elsecout<<“$$$n〞;}输出结果:*switch语句P69switch(grade)case‘A:’cout<<“100~85n〞;case‘B:’cout<<“84~70n〞;case‘C:’cout<<“69~60n〞;case‘D:’cout<<“nopassn〞;default:cout<<“errorn〞;}假如
grade
为‘A’,那么结果为100~8584~7069~60nopasserror注意:1、switch
与
if
不一样,它仅能判断一种逻辑关系,即表达式能否等于指定的常量,而
if
可以计算并判断各样表达式。2、case子句后一定为常量,经常是整型和字符型。3、default能够省略,这时,不知足条件什么也不履行。4、case和default只起标号的作用,次序能够颠倒,颠倒时注意后边的
break
语句。5、多个case
case语句能够共用一组程序。‘A’:case
‘B’:case‘C’:cout<<例子:intx=1,y=0,switch(x)
“pass!n〞;a=0,b=0;{case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}cout<<“a=“<<a<<t’‘<<“b=〞<<b<<endl;输出结果:a=2b=1while语句P73注意:1、循环体假如为一个以上的语句,用{}括起。2、循环体内或表达式中一定有使循环结束的条件,即必定有一个循环变量。3、while表达式能够成为语句,要特别当心。voidmain(void){inty=10;while(y--);cout<<“y=〞<<y<<endl;}输出:y=-1循环:10次do—while语句P75注意:do—while第一履行循环体,而后再判断表达式,起码履行一次循环体。当第一次循环表达式的值为真时,while与do—while的结果完好相同,否那么结果不相同。s=7;dos-=2;while(s==0);cout<<“s=〞<<s<<endl;输出:s=5for语句P76注意:1、当型循环,条件测试是在循环开始时进行,有可能一次也进入不了循环体。2、for语句中的三个表达式能够局部省略或所有省略,但;不可以省略,假定省略表达式2,那么表示循环条件为真。3、for
语句中三个表达式能够是任何有效的
C语言表达式。voidmain(void){
char
i,j;for(i=
‘a’,j=
‘z’
;--i<j);i++,jcout<<i<<j;cout<<endl;}输出:azbycxlomn循环的嵌套P79注意:1、循环体内有多个语句要用{}括起来。2、书写格式要清楚。break语句和continue语句P79break只好退出一层循环或switch语句。a=10;y=0;do{a+=2;y+=a;cout<<“a=“<<a<<“,y=“<<y<<endl;if(y>50)break;}while(a=14);第一次:a=12y=12第二次:a=16y=28第三次:a=16y=44第四次:a=16y=60continue:其作用为结束本次循环voidmain(void){inti;for(i=1;i<=5;i++){if(i%2)cout<<“*〞;elsecontinue;cout<<“#〞;}cout<<“$n〞;}输出:*#*#*#$在循环体中,break从循环体内跳出循环体,提早结束循环。continue:其作用为结束本次循环,即跳过循环体中下边还没有履行的语句,接着进行下一次能否履行循环的判断。求素数:只好够被1与自己整除的数。判断一个数t能否为素数,用2到t-1循环除。for(i=2;i<t;i++)if(t%i==0)break;if(i==t)cout<<“是素数。n〞;elsecout<<不“是素数n〞;进一步,因为t不行能被大于t/2的数整除,所以可将循环次数降低。第四章函数与编译预办理函数是C++的根本模块为何要使用函数?1、防备重复的编程。2、使程序更为模块化,便于阅读、改正。所编写的函数应尽量少与主调函数发生联系,这样便于移植。1、一个源程序言件由一个或多个函数构成,编译程序以文件而不是以函数为单位进行编译的。2、一个程序能够由多个源文件构成,能够分别编译,一致履行。3、一个程序一定有且只有一个main()函数,C++从main()函数开始履行。4、C++语言中,所有函数都是平行独立的,无主次、互相包含之分。函数能够嵌套调用,不行嵌套定义。5、从使用角度来说,分标准函数和用户自定义函数;从形式来说,分无参函数和有参函数。库函数是C++编译系统已预约义的函数用户在程序中,依据应用的需要,由用户自己定义函数,这种函数称为用户自定义的函数。依据定义函数或调用时能否要给出参数,又可将函数分为:无参函数和有参函数。函数定义的一般形式一、无参函数主调函数其实不将数据传给被调函数。无参函数主要用于达成某一操作。二、有参函数主调函数和被调函数之间有数据传达。主调函数能够将参数传达给被调函数,被调函数中的结果也能够带回主调函数。函数参数和函数的值形参是被调函数中的变量;实参是主调函数赋给被调函数的特定值。实参能够是常量、变量或复杂的表达式,不论是哪一种状况,在调用时实参一定是一个确立的值。形参加实参种类相同,一一对应。形参一定要定义种类,因为在定义被调函数时,不知道详细要操作什么数,而定义的是要操作什么种类的数。1、在未出现函数调用时,形参其实不占内存的储存单元,只有在函数开始调用时,形参才被分派内存单元。调用结束后,形参所占用的内存单元被开释。2、实参对形参变量的传达是“值传达〞,即单向传达。在内存中实参、形参分占不一样的单元。3、形参只作用于被调函数,能够在其他函数中使用相同的变量名。voidfun(intx,inty){x=x*10;y=y+x;cout<<x<<‘t’<<y<<endl;}voidmain(void){inta=2,b=3;fun(a+b,a*b);cout<<a<<‘t’<<b<<endl;}输出结果:505623形参实参种类相等,一一对应形参一定要定义种类,因为在定义被调函数时,不知道详细要操作什么数,而定义的是要操作什么种类的数。形参是被调函数中的变量;实参是主调函数赋给被调函数的特定值。在函数调用语句中,实参不用然义数据种类,因为实参传达的是一个详细的值(常量),程序可依照这个数值的表面形式来判断其种类,并将其赋值到对应的形参变量中。函数的返回值函数的返回值经过return语句获取。函数只好有独一的返回值。函数返回值的种类就是函数的种类。return语句能够是一个表达式,函数先计算表达式后再返回值。return语句还能够停止函数,并将控制返回到主调函数。一个函数中能够有一个以上的return语句,履行到哪一个return语句,哪一个语句起作用。既然函数有返回值,这个值自然应属于某一个确立的种类,应当在定义函数时指定函数值的种类。不带返回值的函数可说明为void型。函数的种类与函数参数的种类没相关系。假如函数的种类和return表达式中的种类不一致,那么以函数的种类为准。函数的种类决定返回值的种类。对数值型数据,能够自动进行种类变换。函数体的种类、形式参数的种类一定在函数的定义中表达出来。函数的调用形参加实参种类相同,一一对应。在一个函数中调用另一函数〔即被调用函数〕需要具备哪些条件呢?被调用的函数一定是已存在的函数2)假如使用库函数,一定用#include<math.h>函数调用按照先定义、后调用的原那么,即被调函数应出此刻主调函数以前。floatmax(floatx,floaty)//形参一定说明参数种类{floatz;被调函数先定义z=(x>y)?x:y;returnz;}voidmain(void){floata,b,c;cin>>a>>b;c=max(a+b,a*b);cout<<“Themaxis
实参传达的是一个详细的值,不用说明参数种类〞<<c<<endl;}假如使用用户自己定义的函数,而该函数与调用它的函数〔即主调函数〕在同一个程序单位中且地点在主调函数以后,那么一定在调用此函数以前对被调用的函数作申明。voidmain(void){floata,b,c;floatmax(float,float);//函数原型说明cin>>a>>b;c=max(a,b);cout<<“Themaxis〞<<c<<endl;}float
max(floatx,floaty)//
函数定义{floatz;z=(x>y)?x:y;returnz;}voidmain(void){intx=2,y=3,z=0;voidadd(int,int,int);cout<<“(1)x=“<<x<<“y=“<<y<<“add(x,y,z);
z=
“<<z<<endl;cout<<(“(3)x=“<<x<<“y=“<<y<<“z=“<<z<<endl;}voidadd(intx,inty,intz){z=x+y;x=x*x;y=y*y;cout<<(“(2)x=“<<x<<“y=“<<y<<“z=“<<z<<endl;}x=2y=3z=0x=4y=9z=5x=2y=3z=0编写程序,分别计算以下函数的值(x从键盘输入)f1x3x32x21f2xx22x1floatf1(floatx){floaty;y=3*x*x*x+2*x*x-1;returny;}voidmain(void){floatx,y;cin>>x;y=f1(x);cout<<“x=“<<x<<“,y=“<<y<<endl;}编写程序,分别计算以下函数的值(x从键盘输入)s1111x1xx2x3当最后一项小于时,累加结束。floatfun(floatx){floats=1,t=1;do{t=t/x;s+=t;}while(t>0.00001);returns;}voidmain(void){floatx;cin>>x;cout<<“s=“<<fun(x)<<endl;}函数的嵌套调用语言中,所有函数都是平行独立的,无主次、互相包含之分。函数能够嵌套调用,不行嵌套定义。intmax(inta,intb){intc;intmin({return
int
a,intb)(a<b?a:b);}c=min(a,b);return(a>b?a:b);}int{
min(intreturn
a,intb)(a<b?a:b);}int
max(inta,intb){intc;c=min(a,b);return(a>b?a:b);}f(k,n)1k2k3knkintpower(intm,intn)//m^n{inti,product=m;for(i=1;i<n;i++)product=product*m;returnproduct;}intsum_of_power(intk,intn)
//n^k
的累加和{inti,sum=0;for(i=1;i<=n;i++)sum+=power(i,k);returnsum;}voidmain(void){intk,m;cin>>k>>m;cout<<"f("<<k<<","<<m<<")="<<sum_of_power(k,m)<<endl;//m^k的累加和}函数的递归调用在调用一个函数的过程中直接或间接地调用函数自己,称为函数的递归调用。用递归方法求n!1
n=0,1n!=
n*(n-1)!
n>1float
fac(intn){floaty;if((n==0)||(n==1)elsey=n*fac(n-1);returny;
y=1;}voidmain(void){floaty;intn;cout<<“Inputn:n〞;cin>>n;cout<<n<<“!=〞<<fac(n)<<endl;}intsub(int);voidmain(void){inti=5;cout<<sub(i)<<endl;}intsub(intn){inta;if(n==1)return1;a=n+sub(n-1);returna;}算法相同,层层调用,每层函数的变量所占内存单元不一样。作用域和储存类作用域是指程序中所说明的表记符在哪一个区间内有效,即在哪一个区间内能够使用或引用该表记符。在C++中,作用域共分为五类:块作用域、文件作用域、函数原型作用域、函数作用域和类的作用域。块作用域我们把用花括号括起来的一局部程序称为一个块。在块内说明的表记符,只好在该块内引用,即其作用域在该块内,开始于表记符的说明处,结束于块的结尾处。在一个函数内部定义的变量或在一个块中定义的变量称为局部变量。在函数内或复合语句内部定义的变量,其作用域是从定义的地点起到函数体或复合语句的结束。形参也是局部变量。主函数main中定义的变量,也只在主函数中有效,相同属于局部变量。不一样的函数能够使用相同名字的局部变量,它们在内存中分属不一样的储存区间,互不扰乱。注意:拥有块作用域的表记符在其作用域内,将障蔽其作用块包含本块的同名表记符,即变量名相同,局部更优先。voidmain(void){inta=2,b=3,c=5;cout<<a<<‘t’<<b<<t‘’<<c<<endl;{inta,b=2;a=b+c;cout<<a<<‘t’<<b<<t‘’<<c<<endl;}c=a-b;cout<<a<<‘t’<<b<<t‘’<<c<<endl;}voidmain(void){inta=1,b=2,c=3;++a;c+=++b;{intb=4,c;c=b*3;a+=c;cout<<“first:〞<<a<<t’<<b<<‘t‘’<<c<<endl;a+=c;cout<<“second:〞<<a<<t’‘<<b<<t‘’<<c<<endl;}cout<<“third:〞<<a<<t’‘<<b<<t‘’<<c<<endl;}文件作用域在函数外定义的变量称为全局变量。全局变量的作用域称为文件作用域,即在整个文件中都是能够接见的。其缺省的作用范围是:从定义全局变量的地点开始到该源程序言件结束。当在块作用域内的变量与全局变量同名时,局部变量优先。全局变量增添了函数间数据联系的渠道,在函数调用时能够获取多于一个的返回值。intint
min;max(intx,int
y){intz;min=(x<y)?x:y;z=(x>y)?x:y;returnz;}voidmain(void){inta,b,c;cin>>a>>b;c=max(a,b);cout<<“Themaxis〞<<c<<endl;cout<<“Theminis〞<<min<<endl;}运转结果:Themaxis4Theminis1在同一个源文件中,外面变量与局部变量同名,那么在局部变量的作用范围内,外面变量不起作用。inta=3,b=5;intmax(inta,intb){intc;c=a>b?a:b;returnc;}voidmain(void){inta=8;cout<<max(a,b)<<endl;}输出结果:8intx;voidcude(void){x=x*x*x;}voidmain(void){x=5;//假定改为intx=5,输出结果为5cude();cout<<x<<endl;}输出结果:125在块作用域内可经过作用域运算符“::〞来引用与局部变量同名的全局变量。#include<iostream.h>inti=100;voidmain(void){inti,j=50;i=18;//接见局部变量i::i=::i+4;//接见所有变量ij=::i+i;//接见所有变量i和局部变量cout<<〞::i=〞<<::i<<n’;//’::i=104cout<<〞i=〞<<i<<n’;//i=18cout<<〞j=〞<<j<<n’;//j=108
j}函数原型作用域在函数原型的参数表中说明的表记符所拥有的作用域称为函数原型作用域,它从其说明处开始,到函数原型说明的结束处结束。floattt(intx,floaty);//函数tt的原型说明因为所说明的表记符与该函数的定义及调用没关,所以,能够在函数原型说明中只作参数的种类说明,而省略参量名。floattt(int,float);静态储存:在文件运转时期有固定的储存空间,直到文件运转结束。动向储存:在程序运转时期依据需要分派储存空间,函数结束后立刻开释空间。假定一个函数在程序中被调用两次,那么每次分派的单元有可能不一样。动向局部变量未被赋值时,其值为随机值。其作用域的函数或复合语句结束时,空间被程序回收。程序履行到静态局部变量时,为其在静态区开拓储存空间,该空间向来被保留,直到程序运转结束。因为储存在静态区,静态局部变量或全局变量未赋初值时,系统自动使之为0。intfun(inta){intc;staticintb=3;c=a+b++;returnc;}voidmain(void){intx=2,y;y=fun(x);cout<<y<<endl;y=fun(x+3);cout<<y<<endl;}输出结果:58intf(inta){intb=0;staticintc=3;b=b+1;c=c+1;returna+b+c;}voidmain(void){inta=2,i;for(i=0;i<3;i++)cout<<f(a)<<endl;}输出结果:789intfunc(inta,intb){staticintm=0,i=2;i+=m+1;m=i+a+b;return
m;}voidmain(void){intk=4,m=1,p;p=func(k,m);
cout<<p<<endl;p=func(k,m);cout<<p<<endl;}输出:8,17全局变量的储存方式〔externstatic〕全局变量是在函数的外面定义的,编译时分派在静态储存区,假如未赋初值,其值为0。1、extern储存类型全局变量的默认方式,当在一个文件中要引用另一个文件中的全局变量或在全局变量定义以前要引用它时,可用extern作说明,相当于扩大全局变量的作用域。2、静态〔
static〕储存类型它仅能在本文件中引用,即便在其余文件顶用变量的作用域范围。程序的作用是:给定b的值,输入a和m,求文件中的内容为:
extern说明也不可以使用。相当于限制了全局a×b和am的值。int
a;
外面全局变量定义voidmain(void){extern
int
power(int);int
b=3,c,d,m;cin>>a>>m;c=a*b;cout<<a<<“*〞<<b<<“=“<<c<<endl;d=power(m);cout<<a<<“〞<<m<<“=“<<d<<endl;}文件中的内容为:externinta;外面全局变量说明intpower(intn){inti,y=1;for(i=1;i<=n;i++)y*=a;引用文件外定义的全局变量returny;}静态局部变量:static在函数内部定义,储存在静态储存区,与不可以引用。全局静态变量:static在函数外面定义,只限在本文件中使用,与当变量名相同以致作用域相重时,起作用的是近来说明的那个变量。
auto对应,在其他函数中extern对应。内联函数的实质是用储存空间〔使用更多的储存空间〕来换取时间〔减少履行时间〕内联函数的定义方法是,在函数定义时,在函数的种类前增添修饰词inline。
.inlineint
max(int
x,inty){intz;z=(x>y)?x:y;returnz;}voidmain(void){inta,b,c;cin>>a>>b;c=max(a+b,a*b);cout<<“Themaxis〞<<c<<endl;}使用内联函数时应注意以下几点:1、C++中,除在函数体内含有循环,switch分支和复杂嵌套的if语句外,所有的函数均可定义为内联函数。2、内联函数也要定义在前,调用在后。形参加实参之间的关系与一般的函数相同。3、关于用户指定的内联函数,编译器能否作为内联函数来办原因编译器自行决定。说明内联函数时,不过恳求编译器当出现这种函数调用时,作为内联函数的扩展来实现,而不是命令编译器要这样去做。4、正如前面所述,内联函数的实质是采纳空间换取时间,即可加快程序的履行,当出现频频调用同一内联函数时,程序自己占用的空间将有所增添。如上例中,内联函数仅调用一次时,其实不增添程序占用的储存间。拥出缺省参数值和参数个数可变的函数在C++中定义函数时,同意给参数指定一个缺省的值。在调用函数时,假定明确给出了这种实参的值,那么使用相应实参的值;假定没有给出相应的实参,那么使用缺省的值。〔举例说明〕intfac(intn=2){intt=1;for(inti=1;i<=n;i++)t=t*i;returnt;}voidmain(void){cout<<fac(6)<<endl;//改为fac〔〕输出结果为2}输出:720intarea(intlong=4,intwidth=2){returnlong*width;}voidmain(void){inta=8,b=6;cout<<area(a,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化创意产业园区场房屋租赁及文创产品开发合同
- 餐饮厨师行业交流活动与合作合同
- 采棉机驾驶员劳务派遣合同范本
- 2025年综合类-保险经纪人考试-第十一章再保险实务历年真题摘选带答案(5卷单选题百道集合)
- 2025年综合类-井下作业工具工-井下作业工具工(中级)历年真题摘选带答案(5卷单选100题合辑)
- 2025年综合类-临床医学检验技术(士)-放射免疫技术历年真题摘选带答案(5套单选100题合辑)
- 2025年综合类-中级系统集成项目管理工程师-项目采购管理历年真题摘选带答案(5卷单选题百道集合)
- 2025年综合类-中级农业经济-第四章农产品质量与食物安全历年真题摘选带答案(5套单选100题合辑)
- 学科文体竞赛管理办法
- 学校全面风险管理办法
- 2023年12月2024住房和城乡建设部标准定额研究所公开招聘5人笔试历年高频考点-难、易错点荟萃附答案带详解
- 《锅炉安全培训》课件
- 运维安全审计系统堡垒机
- 血管病的早期病情评估和治疗
- 全科门诊教学知情同意书
- 输电线路基础占地补偿协议书
- 2023年江西工程职业学院教师招聘考试历年真题库
- 蒙古国金矿开采业的现状及未来发展趋势研究的开题报告
- 螺钉螺栓扭力标准
- 发电机用柴油机说明书
- 静脉药物调配中心PIVAS静脉用药配置中心静脉药物配置中心静配中心细胞毒性药物的配置方法
评论
0/150
提交评论