C++理论 题库.docx
- 文档编号:12447380
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:34
- 大小:28.50KB
C++理论 题库.docx
《C++理论 题库.docx》由会员分享,可在线阅读,更多相关《C++理论 题库.docx(34页珍藏版)》请在冰豆网上搜索。
C++理论题库
1)设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表达式是!
((a
c||1)。
2)设inta=12,则执行完语句a+=a-=a*a后,a的值是-264
本题的考查点是赋值表达式的求解。
第一步:
a*a=144;(此时a=12)
第二步:
a-=144相当于a=a-144,a=a-144=-132;(此时a=-132)
第三步:
a+=a相当于a=a+a,a=a+a=-264;
所以该表达式最后的值应当为-264。
故本题答案为D。
3)下列语句分别是不同程序中的第一个输入输出语句。
若去掉其中的"< 4)若语句: cout< ";是程序的第一个输出语句,则输出结果是3141512>>OK! 本题主要考查了C++中格式控制数据的输入输出。 在C++的流操作中,如果输入字符不足指定字符宽度(可以用setw来设置要输出的字符的宽度),可以用setfill函数指定用来填充的字符。 在本例中,设置填充字符为">",然后设置了字符输出宽度为5,对于数据3141512,其长度大于5,故直接输出,而对于"OK! ",其长度为3,不足5,故要在前面填充上两个">",故本题输出应为"3141512>>OK! "。 5)有如下程序: #include #include usingnamespacestd; intmain() { cout.fill('*'); cout< return0; } 执行这个程序的输出结果是123*OK 本题主要考查了字符串与字符数组。 fill函数用来设置要填空的字符串,left用来表示左对齐,setw(4)用来表示下一个输出占4个字符的长度。 故本题输出应为"123*OK"。 6)下面程序 #include voidmain() {intx=100,a=10,b=20,ok1=5,ok2=0; if(a if(b! =15) if(! ok1)x=1; elseif(ok2)x=10; x=-1; cout< } 的输出是-1。 本题的考查点是判断语句的循环嵌套。 第一个判断值为真,过渡到下一个判断,第二个判断为真,过渡到第三个判断......如此循环,在打印输出语句的前一行,程序给变量x赋了值,为-1,所以,无论前期如何变化,最后的x值依然为-1。 7)有以下程序 #include voidmain() {ints=0,a=1,n; cin>>n; do {s+=1;a=a-2;} while(a! =n); cout< } 若要使程序的输出值为2,则应该从键盘给n输入的值是-3 本题的考查点是do-while语句 此语句的一般形式为: do语句 while(表达式) 其特点为: 先执行语句,后判断表达式。 它是这样执行的: 先执行一次指定的内嵌的语句,然后判别表达式,当表达式的值为非零("真")时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。 当n=-1时,s+=1,s=1;a=a-2=-1;a! =n不成立,结束循环,此时s值为1,不符合题意; 当n=-3时,s+=1,s=1;a=a-2=-1;a! =n成立,继续循环,s=s+1=2,a=a-2=-3;a! =n不成立,此时s值为2,符合题意; 8)关于break语句的描述不正确的是break语句可用在if语句中,它可使执行的流程跳出当前的if语句。 9)以下程序执行后sum的值是以下程序执行后sum的值是不确定 #include voidmain() {inti,sum; for(i=1;i<6;i++)sum+=i; cout< } 变量sum在使用时未赋初值,所以无法确定sum最终的值。 本题答案为C。 10)t为int类型,进入下面的循环之前,t的值为0, while(t=1) {......} 则以下叙述中正确的是循环控制表达式的值为1 11)有如下程序 #include voidmain() { inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++) s+=a[i][j]]; cout< } 该程序的输出结果是18。 题中的外循环只执行了2次: 第1次: a[1][0]=3,a[1][1]=4,所以s=7; 第2次: a[2][0]=5,a[2][1]=6,a[2][2]=0,所以s=7+5+6+0=18。 12)有以下程序 #include voidmain() {inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i; pa=a; for(i=0;i<3;i++) if(i<2)pa[1][i]=pa[1][i]-1; elsepa[1][i]=1; cout< } 执行后输出结果是7 本题的考查点是二维数组和指针数组的应用。 在所给的程序中,pa指向二维数组首地址a,接着执行下面的for循环,当i=0或i=1时,数组元素pa[1][i]的值减1,当i=2时,数组元素pa[1][i]的值为1,此时得到新的二维数组a[][3]={{1,2,3},{3,4,1}},最终打印结果就是2+4+1=7。 13)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 #include voidreverse(inta[],intn) {inti,t; for(i=0;i {t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} } voidmain() {intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0; reverse(b,8); for(i=6;i<10;i++)s+=b[i]; cout< }程序运行后的输出结果是22。 本题的考查点是对数组的操作。 本题并不是将整个数组中的内容逆置,而是逆置前8个元素。 逆置后的数组为: 8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 14)在"inta[][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是6 本题考查二维数组的使用。 数组可以在定义的时候给出其初始化的值,如果所给的比数组的大小少,则后面缺省的是0。 15)下列描述中不正确的是可以对整型数组进行整体输入、输出 本题的考查点是对数组的理解。 C++语言规定只能逐个引用数组元素而不能一次引用整个数组。 字符数组的输入、输出可以将整个字符串一次输入或输出。 所以,选项C的说法是不正确的。 16)对于下列语句动态分配的内存,其释放语句正确的是delete[]pa int*pa=new[10]; 17)有以下程序 #include intf1(intx,inty) {returnx>y? x: y;} intf2(intx,inty) {returnx>y? y: x;} voidmain() {inta=4,b=3,c=5,d,e,f; d=f1(a,b);d=f1(d,c); e=f2(a,b);e=f2(e,c); f=a+b+c-d-e; cout< } 执行后输出的结果是5,4,3 本题的考查点是条件运算符。 条件运算符要求有三个操作对象,称三目(元)运算符,它是C语言中唯一的一个三目运算符。 条件表达式的一般形式为 表达式1? 表达式2: 表达式3 条件运算符的执行顺序: 先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。 弄清以上几点,本题也就不难了。 18)在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用内联函数 19)下列有关内联函数的叙述中,正确的是内联函数是通过编译器来实现的 在C++中使用inline关键字来定义内联函数。 inline关键字放在函数定义中函数类型之前。 不过编译器会将在类的说明部分定义的任何函数都认定为内联函数,即使它们没有inline说明。 一个内联函数可以有,也可以没有return语句。 内联函数在程序执行时并不产生实际函数调用,而是在函数调用处将函数代码展开执行。 内联函数是通过编译器来实现的。 20)为了取代C中带参数的宏,在C++中使用内联函数 21)下面程序的输出结果是123 #include usingnamespacestd; voidadd() { staticinta; a++; cout< } intmain() { for(inti=0;i<3;i++) add(); return0; } 22)以下程序的结果是57 #include inta,b; voidfun() {a=100;b=200;} voidmain() {inta=5,b=7; fun(); cout< } 本题主要考查的是C++语言中的变量作用域。 全程变量是可以在子函数中对其值作改变,且它也可作为函数间的值传递。 但当函数或子函数中定义了与全程变量名称相同的局部变量,则全程变量将被屏蔽。 所以本题主函数的局部变量a,b把同名的全程变量屏蔽了。 23)执行下列程序语句后,屏幕输出为4。 #include usingnamespacestd; intn=5; intmain() { intn=3; n++; : : n++; cout< return0; } C++中变量有全局变量和局部变量。 不在任何函数之内声明的变量即为全局变量。 当在一个函数中声明的局部变量与全局变量重名时。 局部变量会将全局变量屏蔽掉。 如果要引用全局变量可以变量名的前面加“: : ”。 24)有如下程序: #include usingnamespacestd; intmain() { int*p; *p=9; cout<<"Thevalueatp: "<<*p; return0; } 编译运行程序将出现的情况是运行时有可能出错 25)下面程序 #include voidmain() { inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; cout<<*(p+2)< } 的输出是3。 *p=a语句是使指针p指向数组a的第一个数组元素,因此*(p+2)即是数组a的第3个元素的值,即a[2]。 26)下列程序的输出结果是102030 #include usingnamespacestd; intn[][3]={10,20,30,40,50,60}; intmain() { int(*p)[3]; p=n; cout< return0; } 二维数组每一行都对应一个指针,这个指针指向每行第一个元素。 题中p[0][0]与n[0][0]对应,*(p[0]+1)与n[0][1]对应,(*p)[2]与p[0][2]对应。 27)有以下程序 #include #include structNODE {intnum;NODE*next;}; voidmain() {NODE*p,*q,*r; p=(NODE*)newNODE; q=(NODE*)newNODE; r=(NODE*)newNODE; p->num=10;q->num=20;r->num=30; p->next=q;q->next=r; cout< } 程序运行后的输出结果是40。 p->num即为10,q->next->num即为r->num,为30,所以p->num+q->next->num=10+30=40。 28)设有以下说明语句 structex {intx;floaty;charz;}example; 则下面的叙述中不正确的是example是结构体类型名 example是结构体变量名 29)以下程序的功能是: 建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请为下划线处有号码的选择出正确的选项。 #include stuctnode {chardata; node*next;}; node*CreatList(char*s) {node*h,*p,*q; h=(node*)newnode; p=q=h; while(*s! ='\0') {p=(node*)newnode; p->data=*s; q->next=p; q=p; s++; } p->next='\0'; returnh; } voidmain() {charstr[]="linklist"; node*head; head=CreatList(str); ... } 本题要求建立一个structnode类型的数据链表,从main()函数中可知,head是"头指针"变量,它的值是由CreatList(str)带回的一个结构体类型的指针变量,指向所建立的表的第一个数据,所以第48空应该填structnode*。 30)写出执行完下列程序段以后指定的变量的值: boolx=true,y=false,z=false; x=x&&y||z; y=x||y&&z; z=! (x! =y)||(y==z); 已知x=false,z=true,则y=0/false。 31)下列语句段的输出结果是1024 intk=1,n=10,m=1; while(k<=n) { m*=2; n--; } cout< while循环是当型循环,本题的条件是k<=n;k的初始值为1,而每次循环都会执行n--,循环执行10次,故最后输出1024。 32)以下程序中,函数SumColumMin的功能是: 求出M行N列二维数组每列元素中的最小值,并计算它们的和值。 和值通过形参传回主函数输出。 请填空。 #defineM2 #defineN4 voidSumColumMin(inta[M][N],int*sum) {inti,j,k,s=0; for(i=0;i {k=0; for(j=1;j if(a[k][i]>a[j][i])k=j; s+=a[k][i]; } *sum=s; } voidmain() {intx[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin(x,&s); cout< } 33)以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。 请填空: #defineN3 #defineM4 voidLineMax(intx[N][M]) {inti,j,p; for(i=0;i {p=0; for(j=1;j if(x[i][p] cout<<"Themaxvalueinline"< } } voidmain() {intx[N][M]={1,.5,7,4,2,6,4,3,8,2,3,1}; LineMax(x); } 34)以下程序的功能是调用函数fun计算: m=1-2+3-4+…+9-10,并输出结果。 请填空。 intfun(intn) {intm=0,f=1,i; for(i=1;i<=n;i++) {m+=i*f; f=-f; } returnm; } voidmain() {cout<<"m="< 35)以下程序运行后的输出结果是3,2,2,3。 voidfun(intx,inty) {x=x+y;y=x-y;x=x-y; cout< voidmain() {intx=2,y=3; fun(x,y); cout< } 被调函数fun()实现的功能是交换变量x和y的值并打印,由于该函数无返回值,所以在主函数中打印出的x和y的值仍然为2,3。 36)下面程序的运行结果是: 35。 voidswap(int*a,int*b) {int*t; t=a;a=b;b=t; } voidmain() {intx=3,y=5,*p=&x,*q=&y; swap(p,q); cout<<*p<<*q; } 观察本题的程序可以看出,被调函数swap()实现的功能是交换变量的值,但由于函数不返回任何值,所以在main()函数中打印出的变量的值并没有发生交换,即仍为3和5。 1)若x和y都是int型变量,x=100、y=200,且有下面的程序片段 cout<<(x,y); 上面程序片段的输出结果是2 本题的考查点是逗号表达式。 在(x,y)中的","是一个特殊的运算符,叫做逗号运算符,它的一般形式为: 表达式1,表达式2,求解过程为: 先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值,(x,y)的值为200,所以输出结果为200。 2)以下程序的输出结果是101091 #include voidmain() {intx=10,y=10,i; for(i=0;x>8;y=++i) cout< } for语句的一般格式为: for(表达式1;表达式2;表达式3)语句执行中只要表达式2为真,则执行for语句中指定的内嵌语句。 所以,本题在条件为真的情况下,先执行printf函数。 x--是先使用后运算。 3)请读程序: #include #include voidmain() { inta,b; for(a=1,b=1;a<=100;a++){ if(b>=20)break; if(b%3==1){b+=3;continue;} b-=5; } cout< } 上面程序的输出结果是8。 "%"是求余运算符,执行第一次循环时,条件(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b>=20)为假,跳出循环,此时共循环8次,即a=8。 4)当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为n-1。 5)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 #include voidsort(inta[],intn) {inti,j,t;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+理论 题库 C+ 理论