重点知识点总结及习题_第1页
重点知识点总结及习题_第2页
重点知识点总结及习题_第3页
重点知识点总结及习题_第4页
重点知识点总结及习题_第5页
已阅读5页,还剩137页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C++的特点:1.支持抽象数据类一个c++程序由一个或多个函数构成,并且在这些函数中只有一个主函数2据类型、运算符与表达布尔型

字符型char空类型

单精度型双精度型

指针类型数组类型

枚举类型联合类型结构类型类类型2.1C+整数1,false可以转换成整数0。与此对应,整数也可以隐式的转换成bool值:非0true,0false。char据通常占用1个字节的空间。intlongintdoublelongint时,int和最小值是什么:char、short、int、long、float、double、longdouble、unsigned。一般不同,并且在内存中分别占据不同的单元。枚举:将变量的值一一列举出来,每个枚举成员(枚举符)都与一个整数相对应。按默化。如果某个枚举中所有枚举符的值均非负,该枚举的表示范围是[0:2K-1],2K值范围就是[-2K:2K-1]。它在内存中占据一个单元。类类型:类是体现面 命名:遵循标识符命名规则。定义:格式:typedef<已有类型名><新类型名>布尔常量字符常量97。以转义字符‘\’开始的字符常量后跟不同的字符表示不同的特殊字符。字符串常量‘\0‘ab‘\0注意字符常量与字符串常量在表示、、运算方面的区别。整型常量(默认情况下为正数。00-70378,01230x0X0-9A-F(a-f)的字母0x123,0x3ab。浮点型常量如:11.3、.2、2.3e10、-2.3E-1枚举常量枚举形式:enum<枚举名>{<枚举符表>};符号常量定义形式:const量的值不可以改变。constC+1.-p.next,p-2++-++---233+-*和Newp=newdelete*/+3%5(45<<8>>3,6<<=>==789!3?=及其扩展*=,2.1C+C++中,I/O使用了流的概念-字符(或字节)I/O设备传送和接收一系列字节从内存流出到一个设备。要使用C++标准的I/O流库的功能,需要包括两个头文件:iostream.h用于提供基本的输入输出功能,iomanip.h用于提供格式化的功能。I/O的书写格式(基本数据类型的输入输出头文件iostream.h包含有cin和cout对象,对应于标准输入流和标准输出流。流运出,可以向cout输出流字符。 oworld.”<<endl; oworld,然后换行inti,j; //i,j所在头文件 设显示小数精度为n 设域宽为n 16进制数小写输出 指定在数值前输出进制(0表示八进制,0x0X表示十六进制)表2.2 I/O流的常用控制符(1)char、int、shortint、longint、double、long(2)signedint、unsigned本题主要考查的知识点是各种类型所占用的空间的大小以及相应的表数范围。在32位计算机中,char1字节,shortint2个字节,int4个字节,longint4个字节,double8sizeof符用于求解某种数据类型的大小。shortlongint。答案为: 饰符signed和unsigned只能用于修饰字符型和整型。答案为: (c)my name:d。 int{

constintx;return}本题主要考查对符号常量的理解。constconst-a&&b-公 year4100400主要考查对逻辑表达式的理解和书写。答案为:6:下列选项中两个表达式的运算结果相同的是((a)3/2和 (b)3/2和 仍为整型即1;3.0/2和3/2.0中一个操作数为整型另一个为浮点型,运算时整型隐式转换1.5。答案为:(c)。 voidmain(){inta=2,b=4,i=0,x;}a>ba>b&&++i++ii0。答案100x%2?“oddeven”11000001100001'a',!0%11%10,100&&00。答案为:0。x%20,0?”odd”:”even”结例题9:下列程序运行结果为: voidmain(){intdoubleb=23.123456789;cout<<setfill('');}a,b’\t’为转义字符,其含义是跳过一个制表位。不设置输62323.1235所以使用完后要还原为6位默认值四行中设置setprecision(0)与setprecision(1)③n。所以第五行输出结果为:23.1234568。setiosflags(ios::scientific(默认为6位)时,以指数形式显示结果。否则根据设置的(或默认的)显示精度显示n位有效⑤setiosflags(ios::showbase)为指定在数值前输出进制。hex置基数为16,且该操作保持效力,所以使用完后应该恢复为默认值10进制。第九行输出结果为:0x17 ⑥setw(n)设域宽为n个字符,setfill(c)c,setiosflags(ios::left)为 一 选择C++语言基本数据类型的是((a)字符 一、C++语言程序自定义标识符是(。 8( a=1,b=2,c=3,则表达是++a||-b&&++c( () (enum则下列叙述中错误的是((a)枚举常量RED的值为1 (b)枚举常量BLUE的值为1(c)枚举常量YELLOW的值为7 (d)枚举常量PURPLE的值为15下列程序的运行结果正确的是(void{constdoublepi=3.1415926;}intx=3,y=5;x&y++%3( 下列常量正确的是((a)” (c) (d)1.8E-charx=97x((a)1个 (b)2个 (c)4个 (d)8个 若要为unsignedint定义一个新的名字UINT应采用的语句 Voidmain(){inta,ba=;b=;a=/2;}大多数C++程序都要包含头文件 三 编程sizeof运算符。一、选择题dabbcabcda二、填空题2\0typedefunsignedint a- 三、编程题#include<iostreamh>voidmain(){int //用于检查输入数据的{}}

#include<iostreamh>voidmain(){intenummonth{Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec};char*p;cout<<"Thesizeofchar<<"Thesizeofint<<"Thesizeofshortintis:"<<sizeof(short<<"Thesizeoflongintis:"<<sizeof(long<<"Thesizeoffloat<<"Thesizeofdouble<<"Thesizeoflongdoubleis:"<<sizeof(long<<"Thesizeofsignedint<<"Thesizeofunsignedint<<"Thesizeofarray<<"Thesizeofmonth<<"Thesizeofp}3C++指按照语句在程序中出现的先后次序一条一条的顺次执行包含语句表达式语句,空语句:指只有一个分号而没有表达式的语句,它不作任何操作和运算。格式为:;函数调用语句:是由函数调用表达式加一个语句结束标志(分号“;”)构成的语句。制来实现。printf和scanf是标准的输入输出函数,主要在C程序设计中使用,其包含在头文件stdio.h中。在C++中,I/O流完全取代了它们,使用I/O流输入输出时,必须iostream.h。从键盘输入语句格式为:cin>12>>…];cout1[<注意:连续输入多项数据时应键入空白字符(Tab)将相邻的两项数据分开。而连续输出时,cout不会在相邻数据项间加分隔符,为了增强显示效作为结束。注意空语句;和空复合语句{}是等价的。if格式:if(<if…else

12>可以是一条语句也可以是复合语句。②if语句支持多种形式的嵌套使用,但一般嵌套层次不超过三层。另外约定else总是case11>case2…casenn>[default:n+1>]}breakswitchdefault(defaultswitch)。caseswitchcasebreakswitch但在要表示一个范围,或描述一类对象时(A,B,CD)有可能几casebreak环控制语句:while,do…while,forwhilewhilewhilewhiledo…while是的,所以应尽量使用while语句而避免使用do…while语句。循环,退出for循环;<表达式3>可以称为修正表达式,一般用于在每次循环体执行之后,break例题1:下列程序的运行结果为 voidmain({charc=’@’if(c>='A'&&c<='Z')cout<<"是大写字母";elseifc>='a&&c<='z')cout<<"是小写字母";elsecout<<"是其它字符}ifcc>='A&&c<='Z',如果满足则输出"";否则判断cc>='a'&&c<='z',如果满足则输出"是小写字母"否则输出"是其它字符"。elseif配对。2:已定义:chargrade;A、B、C时输出合格,成绩为D时输出不合格,switch语句正确的是()。casecasecase‘C’:cout<<”合格”;break;case‘Dcout<<”不合格”;break;default:cout<<”请重新输入:”;}casecasecase‘Ccout<<”合格case‘D’:cout<<”不合格”;default:cout<<”请重新输入:”;}case‘A‘B’,Ccout<<”合格”;break;case‘D’:cout<<”不合格”;break;default:cout<<”请重新输入:”;}caseA:casecaseC:cout<<”合格”;break;caseD:cout<<”不合格”;break;default:cout<<”请重新输入:”;}switchswitch语句执行过程中,找到第一个相匹配的表达式casebreakswitch语句执行其后的语句。求;switchcasecase分支,选项c错误;case后的表达式只能是整型、字符型或枚举型常量表达式,选项d中case后的A、B、C、Da。 y=x- { i int { int

1100sumsum赋值。答案为:将①改为inti=1,sum=0;whilewhile(i<=100);例题4:循环语句for(inti=0;i<=5&&!i;i++)cout<<i<<endl;执行循环次数为 )(a)1次 (b)3次 (c)5次 (d)6次本题考查对for循环的理解以及表达式运算。执行for循环i的初0,第一次循环时表达式0<=5&&!0结果为1所以执行循环体输出0i自加为1,计算表1<=5&&!1结果0,所以退出循环。答案为:i,sum=0;与上边程序段不等价的是()intsum=0,i=1;inti=1,sum=0;{}inti=1,sum=0;{}inti,sum=0;本题主要考查对各种循环结构的以及它们之间转换关系的理解。本题中的程序段是求解1到100的和,循环结束后i的值为101,sum的值为5050。选项a、b分别用do…whilewhile循环完成求解1到100的和;选项c是循环,通过break语句退出循环,其作用也是求解1100选项d中i先自加然后求和,其作用为求解2101的和,循环结i101,sum5150。答案为:d。 voidmain(){intx,y,cmultiple;{}}voidmain(){int{}}7本题考查理解程序的能力。(1)中求解两个数x,y的最小公倍数思路为若x能够被y整除则x就是这两个数的最小公倍数,否则判断x的整数倍是否能被y整除,直到x某个倍数可以被y整除,则该数即为这两个数的最小公倍数。(2)中求解两个数x,y的最大公约数思路0,x和y答案为:(1):168(2)最大公约数121*2<1+2,232*3>2+3void{intnum,product=1,sum=0,n;{ ①n=num ②n){ ③ }if(product>sum)}}本题中变量num表示1100product用于存放每位数的乘积,变量sum用于存放每位数的和变量n用于存放求解每位数的中间结果。外层for循环用于控制判断1100内层while用于计算每位数的积与每位数的和,if语句用于判断该数的初它是num的副本而后用于存放计算每位数的中间结果;②处为退出while循环的条件,当n100答案为:①②③8:以下程序的功能是判断一个数是否为素数。请填空。void{int intisprime=1;for(inti=2;i<=num-1;i++) {}

}

cout<<num<<"是一个素数。"<<endl;cout<<num<<"endl;本题中变量num存放要判断的数,变量isprime用于记录该数是否为素数,当isprime1时即该数为素数,否则为合数。判断思路为如果num能被2到num-1的任意一个数整除则该数不是素数。①处需要输入待判断的数,②处为判断条件,当检测到2到num-1中第一个能num答案为:①cin>>num②num%i==0③9:3,5,7voidmain(){int

cout<<num<<"3、5、7cout<<num<<"3、5、7}算法思想:判断某年某月有多少天,每个月的天数有四种可能:、、、、、、月为天,4、6、9、11月为30闰年的2月有29闰年则2月为28天。因为每voidmain(){intyear,month,days,leap;swit{casecasecasecasecasecasecase12:days=31;break;case4:casecasecase11:days=30;break;caseelseif(year%4==0&&year%100!=0)elseleap=0;if(leap)days=29; }}11:编写一个程序。计算若一头母牛,它每年年初生一头小母牛,每头小母牛从出生10假设f(n)表示第n年的母牛数,已知f(0)=0,f(1)=2,f(2)=3,f(3)=4,推得在第n年时应有f(n-3)头母牛出f(n-3)头母牛,所以第n年共有f(n-1)+f(n-3)头母牛据此得出数学表达式:f(n)=f(n-1)+f(n-3)。在下边的参考程序中分别用变量sum、sum1、sum2、sum3f(n),f(n-1),f(n-2),f(n-3)n410。voidmain(){intsum1=2,sum2=3,sum3=4,sum=0,n=10;for(inti=4;i<=n;i++){}}例题12:计算 项相加,所以采用循环结构处理。循环的条件是当时继续运算直到这个条件不满足时就达到了题目要求的精度,则停止运算。循环体中完成三件事,首先是求出本次(第i次)循环中的的值,然后计算当前的e,最后完成循环变量增1的操作。在求解本题时主#includeiostream.h>intmain(){doublee=1.0;doublex=1.0;inti=1;{}}

cout<<"e="<<e<<endl;return0;一 选择 ) while(!1)(a)0 (d)无数 )voidmain(){intforif(i%2)cout<<i;elsecontinue;}} 二 填空 continue语句实现的作用是 3.若输入”china2008!”,运行下列程序的输出结果为 #include<iostream.h>#include<stdio.h>voidmain(){charintletters=0,digits=0,others=0;cout<<"Pleaseinputalinecharaters"<<endl;while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')

if(c>='0'&&}

}1!+2!+……+18!的计算,请将程序补充完整。voidmain(){doublesum=0,fac=1;for(inti=1;i<=18;i++){ }}三 编程70-7960-690-59 153=13+53+331531000

*********************************AABCABCDEABCDEF 第二天早上又将剩下的桃子一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,发现只剩一个桃子了,求猴子第一天究竟摘 baadpleaseinputalinecharaters voidmain(){doublegrade;char*{}elseelseif(grade>=60)}voidmain(){intnum1,num2,num3,num;{}{}{}}voidmain(){"<<endl;for(inti=100;i<=200;i++){}}voidmain(){intcout<<"100~999中的水仙花数为:"<<endl;for(inti=100;i<=999;i++){}}voidmain(){intcout<<"1000之内的所有完数为:"<<endl;for(inti=1;i<=1000;i++){for(intj=1;j<=i/2;j++)}}voidmain(){int{cout<<'';cout<<"*";}{cout<<'';cout<<"*";}}voidmain(){inti,j;charx;{cout<<'';{}}}voidmain(){intfor(intday=1;day<10;day++)//dayn}voidmain(){charplay1,play2;char*result;{{caseif(play2=='Rresult="2elseif(play2=='Presult="1赢!";elseresult="平局!";case'R':if(play2=='P')result="2赢!";elseif(play2=='Sresult="1赢!";elseresult="平局!";caseif(play2=='Sresult="2elseif(play2=='Rresult="1赢!";elseresult="平局!";}}}voidmain(){intcout<<"20项为:"<<endl;for(int{}}voidmain(){for(inttitle=1;title<=9;title++)for(int{for(intline=1;line<=row;line++)}}第4型。构成数组的这组元素在内存中占用一组连续的单元。可以用一个的数组名标识一维数组的定义1,2,n};‘\0(格式 这样会引起逻辑错误。可以通过sizeof(数组名)/sizeof(数组类型)来求得实际的数组长二维数组的定义1][2];序被在一维的空间中的。12二维数组的初始化第二、所有数值按顺序在一个花括号中给出。格式:1][若该数组为nm10n-1,20m-11:下面定义数组的语句正确的是(inti=6;chara[i]=“constinti=5;chara[i]= chara[6]=”chara5=”除const变量以外的变量,选项a中i为变量;选项b中字符串“o”含有6个字符,a5da5“o”含有6个字符,无法放在一个字符变量中。所以答案为:c2:ainta[][3]={{1,2,3},{4}};,a[1][2]的值为( 例题3:已知数组定义为inta[2][4];,下列对数组元素正确的为( 对二维数组的格式为:数组名[下标1][下标2];n行m列的二维数组其第一维的下标从0到n-1,第二维的下标从0到m-1。选项a和c格式错误,d中下标越界。答案为:b4:下列程序段错误的是(charstr1[8];charcharstr1[8];for(inti=0;i<7;i++)charstr1[8],str2[8]=””;strcpy函数将一个字符串到该字符数组或者用循环语句逐个为字符数组元素赋值。不5:下列说法正确的是( (b)定义inta[2];,则数组a有两个数组元素(c)inta[3];,则该数组中元素分别为:a[0],a[1],a[2],a[3]。数组中所有的元素具有相同类型,选项a错误;定义inta[3];则数组a中含有三个元素分答案为:b例题6:运行下列程序结果为 voidmain(){int{}}3×3intmain(){intchars[20]="Todayissunday!",t[10]="sun";{ &&s[j]==t[k];j++,k++); {cout<<"tsi<<endl;returni;}}return-}s0tttstss1skt(下标js(下标。因此,答案为:①t[k]!='\0'②t[k]=='\0'8:1010个数。、n-1(n,每次循环都从剩下的数中选择出最小的一个。如下给出排序过、0123第2第3 20 100#include<iostream.h>intmain(){constintCOUNT=10;intlist[COUNT];inti,j,tmp; {{}} return}C++中对数组下标说法正确的是(数组定义为:inta[2][2]={1,2,3,4}a[1][0]%3( 数组定义为:inta[][2]={5,6,1,2,3,8};则能用于计算数组下标的是( 运行下列程序结果为(voidmain(){intfor(inti=3;i>=0;i--} 运行下列程序结果为(voidmain(){int{}{}}mn数组包 行 个元素 a4ii-1voidmain(){intfor(inti=0; }voidmain(){charstr[20];inti=0,j=0;while(str[j]) for(j--;i<j&&str[i]==str[j];i++,j--); } voidmain(){int{}} voidmain(){int{}}输入为:241634×4(即该点的值在它所在的行中有17个人围成一个圈(0-16),从第0号的人开始从1报数,凡报到3的倍数的人 ①j++147258369**voidmain(){constintA1=2,A2=3,A3=2;inti,j,k;double{}}voidmain(){intarray[4][4],i,j,k,max,col,flag=0;{{{}}{}{}}}voidmain(){constintMAX=100;charstr[MAX];int{if(str[i]=='}}#include<iostream.h>voidmain(){constLENGTH=100;charstr[LENGTH];for(inti=0;{if(str[i]=='\0')str[i]=str[i]+}}voidmain(){intchars1[20]="o",s2[10]="world";{}}voidmain(){intarray[17],n=17,i,j=1;{{}{}}{)}}voidmain(){intarray[7]={1,3,5,7,9,11,13},x,low=0,high=6,mid,flag=0;{{}

}

}voidmain(){constintROW=10;constintCOL=10;intyh[ROW][COL],row,col;{}{{}}{}} 函数类型函数名(形式参数列表{}函数可以有返回值也可以没有返回值,当没有返回值时,函数类型为void型。每个函int函数类型函数名(形式参数列表格式:储空间和初值。参数传递主要有两种方式:按值传递和传递。按值传递传递形参值的改变就是对实参值的改变传递中需在定义形式参数时在形参前加符“&地址传递行匹配,仍无法匹配时,则报错。函数重载解析与函数定义或的顺序无关。0(指针。因此在被调用实参类型进行参数类型检查时并查数组的长度,因此在定义形参时可以只写数组名[],②将被调用函数的形式参数为数组的,当形式参数是一个数组类型的时程序的内存区域①②③④栈区,存放程序的局部数据,即各个函数中的数据。局部变量 全局变量外部变量的定义位置开始到本文件结束为止外部变量可被作用域内的所有函数直接,①在同一源文件中,允许外部变量和变量同名。在变量的作用域内,外部变量将被而不起作用。变量时,需要在函数内对被的外部变量进行说明。外部变量说明的一般形式为: 数据类型外部变量[定义格式:static 数据类型变量表;句话说,在程序执行期间,静态变量始终存在,但其它函数是不能它们的。②定义但不初始化,则自动赋以"0"(整型和实型)或'\0'(字符型;且每次调用它们所①在全局变量前加一个static,使该变量只在这个源文件中可用,称之为全局静态变量。②静态生命期局部生命期动态生命期这种生命期由程序中特定的函数调用(malloc()free())或操作符(newdelete)来1:下列函数定义语句正确的是(voidfun1(inti,int{}voidfun1(inti,int{void{cout<<”Thisis}}voidfun1(inti,int{}

return1;voidfun1(inti,int{}函数类型函数名(形式参数列表){}选项a中多了一个分号;函数可以嵌套调用但是不能嵌套定义,选项b在函数定义函数是错误的;若果函数类型定义为void型,则该函数没有返回值,选项c定义了void型函数2:C++函数的叙述中,正确的是(函数在被调用之前必须先或定定义为void型,选项b错误;如果一个函数自己调用自己则称为递归调用,这是允许的。选项d错误。函数在调用之前必须已经或定义过。答案为:c。例题3:下面的函数语句正确的是(intfun(intvar1=1,char*var2=”Beijing”,doubleintfun(int,char*=”Beijing”,doubleintfun(intvar1=1,char*var2=”Beijing”,doublevar3=3.14159);intfun(int,char*,doublevar3=12.34);intfun(intvar1=1,char*,double本题主要考查带默认参数的函数原型方法函数调用时实参与形参按照从左到右顺序匹配,在对默认值进行定义时应该从右向左定义。选项a和d都没有遵从对默认值定义时应该c3:b例题4:运行下列程序结果为 #include<iostream.h>intf(int[],int);voidmain(){inta[]={-1,3,5,-7,9,-}intf(inta[],int{inti,t=1;if(a[i]>0)t*=a[i];returnt;}6a1355:运行下列程序结果为(voidmain({charif(strcmp(str[2],s)<0)strcpy(s,str[2]);}strcpy(chardestination[],constcharstrncpy(chardestination[],constcharsource[],intnumchars); [],constcharsource[]); [],constcharsource[],intintstrcmp(constcharstring[],constcharstrlen(constcharstring[]例题6:运行下列程序的结果为 voidfun1(constdouble&{}voidfun2(double{}voidfun3(double{}void{} 参数也就是说对非const参数不允许做类型转换本题中对于函数fun1以及fun3在调用时参数都发生了数据类型转换,而对于函数fun2它的参数为非const的参fun2d。例题7:运行下列程序的结果为 intfindmax(intIarg[]);floatfindmax(floatFarg[]);doublefindmax(doubleDarg[]);{intfloatdoublecout<<"largestvalueintheIargis"<<(findmax(Iarg))<<"\n";cout<<"largestvalueintheFargis"<<(findmax(Farg))<<"\n";cout<<"largestvalueintheDargis"<<(findmax(Darg))<<"\n";return0;}intfindmax(int{intfor(int{{}}return}floatfindmax(float{floatmax=0;for(inti=0;i<6;i++){{}}return}doublefindmax(double{doublemax=0;for(inti=0;i<6;i++){{}}return}findmax()函数,根据传findmax()函数实现了重载。largestvalueintheIargis88largestvalueintheFargis363.2largestvalueintheDargis78.3454例题8:运行下列程序的结果为 intfun(int,int);voidmain(){}intfun(intn,int{ints1,n1;{}returnn-} 7654531201f(7,917-1=6例题9:运行下列程序结果为 void{for(int{staticintvar1=1;intvar2=1;}}void{}区,直到程序运行结束。静态局部变量只在第一次调用时被初始化。在本程序中for循环3var210:voidfun1(int);voidmain(){void}voidfun1(int{}voidfun1(double{}fun1。但是在主函以整型数据作为形参的fun1函数的定义或那么尽管调用时赋的实参1是整型,也无法调用以整型数据作为形参的fun1函数只能通过隐式数据类型转换与以double类型作为fun111:voidoutput(intvar1,int{}void{intvar1=300;int}本题主要考查变量的作用域在主函数中定义的变量var1和var2其作用域为本程序范围,在函数outputvar1var2的作用output函数范围内,因为它和主函数中定义的变量同名,所以在该函数范围内会主函数中定义的同名变量,其中的变量var1和var2的操作都是针对于形参变量,与主函数中定义的变量无关。当对output函数的调用结束后,形参变量,返回主函数,在主函数中的变量var1和var2仍为主函oname(voidmain(intargc,char*mainmainmain …vc6.0project→settings…→debug→”programarguments:”中,输入以空格分隔的各参数。程序文件名参数1voidmain(intargc,char*{cout<<"}例题13:使用重载函数的方法定义两个函数,用来分别求出两个int型数的点间距离和double型数的点间距离。两个int型点分别为A(5,8),B(12,15);两个double型点分别为(x2(x2x1)2(y2。函数sqrt()的作用是求平方根,使用该函数应包含头文件void{doubledoubledistance(double,double,double,double);intx1=5,y1=8,x2=12,y2=15;doublexd1=1.5,yd1=5.2,xd2=3.7,yd2=4.6;doubledisi=distance(x1,y1,x2,y2);cout<<"int型数的点间距离:";doubledisd=distance(xd1,yd1,xd2,yd2);cout<<"double型数的点间距离:";}doubledistance(inta1,intb1,inta2,int{cout<<"\n调用计算两个int型数的点间距离函数\n";doubles=sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));returns;}doubledistance(doublea1,doubleb1,doublea2,double{cout<<"\ndouble\n";returnsqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2));}14:fibonacci本题主要考查对递归函数的应用对于fibonacci数列边已经介绍这里使用递归完成,intfib(intn){if(n<3)returnreturn(fib(n-2)+fib(n-}void{for(inti=1;i<=10;i++)}15:打印某一年的年历。intDayOfYear(inty);intDaysOfMonth(intm);voidPrintMonth(intm);voidPrintHead(intm);boolIsLeapYear(inty);intweekDay;intyear;void{{cerr<<"1900。\n";} "<<year<<"年日历\n";cout<<"\nfor(inti=1;i<=12;i++)}voidPrintMonth(int{PrintHead(mintdays=DaysOfMonth(m);//该月的天数for(inti=1;i<=days;i++){if(weekDay==0){ }}}voidPrintHead(int{}

for(inti=0;i<weekDay;i++) intDaysOfMonth(intm){casecasecasecasecasecasecase12:returncasecasecasecase11:returncasereturn29;return}return}boolIsLeapYear(int{}52nnintDayOfYear(int{intn=y-1900;returnn;}下列函数定义语句正确的是(voidfun(int{}

intvar1=0;voidfun(int{}intfun(int{}

return1;returnintfun(int{return1;}下列叙述中正确的是(return(C++语言中函数返回值的类型是由()(a)return语句中的表达式类型 C++中,关于参数默认值的描述正确的是(使用重载函数编程序的目的是( (d)节省空系统在调用重载函数时,下列不能作为确定调用哪个重载函数的依据的选项是((a)函数 运行下列程序结果为(inlineintabs(intx){returnx<0?-}void{intvar1=10,var2=-} (b)(c) (d)|var1|+|var2|=-数组作为函数的形参,把数组名作为函数的实参时,传递给函数的是((c)0运行下列程序结果为(#include<iostream.h>intf(int[][3],int,int);voidmain(){int}intf(inta[][3],introw,int{inti,j,t=1;if(i==j)}return} 运行下列程序的输出结果为(intvar;{int{intvar=5;}return0;} 类型 在一个函数的定义或前加上关键字 方式 方式 #include<iostream.h>voidswap(int&,int&);voidmain(){inta=66,b=4;}voidswap(int&x,int{intt=x;} #include<iostream.h>#includevoidfun(intarray[],intn);voidmain(){intinti;}voidfun(intarray[],int{inti;}运行下列程序,若输入12345则输出结果 voidrev(intn){intx;{}}void{} voidfun(charPrChar='$',intnum=10);{charch;intnum;return}voidfun(charch,int{for(int{}} #include<iostream.h>voidfun();voidmain({inti;}voidfun({staticintm=0;}编写函数将华氏温度转换为摄氏温度,公式为c(F3259PX(x)((2*n-1)*x*Pn-1(x)-(n-1)*Pn-

(n(n(ncbccbacbddcmain 813213414.doubleftoc(double);voidmain(){}doubleftoc(double{doublec;returnc;}intnumo=0,nume=0;voidsta(inta[],int);voidmain(){constintint}voidsta(inta[],int{for(inti=0;i<n;i++)}

intabs(int);doubleabs(double);voidmain(){inta=-doubleb=-3.14;}intabs(int{}doubleabs(double{}doublep(double,int);voidmain(){}doublep(doublex,int{return

return}

intisprime(int);voidmain(){for(inti=6;i<=100;i+=2)for(intj=3;j<=i/2;j+=2){{}}}intisprime(int{intx=sqrt(n);for(inti=2;i<=x;i++)returnreturn}第6 指针、和动态空间管动

类型数据类型*unsignedlongint。&*间接运算在指针变量的定义和指针变量的中都有*p。但指针时的*p与定义指针变量时含义是不同,在指针变量的定义中如int*p;是指p是一个指向整型的指针,而在时*pp所指向的变量。const格式:const*指针常量*const指针变量名=指向常量的指针常量格式:const*const指针变量名=数组元素的如定义inta[5];则对数组的第i+1个元素的可以用a[i]或*(a+i)。intb[2][3];b[0],b[1]分别代表第一行和第二行的首地址。所以要数组元素b[i][j]可以用下列几种形式:*(*(b+i)+j)、*(b[i]+j)、*(b+i)[j]、如定义一个指向数组元素的指针,inta[5],*p=a;i+1个元素的可以用*(p+i)它等价于a[i]。对于二维数组如定义intb[2][3],*q=b[0];则数组元素b[i][j]可以用以下几种形(*指针名)[常量表达式*指针数组名[常量表达式函数指针就是指向函数的指针。(*函数指针名(参数表(*(函数指针数组](常用的字符串处理函数:函数原型:char*strcat(char*s1,chars2s1s1的地址函数原型:intstrcmp(constchar*s1,constchar*s2,[int函数原型:char*strcpy(char*s1,constchar函数说明:将s2所指向的字符串到s1所指向的字符数组中,然后返回s1的地址函数原型:intstrlen(constchar动态分newnew运算符用于申请所需的内存单元,返回指定类型的一个指针。new动态分配某种类型的变量格式:指针=new说明:指针应预先,指针指向的数据类型与new后的数据类型相同。若申请成功,则返回分配单元的首地址给指针;否则(比如没有足够的内存空间0new动态分配数组格式:指针=new数据类型[常量表达式newdeletedelete运算符用于new申请到的内存空间。格式一:delete指针;格式二:delete[常量]指针; 的格式为:类型&名=变量名是对所维系的目标赋值,而不是将维系到另一个目标上。③对void进 ④不能建 ⑤本身不是一种数据类型,所以没有的,也没有的指针⑥不可以有空1:下列语句正确的是(intintvar1=100,*p=var1;//cannotconvertfrom'int'to'intintvar1=100;char*p=&var1;//cannotconvertfrom'int*'to'charintvar1=100,*q;void*p=&var1;q=p;//cannotconvertfrom'void*' 'inta中pb中定义了bc中将一个整型变量的地址赋给了指向例题2:有如下定义intarray[3]={0,1,2},*p=array;,则要数组中的第二个元素,下列语句错误的是((a) (b) (c)*array+ (d)arraypad都是求出第二个元素的地址,然后取该地址中的值,所以这两个选项实现了对数组中第二个元素的;选项b为下3:程序改错题voidmain(){constchar*p="oworld!";//①intlen=0;while(p++)p-cout<<"thelenthof"<<p<<"+)地址是否存在,这是错误的。应改为:while(*p++)len++;4int*f()f代表的是( 例题5:运行下列程序结果为 constintN=3;voidprocess(float*p,intn,float(*fun)(float*p,intn));floatarr_add(floatarr[],intn){intfloat}floatodd_add(float*p,int{intfloatsum=0;}floatarr_ave(float*p,int{intfloatsum=0,ave;}floatarr_max(floatarr[],int{intfloatmax;}voidprocess(float*p,intn,float(*fun)(float*p,int{floatresult;}void{voidprocess(float*p,intn,float(*fun)(float*p,intn));floatarr_add(floatarr[],intn);floatodd_add(float*p,intn);floatarr_ave(float*p,intn);floatarr_max(floatarr[],intn);staticfloata[]={1.5,3.8,5.6};intn=N;cout<<"\nthesumof"<<n<<"elementis:"<<"\n";cout<<"\nthesumofoldelementis:"<<"\n";cout<<"\nthesumofaverageof"<<n<<"elementis:"<<"\n";cout<<"\nthesumofumof"<<n<<"elementis:"<<"\n";}process(float*p,intn,float*fun)(float*p,intn))的作用是通过函数指针调用不同的函数(其中第三个参数为函数指针process()函数,传递的第一个实参为数组首地thesumof3elementis:thesumofoldelementthesumofaverageof3element0thesum umof3element6:对于下列函数定义,说法正确的是(void{intint*p=&var1,*q=&var2;}void{intint&p=var1,&q=var2;}fun1与fun2fun1p、q中均存放var2的地址;运行fun2p、q均为var2fun1pvar1的地址,qvar2fun2pvar1的别名,qvar2的别名。fun1p、qvar2fun2pvar1的别名,qvar2的别本题主要考查和指针的区别。对于函数fun1(),p和q为指向整型的指针,它们分别被var1var2的地址,p=q则使pq中的地址即为var2的地址,所以最终p,q里都存放var2的地址对于函数fun2(),p和q为它们分别被初始化为var1和var2的别名,一旦被初始化,它就不能在指向其他对象。p=q的作用是让var1的值var2var1和var23pqvar1和var2的别名。必须被初始化为指向一个对象,一旦初始化了它就不能再指向其他对象;intstrcmp1(constchar*str1,constchar*str2);voidmain(){chars1[100],s2[100];intresult;

}

intstrcmp1(constchar*str1,constchar{{{}}

return*str1-return*str1-}10个国家名称,用指针数组实现排序输出。voidccmp(char*a[]);voidmain(){char"Oman","Romania"Spainfor(inti=0;i<10;i++)}voidccmp(char{char*p;inti,j;{{}}}iintx的别名,正确的定义语句是((a)int (b)int (c)int (d)int在下列指针表达式中,与下标a[i][j]不等效的是((a) (b) (c) (d)charstr[5],str[1]的地址的是((a) (b) (c) 已知:inta[]={1,2,3,4,5,6},*p=a,xx5的是((a) (b)p+=5;x=*p++ (c) (d)p+=4;若有说明:inti,j=6,*p;p=&ii=j等价的语句是((a) (b) (c) p1p2int型一维数组的指针变量,kint型变量,则不能正确执行的语句是((a) (b) (c) (d)下面函数的功能是(intfun(char{char*y=x;returny-x-1;} (b)求字符串存放位(c)比较两个字符串的大 (d)将字符串x连接到字符串y后执行以下程序段后,m的值为(intintm,*p=&a[0][0];(a) (b) (c) (d)ptr正确叙述是( ptrint则输出结果是((a) (b) (c) (d) #include<iostream.h>voidmain(){intint}max=15,min-=-5,请将程序补充完整。constintvoidmax_min(intarr[],int*pt1,int*pt2,int{int{if(arr[i]>*pt1) if(arr[i]<*pt2) }return}void{voidmax_min(intarr[],int*pt1,int*pt2,intn); int*pt1,*pt2,a,b; } char*month_name(int{staticchar"ILLEGALMONTH","JANUARY",}void{char*month_name(int } voidcallbyval(inta,intb,int}voidcallbypointer(int*a,int*b,int*{}voidcallbyreference(int&a,int&b,int&}void{inta=1,b=2,c=3;int&a1=a;int&b1=a;int&}(该程序仅处理金额为0.00-99999.99元10234.56char*ap=”char*bp=”howare③一个元素,保持有序iaabdbbaacd MONTH voidmain(){doubleconstchar*c[8]={"万","仟","佰","拾","元","角","分"};intb[7]={0};intcout<<"\n请输入金额(0.00~99999.99):\n";{}{{--}{}{}{}

}}#includevoidSwap(char*&str1,char*&void{char*ap="char*bp="howarecout<<ap<<endl<<bp<<endl;Swap(ap,bp);cout交换以后cout<<ap<<endl<<bp}voidSwap(char*&str1,char*&{char*temp=str1;}struct{intdata;node*next;intcreat(node* //{node*p,*s;inta;cout<<"请按从大到小的顺序输入结点值,0结束:\n";{if(!(s=(node //分配结点空间,可以该用newreturn{}}

//每次将新建结点s到头结点后(逆序return}voidshowlist(node* //{node*q; {}}intlen(node //求表长(不包含头结点{node*p=h->next;inti=0;{}return}intinsert(node //一个元素,保持有序{intnodecout<<"请输入要的数\n";return{{}}return}intdel(node //删除链表中第i{intnodecout<<"请输入要删除数的位置:";{}{

return1;{ //p} //q}return}void{node{cout<<""<<len(head)<<endl<<endl;}}第8 类和对象的创class{类成员的控制(priate(poteced(public私有成员只能被本类的成员函数及其友元当中未指定控制时,系统类的数据成员与成员函数类定义中数据成员的数据类型和名称,不能在类内说明数据成员的同时为其赋初返回类型类名::函数名(参数表)},在类外将该成员函数定义为内联函数。只要在定义前加关键字inline,以显示定义内联函数的有显式和隐式两种形式。隐式:直接将成员函数定义在类显示:将内联函数定义在类外,其 前要加关键字inline,以显式地① {}②析构函数的名字必须是~{}new动态申请空间,在析构函数中用delete内存空间。生成。拷贝构造函数名与类名相同,但参数是本类对象的。拷贝构造函数没有返回值。{} 。。class类名类名 ){}定义一维对象数组的一般格式为:[常量表达式];对象数组的<类名*指针变量名static说明的那些数据成员。静态数据成员属于类而不对静态数据成员初始化只能在类行,一般在在类与main()之间的位置。=值;对静态数据成员的可以有两种形式: 或对象名.静态函数名使元时一定要慎重。友元关系是单向的,也是不能传递的。一个普通函数作为某个类的友元时即为友元函数在该函数中可以其由friendfriend(参数表没有区别。通常友元函数的定义在类行。问由friend语句所在的类的对象的私有成员和公有成员。当一个类A的成员函数作为另一个类B的友元函数时,在类B中的格式为friend::函数名(参数表AB的友类,则类A中的所有成员函数都是类B的友元成员函数,所以可以通过对象名B的私有成员和公有成员。当类A为类B的友类时,在类B中的格式为:firiendclass友元类名>;friend友元类名1.下列程序段是否有错,若有错请改错。class {intx,y;voidsetpoint(int, intpoint::setpoint(intxx,int { return }void{point }class{intx,y;voidsetpoint(int, intgetx(); 成员函数getx()的函数原型intgety(); 成员函数gety的函数原型voidpoint:setpoint(intxx,intyy{;}intpoint // returnintpoint // return2student的构造函数的说明的是((a)voidstudent(int (b)intstudent( void型在内。构造函数可以是内联函数,可带有参数a、b均有返回值类型,不能作为构造函数。选c为常成员函数,构造函数不能为常成员函数。答案为:d3.下列说法正确的是(可以定义修改对象数据成员的const不允许任何成员函数调用const对象,除非该成员函数也为constconstconstconstconst成员函数。c++编译器不允许任何成员函数调用const对象,除非该成员函数本身也为const。constconstconstconstconst4.运行下列程序后,constructingA!”和destructingA!”分别输出几次(classA{intx;{cout<<"constructing{cout<<"void{AA*p=newA;deletep;}(a)2次,2次 (b)3次,3次 (c)1次,3次 (d)3次,1次2次构造函数;newAA3次构造函数。deletep;会撤消new运算分配的空间,它会调用1次析构函数。主函数结束时要数组所23次。答案为:b例题5.运行下列程序的结果为 classcourse{intcharname[50];course(intcsid,char{cout<<"constructingcourse!"<<endl;}{}int{returnid;}char*getname(){return}class{charname[10];intage;coursec1;student(char*sname,intsage,intcid,char {cout<<"constructingstudent!"<<endl;}{cout<<"destructing}void{<<"course<<"course}void{studentst1("tom",23,1,"c++programminglanguage");}student类的对象course类的构造函数,最后才执行constructingcourse!constructingstudent!courseid:1coursename:c++programminglanguagedestructingstudent!destructing例题6.运行下列程序输出结果为 classA{A(intX){cout<<"ok!";}int{Areturn}a1ok例题7.运行下列程序结果为 constdoublePI=3.14159;classcircle{doublestaticintnum;circle(circle&);doublegetr();{}{}double{return}doublegetradius(circle{return}circle{circlec4(5);return}intcircle::num=0;voidmain(){circlec1(1);circlec2(c1);circlec4(1);}1238.读程序写结果或者程序填空。class{constinti;int&j;A(int&void{}void{intx=1;A}例题9.运行下列程序结果为 classstaticinti;intvoidf(){Objob2;cout<<ob2.getVal();}intmain(){Objob1;deleteob3;cout<<Obj::getVal();return}函数,使得静态成员的值为2,ob2.getVal()返回静态数据成员i的值,即输出2。函数f()ob2i1。接着在主函数中用new运算符动态分配空间,又一次调用构造函数使i加1,所以再次输出时i的值为2。最后用deleteob3所指的对象空间,则会调用析构函数使i的值减1,因此i1。本题答案为:22110ABBC的友元,则下列说法正确的是(类B是类C的友 (b)类A是类C的友(c)类A,B,C互为友元 :5classnum{intx,y; num::num(intx,int{ }intsum(num&{return}void{int }本题主要考查友元的应用以及对不同作用域变量的方法下列各项中不能用于类的成员控制权限的关键字是( 2.下列关于构造函数的说法错误的是((b)void类型。class{intage;char*name;student类的成员age是( classpoint{intx,y;point(intx1,intpointpoint类的构造函数被调用的次数是((a)2次 (b)3次 (c)4次 (d)5次5.在下列哪种情况下不会调用拷贝构造函数(6.下列关于友元的描述错误的是(在友元函数中可以通过this指针直接对象的私有成员#include<iostream>usingnamespacestd;classAA{intn;AA(intk):n(k){}intget(){returnn;}intget()const{returnintmain({AAconstAAb(6);cout<<a.get()<<b.get();return0;}运行该程序结果为( #includeiostream.h>classTest{Test(){n+=2;~Test(){n-=3;staticintgetNum(){returnn;}staticintintTest::n=1;intmain(){Test*p=newTest;deletep;cout<<"n="<<Test::getNum()<<endl;return0;}执行后的输出结果是((a)n=0 9.下列程序的运行结果为(class{staticintnum;A&fun(){return*this;}intA::num=0;voidg(A&a){cout<<a.fun}void{A} usingnamespacestd;classMyClass{MyClass(charc){cout<<c;}intMyClassp1,*p2;p2=newMyClass('X');deletep2;return} 函数 在类中静态成员的关键字 完成 class {double circle(double { }doublearea();//面 void classintnum;voidset(int{ }//Anumint int{Aa;return0;}classA{inti;floatj;charA(intx,floaty,char{ }

//初始化成员cvoid{ }void{A}Objectid=0Object#include<iostream.h>classPoint{Point(intxx=0,intyy=0){ ;Y=yy;countP++;}Point(){countP--;}intGetX(){returnX;}intGetY(){returnstaticvoidGetC(){cout<<"Objectid="<<countP<<endl;}intstaticint intmain({A.GetC(return}classInsertSort{void{//此函数假设已排序序列初始化状态只包含a[0]a[1]…a[n-1]for(inti=1;i<n;++i){int {}}}(hour(minute(ecod4.-5.this指针②double12.①A::num=num;②returnnum;intclasscube{doublex;cube(double{;}doublevolume();doublesarea();double{return}double{return}void{doublecube()<<}classTime{inthour;intminute;intintsethour(int);intsetminute(int);intsetsecond(int);intgethour();intgetminute();intgetsecond();voidshow12();voidshow24();{return{return}}{return{}}

return1;{return{}}

return1;intTime::getminute(){returnminute;}void{}

void{}void{inth,m,s;Timet;{}}第9 继承性与派生派生类的和权限派生类 <{派生类新定义的成员派生类的权限②在派生类中可以直接基类的公有成员和保护成员但对于私有成员的只能通私有继承②在派生类中可以直接基类的公有成员和保护成员但对于私有成员的只能通③在基类和派生类定义以外对基类的所有成员均无法直接也无法通过派生类的对象间接。保护继承②在派生类中可以直接基类的公有成员和保护成员但对于私有成员的只能通③在基类和派生类定义以外对基类的所有成员均无法直接也无法通过派生类的对象间接。派生类构造函数定义格式为:<派生类名>::<派生类名>(参数总表):基类名(参数表),1(1),…,对象成n(n){} 多重继承的格式为<{派生类成员造函数的执行次序严格按照时从左到右的顺序来执行的与定义派生类构造函数定义多重继承构造函数的格式为:<派生类名>::<派生类名>(参数总

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论