C++题库+参考答案.docx
【C+题库】顺序分支结构BDDAC DDCBC BABDA BCCCB BCBBC BADA1 .设ch是char型变量,其值为字符A,且有下面的表达式:ch=(ch>=' A' &&ch<=' T )?(ch+32):ch上面表达式的值是A) AB) aC) ZD) z2 .设a, b和c都是int型变量,且a=3, b=4, c=5,则下面的表达式中,值为的表达式是A) 'a'&&'b'B) a<=bC) a|b+c&&b-cD) ! (a<b)&&!c|11)3.能正确表示a21O或aWO的关系表达式是A)a>=10 or a<=0B) a>=10 | a<=0C) a> =10 | a< =0D) a>=10 | a<=04.设a为整型变量,不能正确表达数学关系:10<a<15的C+语言表达式是A) 10<a<15B) a=11 11 a=12 | | a=13 11 a=14C) a>10 && a<15D) ! (a<=10) && ! (a>=15)说明:不能正确表达,看清楚题目,是不能!! a因为是整型变量,所以选项b也是可以表达 的5.设x、y、z、t均为int型变量,则执行以下语句后,t的值为 x=y=z=1;t=+x | +y && +z;A)不定值B) 4C) 1D) 0说明:因为+x表达式的值为2,是真,所以|或后面的运算被跳过,=右边的表达式值为真, 賦值给t,t的值为1.6 .语句:cout(a=2) && (b= -2);的输出结果是A)无输出B)结果不确定0-1D)1说明:将cout«后那个表达式的值输出出来.a=2先将2赋值给a,同时表达式的值为左 边变量a的值2,同理b=-2表达式的值为2,两个非的值进行&&操作,结果为真,即值为17 .能正确表示a和b同时为正或同时为负的逻辑表达式是A) (a>=0 11 b>=0) && (a<0 11 b<0)B) (a>=0 && b>=0) && (a<0 && b<0)C) (a+b>0 && a+b<=0)D) a*b>0说明:随便找两个具体的值代进去看看,答案就可以分辨出来了哎.选项b怎么可能对呢, 任何情况下,选择b都是假的啊8 .为了避免嵌套的if-eIse语句的二义性,C+语言规定else总是与()组成配对关系。A)缩排位置相同的ifB)在其之前未配对的ifC)在其之前未配对的最近的ifD)同一行上的if9 .已知 int x=10,y=20, z=30,则执行if (x>y)z=x;x=y;y=z;语句后,x、y、z的值是()»A) x=10, y=20, z=30B) x=20, y=30, z=30C) x=20, y=30, z=10D) x=20,y=30, z=20说明:i f条件为真的时候,执行的语句体只是z=x;这一句,其它的x=y;和y=z;是i f语句执行 完了之后的语句。所以这里if条件不成立,认为if(x>y) z=x;这句话就执行结束了,接着执 行下面的x=y;y=z;语句,不要把后面两句也看成是if条件为真的时候的语句体了。如果语 句体包括多句话的时候,必须加10 .执行下面程序的输出结果是()。ma i n()(int a=5, b=0, c=0;if (a=a+b) cout“*、n”;else cout“#n" ;A)有语法错误不能编译B)能通过编译,但不能通过连接C)输出*D)输出#说明:if条件的逻辑是将a+b的值赋给a,然后判断表达式a=a+b的值(即被赋值后的a的值 5)是否非11 .运行下面程序后,输出是()。ma i n() i nt k=-3;if (k<=0) cout« “*n”;eIse cout"#、n”;A)#B) *0 #*D)有语法错误不能通过编译12.若运行下面程序时,给变量a输入15,则输出结果是() ma i n () i nt a, b;c in»a;b=a>15?a+10:a-10;cout«b«end I ;A) 5B) 25C) 15D) 1013.以下选项中,两个条件语句语义等价的是()A) i f (a=2) cout«a;i f (a 2) cout«a;B) if(a-2) cout«a;i f (a! =2) cout«a;C) if (a) cout«a;i f (a=0) cout«a;D) if(a-2) cout«a;if (a=2) cout«a;14,在执行以下程序时,为了使输出结果为:t=4则给a和b输入的值应满足的条件是 ma i n () int s, tF a, b;cin»a»b;s=1; t=1;if (a>0) s二s+1;if (a>b) t二s+t;e I se i f (ab) t二5;else t二2*s;cout« " t二"tend I;)A) a>bB) a<b<0C) 0>a>bD) 0<a<b15.下面程序的输出结果是ma i n ()int x-100, a二10, b=20, ok1=5, ok2=0;if (a<b)if (b!二15)if (!ok1)x= 1;seif (ok2) x=10;x=-1 ;cout«x;A) -1B) C) 1D)不确定的值16.下面程序的输出结果是ma i n () i nt a=2fb=7fc=5;switch (a>0) case 1:switch(b<0) case 1 : cout« ; break;case 0: cout« “!" ; break;)case 0:switch(c=5) case 0: cout« ";break;case 1: cout« "#" ; break;default: cout« “%” ;break;)default: cout« "&”; cout«end I ;A) &B) ;#&0 %D)斛&17.运行下面程序时,若从键盘输入数据为“ 123”, 则输出结果是()ma i n ()(int num, i, j, k, place;c i n»num;if (num>99)place=3:eIse i f (num>9)pIace=2;e I seplace=1;i=num/100;j=(num-i*100)/10;k=(num-i*100-j*10);switch (pI ace) case 3: cout«k«j«i«endI ;break;case 2: cout«k«j«endI ;break;case 1: cout«k;A) 123B) 1,2,3C) 321D) 3,2, 1 18.运行下面程序时,若从键盘输入数据为“ 86”, 则输出结果是()ma in () int t;c in»t;if (t>=90) cout« “An” ;else if (t>=80) cout« “Bn” ;else if (t>=70) cout“Cn” ;else if (t>=60) cout« "Dn”;else cout« "En"cout"0Kn"A) BB) B OKC) BD) BOKCDEOK19.以下程序的运行结果是()。ma in () int a二, b二 1, c二, d二20, x;if (a) d=d-10;else if (!b)if (!c) x=15;eIse x=25;cout«d;)A) 15B) 25C) 20D) 1020.运行下面程序时,从键盘输入” 1605CR> “, 则输出结果是()。ma in () int t, h, m;Cin»t;h=(t/100)%12;if (h=0) h=12;cout«h« ':'m二t%100;if (m<10) cout«, 'cout«m;if (t<1200|t=2400)cout« “AM” ;else cout« “PM” ;A) 6:05PMB) 4:05PMC) 16:05AMD) 12:05AM21、运行下面程序时,从键盘输入数据为“ 2 13 5<CR> “, 则输出结果是()。ma i n ()( int a, b, c;c i n»a»b»c;switch (a) case 1: cout«b+c«endl ; break;case 2: cout«b-c«end I ; break;case 3: cout«b*c«endl ; break;case 4: if (c! =0) cout«b/c«endI ;break; else cout“errorn" ;break;defuaIt: break;)A) 10B) 8C) 65D) error22、若k是int型变量,且有下面的程序片段:k=8;if (k)if (k=0) cout« “料#";else cout« “&&&&”;else cout« “*” ;上面程序片段的输出结果是A) #B) &&&&C) *D)有语法错误,无输出结果23、若执行下面的程序从键盘上输入5,则输出结果是ma i n ()i nt x;c i n»x;if (x+>5) cout«x«endI; e I se cout«x;A) 7B) 6C) 5D) 424、当a=1, b=3, c=5, d-4时,执彳丁下面一段程序后,x的值为 if (a<b)if (c<d) x=1;e I seif (a<c)if (b<d) x=2;eIse x=3;eIse x=6;eIse x=7;A) 1B) 2C) 3D) 6 25、下面的程序片段所表示的数学函数关系是r 1 (x<0) Iy=T -1 (x=O)IL 0 (x>0)r -1 (x<0) Iy=T 1 (x=O)I1- 0 (x>0)r -1 (x<0)IA) y=H 0 (x=0) B)IL 1 (x>0) r 0 (x<0)I0 y=T -1 (x=0) D)IL 1 (x>0) y=-1;if (x!=0) if (x>0) y=1;eIse y;26、假定所有变量均已正确说明,下列程序段运行后x的值是a=b=c=O;x=35;if (!a) x-;else if (b);if (c) x=3;eIse x=4;A) 34B) 4C) 35D) 3说明:这里注意第三行的if后面有个;说明if(b)条件为真时,其语句体为一条空语句:27、与y=(x>0?1:x<0?-1:0):的功能相同的if语句是A) if (x>0) y=1;B) if(x)else if (x<0) y1;if (x>0) y=1;eIse y=0;else if (x<0) y=-1;eIse y二。;C) y=-1;D) y二。;if(x)if (x>。)if (x>0) y=1;if (x>0) y=1;else if (x。)y二。;else y二一1else y二T;说明:答案b.这里总共只有一句话,当x为。时,第一行if条件不满足,整个代码就执行结束 了,y的值不知道是多少。28、执行下列程序,输入为1的输出结果是()。 ma i n ()(int k;cin»k;switch (k)(case 1: cout«k+«end I;case 2: cout«k+«endI;case 3: cout«k+«endI;case 4: cout«k+«endI; break;default: cout“FulI!n" ;)A) 1B) 20 2D) 13 24 35 4 29.执行下面程序时,若从键盘输入" 2<CR> "«则程序的 运行结果是()。ma in ()( int j,k; char cp;cp二getchar ();if (cp>二'。&& cp9')k二cp-' 0'else if (cp>=' a' && cp<=' f')k二cp-' a' +1。;else k 二 cp-'A'+1。;cout«k«end I;循环结构1BABAA CADCB CBBDB DBCBC DBCDC1、设i, j, k均为!nt型变量,则执行完下面的for循环后,k的值为 for(i=0, j=10; i<=j; i+, j) k=i+j;A) 12B) 10C) 11D) 92、当执行以下程序段时x=-1;do x=x*x; whiIe( !x);A)循环体將执行次B)循环体将执行两次C)循环体将执行无限次D)系统将提示有语法错误3、若输入字符串:abcde回车,则以下while循环体将执行多少次? whi le(ch=getchar ()!=' e') cout "*"A) 5B) 4C) 6D) 1说明:getcharO每次获取一个字符,将获得的值赋给ch,整个表达式ch=getchar ()的值就是 等号左边的变量ch的值,判断其是否不等于字符e'4、有以下程序段i nt k=0;while (k=1) k+;whi Ie循环执行的次数是A)无限次B)有语法错,不能执行0 一次也不执行D)执行一次说明:k=1是將1赋值给k.表达式k=1的值就是左边变量k的值,因此每次判断条件时,k都 会重新被賦值为1,条件永远为真5、语句whi le(!e);中的条件!e等价于()。A) e=0B) e!=1C) e!=0D)e说明:答案b没有考虑到如e的值为2时,!e为假,而答案b为真6、以下for循环是().for(x=0, y=0; (y!=123) && (x<4);x+)A)无限循环B)循环次数不定C)执行4次 D)执行3次说明:for循环里的表达式1是x=0,y=0;这是一个逗号表达式7、C+语言中while和do-while循环的主要区别是()A) do-whi Ie的循环体至少无条件执行一次B) while的循环控制条件比do-whi Ie的循环控制条件严格C) do-while允许从外部转到循环体内D) do-wh i I e的循环体不能是复合语句8、在下列选项中,没有构成死循环的程序段是A) int i=100; while (1) i=i%100+1;if (i>100) break;)B) for(;C) int k;do +k; while (k >0);D) i nt s=36; while (s) -s;9、以下程序段的输出结果是()。 i nt k, n, m;n= 10; m1; k1;while (k<=n) m*=2;k+=4; cout«m;A) 4B) 16C) 8D) 3210、设有如下程序段: i nt i二, sum=l;do sum+=i+;)wh i Ie (i <6); cout«sum;上述程序段的输出结果是()A) 11B) 16C) 22D) 1511、以下程序的输出结果是()» ma i n () int count, i二。;for (count=1; count<=4; count+) i +=2; cout«i;A) 20 0 2468B) 246D) 222212、下面程序的输出结果是()ma i n ()(uns i gned i nt num, k;num=26;k=1;do k*=num%10;num/=10; while(num);cout«k;A) 2B) 12C) 60D) 18说明:此程序的功能是将num的每一位上的数字取出来相乘.13、阅读以下程序:ma i n ()(int x;for (x=5;x>0;x)if (x<5) cout«x«,';else cout«x+« ;1程序运行后的输出结果是()A) 4, 3, 1B) 4,3,1,0 5,4,2D) 5,3,1,注意变量+, 一之后的结果和表达式的结果14、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩, 当输入负数时结束输入。请填空。ma i n () double x, arnax, amin;c in»x;amax=x;am in二x;while ( ) i f (x>amax) amax二x;i f () am i n=x;cin»x;cout “最高成绩为 “ amax end I ;cout “最低成绩为" am in end I;A) x<=0 x>ami nC) x>0 x>ami nB) x>0x二am i nD) x>=0x<ami n15、下面程序是计算n个数的平均值,请填空。 ma i n () int i,n;float x, avg=0. 0;c i n»n;for(i=0;i<n;i+) cin»x;avg=avg+;)avg=;cout “平均值为 " avg;)A) iB) xavg/iavg/nC) xD) iavg/xavg/n 16、下面程序的输出结果是()。ma i n () int x=10, y=10, i;for(i=0;x>8;y=+i) cout«x« ' 'y ')A) 10 1 9 2B) 9 8 7 6C) 10 9 9 0D) 10 10 9 11、有如下程序ma in () int n=9;while (n>6) (n; cout«n;该程序段的输出结果是A) 987B) 876C) 8765D) 987618、函数pi的功能是根据以下近似公式求n值: (ji * n) /6=1 +1 / (2*2) +1 / (3*3) +. +1 / (n*n)请填空,完成求n的功能。#i ncIude<i ostream>#i ncIude <cmath>using namespace std;ma i n () double s二。.0; long int i, n;c i n»n;for(i=1;i<=n;i+)s=s+ ;s=sqrt(6*s);cout« "s= ”s;A) 1/i*iB) 1.0/i*iC) 1.0/(i*i)D) 1.0/(n*n)19、设有以下程序ma i n () int n1,n2;cin»n2;while (n2!=0) n1=n2%10;n2=n2/10;cout«n1;)程序运行后,如果从键盘上输入1298,则输出结果为()。A) 892B) 8921 89D) 921该程序将n2的值的每一位依次从低位到高位求出,并输出20、以下函数的功能是:求x的y次方,请填空。ma i n () int i, x, y;double z;c in»x»y;for (i=1, z=x;iy;i+)z=z* ;cout« "x 的 y 次方二 “z;A) i+B) x+C) xD) i21、下面程序的运行结果是()。ma i n () int a,b;a=-1 ;b=0; do +a;+a;b十二 a; while(a<9);cout«b;)A) 34B) 24C) 26D) 2522、下面程序的运行结果是()ma i n () int s=0, i=1;while (s<=10) s=s+i*i;j-H-;)cout«-i;A) 4B) 30 5D) 623、以下程序的输出结果是()ma i n ()(1 nt num二。;while (num<=2) num+;cout«num«end I;)A) 1B) 1C) 1D) 122233424、下面程序的功能是:计算1到10之间奇数之和及偶数之和,请填空。 ma i n () i nt a, b, c, i ;a二c;for (i =0;i<=10;i+=2) a+二i;c十二 b;cout “ 偶数之和二 “ a end I ;cout ”奇数之和二 a«c-11«endl;A) i+=2B) i+C) b二b+1D) b二 i+125、运行以下程序后,如果从键盘上输入4 6 8 12 -9 58 2 T回车), 则输出结果为()ma in ()( i nt x, i, m;docin»x;whiIe (x<0 && x!=-1);m二 x;while (x!=-1) cin»x;if (x>0 && x>m) m=x;1if (m!=-1) cout« “m= “m;A) m二-9B) m=2C) m二58D) m二一1循环结构2ABDDA DACCC CCBCB CDACB1、若i, j已定义为int类型,则以下程序段中内循环体的总的执行次数是 for (i二5;i;i-)for (j=0;j<4J+) .A) 20B) 25C) 24D) 302、以下叙述正确的是()。A) cont inue语句的作用是结束整个循环的执行B)只能在循环体内和switch语句体内使用break语句C)在循环体内使用break语句或cont inue语句的作用相同D)从多层循环嵌套中退出时,只能使用goto语句3、对下面程序段,描述正确的是()f or (t二1; t二 100; t+) c i n»x;if (x<0) continue; cout«t;A)当x<0时,整个循环结束B)当x>=0时,什么也不输出C) cout函数永远也不执行D)最多允许输出100个非负整数4,以下程序的输出结果是ma i n() int a, b;for(a=1, b=1;a<=100;a+) if (b>=10) break:if (b%5=1) b+=5; continue: )cout«a;)A) 101B) 6C) 4D) 35、以下程序的输出结果是()。ma i n () int i;for(i=1;i<=5;i+)if (i%2)cout "*";eIse cont i nue;cout “#";cout'$n")A) *#$B) #*#*#*$C) *#*#*#$D) *#*$6、以下程序段的输出结果是(),int k, j, s;for(k=2;k<6;k+, k+)(s=1;for(j=k;j<6;j+)s+=j;cout«s;A) 1B) 9C) 11D) 10 7、以下程序运行后的输出结果是()«ma i n () int i, j;for(i=4;i>=1;i) cout"*"for(j=1;j<=4-i;j+) cout“*”;cout«end I ;)D) *A) * B) * C) *8、运行以下程序后,如果从键盘上输入china#回车),则输出结果为ma i n () int v1二。,v2;char ch;while (ch=getchar ( )!= '#') switch (ch) case ' a': case 'n : default: v1+;case ' : v2+;cout«v1« ' «v2;)A) 2,0B) 5,0C) 5,5D) 2,5说明:这道题注意一下,如果ch的值是字符,则从case '进入,default只是所有 的case都不匹配的时候从default进入,然后顺序往下执行代码9、下列程序的输出结果是()。 ma i n ()( int i, j, m=0, n=0;for (i二; i<2; i+)for(j=0; j<2; j+) if (j>=i)m=1;n+;cout«n;B) 2A) 4C) 1 D) 0说明:绿色的代码部分是个二层嵌套的循环,里面没有改过n的值,所以之后是1,这道题 应该3秒钟之内就能看岀结果10、下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。 ma i n () int i, j;for (i=0; i+) j=i*10+6;i f () cont i nue;cout« j;A)i<=10j%3!=0B)i<10j/30i<10D)i<=9j%3!=0i%311、要输出下面的图形,请完善程序。12 23 3 34 4 4 45 5 5 5 56 6 6 6 6 6ma i n () int i, j, k;for(i=1;i<=6;i+)(for(j=1;j<=20-2*i;j+)cout“ for (k=1;k+)A) i k cout« "C)k<=i cout«end I ;cout ” " «i;B) k<jcout«end I ;D)k<=icout« ""12、要输出下面的图形,请完善程序。11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 1 ma i n () int i, j, k;for(i=1;i<=5;i+)(for(j=1;j<=20-3*i;j+) cout« " for (k=1;k+) cout« ” “k;for (; k>0; k) cout« ” “k;cout«end I ;)A) k<=iB)k<ik=ik=i-1C) k<iD)k<=ik=ik=i-1 13、下列程序的输出结果是()ma i n () int i, j, k;for (i=。;i<=2;i+) for (k=1 ;k<=i ;k+) cout« “ “ ;for (; J二3; j+) cout« ; cout«end I;A)*B)*0*D)*14、运行以下程序后,如果从键盘上输入:65 14回车), 则输出结果为ma i n () int m, n;cout “ 请输入 m, n:" ;c i n»m»n;while (m!=n) while (m>n) m-二n;while (n>m) n-=m;cout« um= "m;A) m=3B) m=2C) m1D) m015、在执行以下程序时,如果从键盘上输入:ABCdef回车),则输出为 ma i n ()( char ch;while (ch=getchar( ) != n') if (ch> A' && ch Z') ch=ch+32;else if (ch> a' &&ch'z') ch=ch-32;cout«ch;)cout«end I ;)A) ABCdefB) abcDEFC) abcD) DEF16、下面程序的运行结果是()ma i n () i nt m7, n=5, i =1;do if (i%m=0);if (i%n=0) cout«i ; break;)i+;)while(i!=0);)A) 7B) 6C) 5D) 41、以下程序运行后的输出结果是()ma i n () int s=。,k;for(k=7;k>=0;k)(switch(k)(case 1:case 4:case 7: s+; break;case 2:case 3:case 6: break;case 0:case 5: s+=2; break;)cout« as= "s;A) s=5B) s=1C)s=3D)s=718、有以下程序ma i n () int c;while (c=getchar () != n') switch(c-, 2*) case 0:case 1: putchar (c+4);case 2: putchar (c+4);break;case 3: putchar (c+3);case 4: putchar (c+2);break;A) 1从第一列开始输入以下数据:2473回车)程序的输出结果是()B) 668977B) 668966C) 66778777D) 6688766 19、当从键盘上输入字符” 12134211”下面程序的输出结果是()。ma i n () char s;int v1=0, v2=0, v3=0, v4=0, k;for (k=0;k<=7;k+) cin»s;switch(s) default: v4+;case '1' : v1+;case ' 3, : v3+;case '2, : v2+; Jcout« "V仁 <<«v1« ",v2= ”v2 “,v3= ”v3 “,v4= ” v4«endl; A) v1=4, v2=2, v3=1,v4=1C) v1=4, v2=9, v3=3, v4=1D) v1=5, v2=8, v3=6,v4=1E) v1=8, v2=8, v3=8, v4=820、运行以下程序后,如果从键盘上输入12 8回车),则输出结果为()。 ma in () int a, b, n1, n2, t;cin»n1»n2;if (n1>n2) t=n1;n1=n2;n2=t;an 1 bn2;whiIe (b!=0) t=a%b;a=b;b=t; cout«a« ' 'n1*n2/a;A) 2 6B) 4 24C) 4 12D) 8 96二:填空题说明:程序有两个空(1)、需要补充完整。注意:不要随意改动程序,不得增行或删行,也不 得改程序的结构!1.给定程序的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该 是:20。若输入:202,则输出应该是:。#i ncIude <iostream> us i ng namespace std; void main()Iong i nt num, k;/*found*/ 答案 k=1; */cout« "Please enter a number:99 ; c i n»num ;do k*=num%10 ;/*found*/ / 答案 num/=10; */ )while(num);cout«end l«k ;2 .给定程序FILL1.C的功能是:计算1至100之间的奇数之和及偶数之和。请填空。 # i ncIude <i ostream> us i ng namespace std;void main()( i nt a, b, c, i ;/*found*/(1);/答案 a=c=O */for(i=0;i<=100;i+=2) (a+二i;/*found*/;/ 答案 b= i+1 */c+=b; 1cout« "sum of evens is :" «a«endI ; cout« "sum of odds is :“ «c-101«endl;)3 .给定程序的功能是:从键盘上输入两个正整数x,y,求它们的最大公约数。例如:如果从键 盘上输入24 36,程序的输出应为:max is : 12o#i ncIude <i ostream>#i ncIude<c