《c++90+分超详细版答案解析1-精品文档资料整理.doc》由会员分享,可在线阅读,更多相关《c++90+分超详细版答案解析1-精品文档资料整理.doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、妍伶版C+标准答案妍伶老师版C+答案与解析一、单项选择题、在一个程序中,main函数的位置(3)。 必须在程序的开头 必须在程序的后面 可以在程序的任何地方 必须在其它函数中间、程序基本单位是(3)。 数据 字符 函数 语句、执行语句 int i=10,*p=&i;后,下面描述错误的是(1)。 p的值为10 p指向整型变量i *p表示变量i的值 p的值是变量i的地址、执行语句 int a=5,b=10,c; int *p1=&a, *p2=&b;后,下面不正确的赋值语句是(2)。 *p2=b; p1=a; p2=p1; c=*p1*(*p2); 解析:*p = *p1 * (*p2) 中间的*
2、是乘号的意思,两边的代表指针地,也就是地址。指针p1和p2指向的地址单元中存放的数据相乘,最后都指向了同一p指向的地址单元内。相当于*p=a*b、设i=1,j=2,则表达式i+ +j的值为(3)。 1 2 3 4、设i=1,j=2,则表达式+i+j的值为(4)。 1 2 3 4考察i+,+i的区别、执行下列语句后,x的值是(4),y的值是(3)。int x,y;x=y=1; +x|+y; 不确定 0 1 2操作符|和&都具有短路现象如 a|b 假如判断了a是正确的,就不会判断b了,无论b是否正确。a&b也一样,不过是反过来的,假如判断了a是错误的,就不会继续判断b了。、已知x=5,则执行语句x
3、+=x-=xx;(题目有错误吧?c+语言中的x是*) 后,x的值为(3)。 25 40 -40 20先分解:X=25(看符号优先级) x-=25 则x=-20x+=-20,既最终x=-40、已知a=4,b=6,c=8,d=9,则“(a+,ba+&cd)?+d:aa+&cd)发现他是不正确的,即为false,则执行表达式ab,既66错,输出0.(括号内的a+使a=6)10、有如下程序段:int a=14,b=15,x;char c=A;x=(a&b)&(cB);执行该程序段后,x的值为()。ture false 0 1用一个 int 来做逻辑运算的话,只要他的值不是 0 就算是 true。那么
4、(a & b) 中 a 和 b 都不为 0 。所以 a & b 为 true.(c B) 中 c 为 字符 A对应的ASCII码 小于 B 的ASCII码 所以 也为 true。即 (a & b) & (c B) 返回 true。最终输出111、下面程序的输出结果是()。#include using namespace std;int main( ) int a=6,b=6; if(a5) a-=1;/a=5 b+=1;/b=7 else a+=1; b-=1; cout”a=”aendl; cout”b=”bendl;return 0; 5 7 a=5 b=7 a=5 b=6 编译时出错12
5、、下面程序的输出结果是()#include using namespace std;int main( ) int a=6,b=6; if(a5) a-=1; b+=1; else a+=1; b-=1; cout”a=”aendl; cout”b=”bendl;return 0; 5 7 a=5 b=7 a=5 b=6 a=6 b=513、下面程序的输出结果是()#include using namespace std;int main( ) int x=6,y=8; if(x+6)cout+y6) cout -yendl; else couty+endl; return 0; 8 7 9
6、编译时出错14、下面程序的输出结果是()#include using namespace std;int main( ) int x=6,y=8; if(+x6) cout+yendl; else couty+6) cout -yendl; return 0; 8 8 9 7 7 8 编译时出错/76.cout6输出y=815、下面程序的输出结果是(1)#include using namespace std;f(int a) int b=0; static int c=3; b+;c+; return (a+b+c); int main( ) int a=2,i; for(i=0;i3;i+
7、)coutf(a)endl;return 0; 7 8 9 7 7 7 7 10 13 7 9 11第一次循环:i=1 a=2 b=0 c=3 b=1 c=4 2+1+4=7第二次循环:i=2 a=2 b=1 c=4 2+1+5 =8与此类推第三次循环为9 16、下面程序的输出结果是()#include using namespace std;void fun(int x,int y,int z) z=x*x+y*y; /全局变量(在main函数外)int main( ) int z=68;/局部变量 fun(5,2,z); coutz;也许你会这样写:z=68 x=5 y=2 z;z=5+2
8、=29but这是错的。涉及局部变量和全局变量的可见性等return 0; 0 29 68 无定值17、下面程序的输出结果是()#include using namespace std;int fun(int a,int b) return (+a*b+); int main( ) int x=3,y=4,z=5,r; r=fun(fun(x,y),z); coutrxyendl; 85 3 4 60 3 4 126 4 5 85 4 5先执行括号里的小fun:fun(16),5)变成fun(17,5)18、下面的程序中,当输入4、2时,其输出结果是()#include using namesp
9、ace std;long fib(int n) if(n2) return (fib(n-1)+fib(n-2); else return (n) int main(;) int i; couti; coutendl; coutfib(i)2 ture return(fib (int 3)+fib (int 2)-return(return (fib 2+ fib 1)+2)-return(2+1+2=6)当i=2 return 219、下面程序的输出结果为()#include using namespace std;unsigned func(unsigned num) unsigned d
10、=1,k;do k=num%10;/k=26%10=6num/=10;/26/10=2.6=2 while(num);/return (k); int main( ) unsigned n=26; coutfunc (n); return 0; 2 4 6 520、下面程序的输出结果为()#include using namespace std;func (int a,int b) int c; c=a*b; return (c );int main( )int x=6,y=7,z=8,r; r=func(x-,y,xy),z-);coutr;return 0; 294 245 280 416
11、Fun(6,7,5*7),8)-fun(6,7,35),8)-fun(35,8) 35*8=28021、下面程序的输出结果为()#include using namespace std;int main( ) int a33=1,2,3,4,5; int s=0; for (int i=1;i3;i+)for(int j=0;j=i;j+)s+=aij;coutsendl;return 0; 12 14 15 13第一次大循环i=2 进入小循环 j=1 s=a21=2第二次大循环 i=3 进入小循环 j=2 s=a32+2=22、下面程序的输出结果是(1)#include using name
12、space std;void fun(int *x,int *y)cout*x” “*y” “;*x=3;*y=4;int main( ) int x=1,y=2; fun(&y,&x); coutx” “y;return 0; 2 1 4 3 1 2 1 2 2 1 1 2 1 2 3 4相当于Void fun(&y,&x) couty”x”;x=1, y=2x=4 y=3y=3;x=4 ;23、下面程序的输出结果是(3 )#include using namespace std;int main( ) int a10=9,8,7,6,5,4,3,2,1,0,*p=a+5; coutp=5;
13、 a1.*p=5; *a1.p=5;33、已知类A中一个成员函数说明如下:void Set(A&a)其中,A&a的含意是( 3 )。 指向类A的指针为a 将A的地址值赋给变量Set a是类A的对象的引用,用来作函数Set()的形参 变量A与a按位相与作为函数Set()的参数34、下面程序的输出结果是(1)#include using namespace std;class pointpublic:void poi(int px=10,int py=10) x=px; y=py;getpx( ) return x;getpy( ) return y;private:int x,y;int mai
14、n( )point p,q;p.poi();q.poi(15,15);cout“p点的坐标是:”p.getpx( )“,”;coutp.getpy( )endl;cout“q点的坐标是:”q.getpx( )“,”;coutq.getpy( )endl;return 0; p点的坐标是:10,10 p点的坐标是:0,0 q点的坐标是:15,15 q点的坐标是:15,15 p点的坐标是:0,0 p点的坐标是:10,10 q点的坐标是:0,0 q点的坐标是:10,1035、有以下类的说明,请指出错误的地方 class CSampleprivate:int a=2.5;(A)CSample;(B)p
15、ublic:CSample(int val);(C)CSample;(D);A, 普通数据成员不能在声明时初始化,类只是声明了一种类型,并不占空间。非要在类中初始化的话,需要在类里面的构造函数B, ?/构造函数貌似不可以是私有的?C,36、下面程序的输出结果是( 1 )#includeusing namespace std;int main()int i,j,m=0,n=0;for (i=0;i2;i+)for (j=0;j=i) m=1;n+;coutmendl;cout=i true m=1j=1 j=i true m=1第二次(外层循环),i=1j=0 j=i falsej=1 j=i
16、true m=1由于不存在花括号,循环 + 条件语句在 m=1; 这一行后即终止。所以 n+无论如何只执行了一次。二、判断题、任何字符常量与一个任意大小的整型数进行加减都是有意义的。()、在命名标识符中,大小写字母是不加区分的。()字母大小影响程序运行、引用是某个变量的别名。对引用的操作,实质上就是对被引用的变量的操作。()、typedef类型定义是原来定义一些中所没有的新类型。( )、枚举变量的取值收到该枚举变量所对应的枚举表中枚举常量的局限。()枚举变量按常量来处理,不能对他们赋值,若要赋值,则需要进行强制转换、已知:int a(5);表达式(a=7)+a具有二义性。()、预处理命令是在进
17、行编译时首先执行的,然后再进行正常编译。()、条件编译命令只在编译时才有用。()、开关语句不可以嵌套,在开关语句的语句序列中不能再有开关语句。()10、switch语句中必须有break语句,否则无法退出switch语句。()可以不有,那有几个case就会执行几个。举个例子:switch(k),case1:case2:case3假如有这3个case,如果没有break,当k=1时,这三个都会执行,当每个都有break时,k=1时,case2, case3就不会执行。11、while循环语句的循环体最少执行一次。()do while至少执行一次12、只有for循环的循环体可以是空语句,其它种类循
18、环的循环体不能用空语句。()13、当循环体为空语句时,说明该循环体不做任何工作,只起延时作用。()一直循环,直到循环结束14、在多重循环中,内重循环的循环变量引用的次数比外重的多。( )15、在中,说明函数时要用函数原型,即定义函数时的函数头部分。()16、如果一个函数没有返回值,定义时需用void说明。()17、使用内置函数是以增大空间开销为代价的。()18、返回值类型、参数个数和类型都相同的函数也可以重载。()重载函数形参不同:个数不同或者类型不同。19、在设置了参数默认值后,调用函数的对应实参就必须省略。()20、函数形参的作用域是该函数的函数体。()21、定义外部变量时,不用存储类说明
19、符extern,而声明外部变量时用它。()22、内部静态类变量与自动类变量作用域相同,但是生存期不同。()23、静态类标识符在它的作用域之外是不存在的。()24、使用关键字class定义的类中默认的访问权限是私有的(private)。( )25、指向对象的指针和指向类的成员的指针在表达形式上是不相同的。( )26、一维对象指针数组的每个元素应该是某个类的对象的地址值。( )27、一个类的构造函数中可以不包含对其子对象的初始化。( )三、 填空题、下面程序是计算110之间偶数之和,请填空:#include using namespace std; int main( ) int a,b,i; a
20、=0;b=0; for(i=0; i=10 ;i+) a+=i; if(a%2!=0)a-=i ; cout”偶数之和为:”aendl;return 0; 、下面程序是输出100内能被3整除且个位数是6的所有整数,请填空:#include using namespace std;int main( ) int i,j; for(i=0; i=9 ;i+) j=i*10+6; if( j%3! =0 )continue;3 else ; coutjendl;4-return 0; 、结构体类型与数组不同,数组中的数据的类型是一致的,结构体的成员的数据类型是可以不同的,共用体类似于结构体,但是共用
21、体的部分成员是共用同一存储空间,枚举类型是基础类型的集合。、常量与变量的区别是:常量在程序运行中值不可改变,因此它的值在编译时便进行 初始化 ;而变量的值是可以改变的,指针类型的变量存储的是变量的地址,不是变量的值。、函数的形参在未被调用前未分配空间,函数的形参的类型要和实参相同。若类型不同,则按一般规则转换,若参数个数不同,则提示错误。、函数的递归分为直接递归,间接递归,递归由初始部分、递归部分两部分组成。一般说,一个问题的解决要依靠另一问题的解决,而另一个问题的解决方法与上一问题的解决方法相同,则可用递归处理。、下面程序的功能是:求a的b次方,并输出,请填空。#include using
22、namespace std;double fun (double a,int b) int i; double z; for(i=1,z=1;i=b;i+) z=*a ; return z ; int main( ) double a; int b; couta; coutendl; coutb ; coutendl; cout fun(a,b) ; coutendl; return 0; 、下面函数是检验输入的字符是大写还是小写或者不是26个字母,请填空。#include using namespace std; char ch?;fun (char ch) int i; if(ch=a)&
23、(ch=A)&(ch=Z) )i=2; else i=3; return i ;int main( ) int i; coutch; i=fun(ch); if (i=1)cout”是小写字母:”chendl;else if ( i=2 )cout”是大写字母:”chendl;else cout”是其它字符:”chendl;return 0; 、下面是字符串拷贝程序,请填空。void ccopy( ) char ch1=”good morning!”,ch220; int i=0,j=0; while( chi!=0 ) ch2j= ch1i+ ; j+ ; ch2j=0 ;: 0表示整数,0
24、表示0字符,0表示ASCII码值为0的字符。 在字符串中0用作字符串的结束标志。10、下面函数是寻找二维数组中每一行的最大值,请填空。#define N 5#define M 5void max (int aNM) int i,j,p; for (i=0;iN;i+) p=0 ;for (j=1;jM;j+)if (aipaij) p=j ;couti”:”pendl;11、下面程序是将字符逆序化,请填空。#include using namespace std; 不用填 ;int main( ) char ch=”hello,boy!”; char c; int i=0,j=strlen(c
25、h); for(; ij/2 ;i+,j-) c=chi; chi=chj-1 ; chj-1=c;coutch;return 0; 12、下面程序的功能是将矩阵转置,请填空。#includeusing namespace std;#define I 3#define J 4void invert(int aIJ) int i,j;int bJI;cout”array a:”endl;for(i=0;iI;i+) for(j=0;jJ;j+) coutaij” “; bji=aij ;coutendl;cout”array b:”endl;for(i=0;iJ;i+) for(j=0;jI;j
26、+)coutbij” “;coutendl;int main() int aIJ=1,2,3,4,5,6,7,8,1,3,5,7; invert(a) ;return 0;四、 程序分析题、下面程序的输出结果是(816)#include using namespace std;int func(int a,int b) static int m=0;int i=2; i+=m+1; m=i+a+b; return (m);int main( ) int k=4,m=1,p; p=func(k,m); coutp; p=func(k,m); coutpendl;return 0; k=4 m=1
27、; m=0 i=2; i=m+1+i=3;m=i+a+b=3+4+1=8; p=8;k=4,m=1;m=8,i=2.i=8+1+2=11;m=i+a+b=11+4+1=16;p=16; 、下面程序的输出结果是(61515)#include using namespace std;int d=1;fun (int p) static int d=5; d+=p; coutd; return (d);int main( ) int a=3; coutfun(a+fun(d)endl; return 0; a=3d=5+1=6a+fun(d)=3+5+1=9d=9+6=15fun(9)=15调用3次
28、,61515、下面程序的执行结果是(hlo)#include using namespace std;char ch=”hello,boy!”;void fun2(int i);void fun1(int i) coutchi; if(i3) i+=2; fun2(i); void fun2(int i) coutchi; if (i3) i+=2; fun1(i); int main( ) int i=0; fun1(i); coutendl; return 0;couth i=2 fun2(2)coutli=4 fun1(4) couto、下面程序的执行结果是(The array isa0
29、 is 0a1 is 1a2 is 2a3 is 2a4 is 6a5 is 14)#include using namespace std;int main( ) int a10=0,1,2; int j; for(j=2;j6;j+)aj+1=aj+2aj-1aj-2; cout”The array is:”endl;for(j=0;j6;j+)cout”a“j” is”aj; return 0; 、当输入时,下列程序的输出结果是(123)#include using namespace std;int main( ) int str3,i,*p=str; for(i=0;i*p+;cou
30、t*(p-1); return 0; 输入123时,相当于给str=1,2,3、下面程序的输出结果是(6)#include using namespace std;void func (int *a,int b) b0=*a+6; int main( ) int a,b5; a=0;b0=3; func(&a,b);coutb0; return 0; b0=0+6=6、下列程序的输出结果是(6)#include using namespace std;int b=2;int func(int *a) b+=*a; return (b); int main( ) int a=2,res=2; r
31、es+=func(&a);coutres;return 0; b+=*a=2+2=4res+=4 res=6、下面程序的输出结果是(3600)#include using namespace std;int w=3;int fun(int);int main( ) int w=10; coutfun(5)wendl; return 0; int fun(int k)coutfun(5)wendl; return (fun(k-1)*k); fun(0)=3fun(1)=fun(0)*1=3fun(2)=fun(1)*2=6fun(3)=fun(2)*3=18fun(4)=fun(3)*4=72fun(5)=fun(4)*5=360360*10=3600、下面程序的输出结果是(7 8 9)#include using namespace std;int f(int);int