C++试卷
1. 由C++目标文件连接而成的可执行文件的缺省扩展名为( C )。
(A)?? cpp?????????????????????????? (B)?? obj?????????? ??????? (C)?? exe?????????? ???????????????? (D)??????? dll
2. 下列选项中全部都是C++关键字的选项为( B )。
(A)?? cpp? ??? int?????? break
(B)?? int????? char???? new???????? ???????
(C)?? break??? CASE??? sizeof? ????????????????????????
(D)? switch?? float???? integer
3. 下列四个选项中,不能交换变量a和b的值是( B? )。
(A)?? a=a-b, b=a+b, a=b-a;?????????????????????? (B)? t=a, a=b, t=b, b=a;
(C)?? t=a, a=b, b=t;??????????????????????????????????? (D)? t=b, a=b, b=a;
4. 字符串"Hello,\nHi\041"包含的有效字符个数为(? D ?)。
(A)?? 14???????????????????? (B)?? 13???????????????????? (C)?? 12??? ???????????????? (D) 10
算入\0
如果是strlen,是9
5. 下列代码执行的结果是( B ?)。
int x = 3510;?? double y = x/100*100;?? cout <<y;
(A)?? 3510??????????????? (B)?? 3500??????????????? (C) 3000????????? ?? (D) 1
6. 已知int i=3;下面语句执行的循环次数是( B ?)。
?? do{? i--; cout<<i<<endl; } while(? i != 1 );
??? (A)?? 1?????????????????????????????? (B)?? 2????? ???????????????????????? (C)?? 3?????????????????????? ??????? (D)? 无限次
7. 假设int a=1, b=2, &ra=a, &rb=b; 下列正确的语句是( B? )。
(A)?? &ra=a;????????????????????? (B)?? rb = ra;??? ???????????????? (C)?? &rb=&ra;??????? ??????? (D)? *rb=*ra;
见上一篇,这只是简单的修改值
8. 在下面的函数声明中,存在着语法错误的是( D? )。
(A)?? void f( int a, int )????????????????????? ??????? (B) void f( int a,? int b )
(C)?? void f(int a, int b=5) ????? ????????????(D) void f( int a;? int b )
9. 若有定义语句: int a[2][3],*p[3]; 则以下语句中正确的是( C? )。
(A)? p=a;??????????????? (B)?? p[0]=a;????????????????? (C)?? p[0]=&a[1][2];?? ??????? (D)? p[1]= &a;
10. 下列代码输出结果为( D )
int* arr = new int[10];?? ????cout <<arr[0];?
(A)? 编译时将产生错误??????? (B)?? 编译正确,运行时将产生错误??? ????????????????
(C)? 输出零???????????????????? ?????? ?(D) 输出值不确定
正确的,没赋值
11. 已知char* s1= "123", *s2="34";则?? strcmp(s1, s2)的值为下列哪个( B?? )。
(A) 1???????????????????????????????? (B)-1???????????????????????????????? (C) "12334"??????????? (D) "34"
12. 若有以下声明和定义,
struct? worker则下列错误的引用是(? D? )。
{ int? no ;? char name[ 20 ] ;? } w, ?*p=&w ;
(A)?? w.no=3011;???????????? (B)?? p->no=3011;?????????? (C)?? (*p).no=3011; ??????? (D) *p.no=3011;
二、简答题 (共12分)
1、(3分) 有以下语句:
int? a = 63;?? double? b = 3.456789 ;??
?? cout<<setfill('#')<<setw(6)<<hex<<a<<'\n'<<setprecision(5)<< b<<endl;
输出显示什么?
####3f
有自动补齐,16进制
3.4568
有四舍五入
2、(3分) 有说明int ?A[3][ 5]; 写出两个不同形式的表示A[1][3]元素值的表达式。
??? A[1][3]?? * (A[1]+3)??? * (*(A+1)+3)
3. (3分)设有说明double? a[6]= { 0 }, *b = new? double [6];? sizeof(a), sizeof(b)的值各是多少?并分析结果原因。
??? 48????? 4
4、(3分)设有函数调用语句 Count(A ,N, right, negative); 功能是由参数right, negative返回统计数组A 的N个元素中正整数和负整数的个数。对应的函数原型是什么?
void? Count( int *? , int,? int &, int &);
三、读程序写结果(共6题,每题 4~5分,共28分)
1、(4分):
#include<iostream.h>
const int N=5;
void main()
{?? int a[N] = { 8,6,5,4,1 }, i, temp;
??? for( i=0; i<N/2; i++ )
??? ?{ temp = a[i]; a[i] = a[N-i-1]; a[N-i-1] = temp;? }
??? for( i=0; i<N; i++ )
?????? cout<<a[i]<<' ';
}
答案:1 4 5 6 8
2、(4分)。
#include<iostream.h>
void fun()
{ static int a=0;? int b=0;
? a+=2; ++b;
? cout<<a<<'\t'<<b<<endl;
}
void main()
{ ?for(int i=1; i<4; i++) fun(); ?}
答案:
2?? 1
4?? 1
6?? 1
3、(4分)。
#include<iostream.h>
void main()
{ int i;char c;
? char s[]="abccda";?
? for(i=1;(c=s[i])!= '\0';i++)
? { switch(c)
??? ??? { case 'a':cout<<'%';continue;
?????? ? case 'b':cout<<'%';break;
?????? ? case 'c':cout<<'*';break;
?????? ? case 'd': continue;
??? ??? }
??? cout<<'#'<<endl;
}
}
答案:
%#
*#
*#
%
4、(5分)
#include<iostream.h>
void func( char *p )
{ if( *p=='\0' ) return ;
? func( p+1 );
? cout<<*p;
}
void main()
{ func("hello"); }
答案:
Olleh
逆序
5、(5分)。
#include <iostream.h>
void func(int, int&, int *) ;
void main()
{? int x=11, y=22, z=33 ;
???? func(1, x, &z) ;?? cout<<x<<' '<<y<<' '<<z<<endl;
???? func(2, z, &y) ;?? cout<<x<<' '<<y<<' '<<z<<endl;
}
void func(int a, int &b, int *c)
{? b+=a ;? *c=b-a; }
答案:
12 22 11
12 11 13
6、(5分)
#include<iostream.h>
#include<iomanip.h>
void func(int *p)
{?? int t;
??? for(int i=0;i<3;i++)
??? ? for(int j=i;j<3;j++)
?????? { ?t=*(p+3*i+j);
*(p+3*i+j)=*(p+3*j+i);
*(p+3*j+i)=t; }
}
void main()
{?? int a[3][3]={1,2,3,4,5,6,7,8,9},*p,i,j;
??? p=&a[0][0];
??? func(p);
??? for(i=0;i<3;i++)
??? {?? for(j=0;j<3;j++)
?????? cout<<setw(5)<<a[i][j];
?????? cout<<endl;
??? }
}
答案:
?? 1??? 4??? 7
?? 2??? 5??? 8
?? 3??? 6??? 9
五、编程题(共14分)
1.( 6 )编写程序其功能是输出1000以内个位数为6且能被3整除的所有正整数。要求输出格式为:每一行显示10个数,每个数的宽度为5。图1是输出效果。
#include <iostream.h>
#include <iomanip.h>
void main ( )
{ cout<< "1000以内个位数为6
且能被3整除的所有正整数:\n\n";
? for (int i=0,j=0 , k=0 ;? i <100? ; i++ )
? { j = i * 10 + 6 ;
??? if? ( j % 3? )? continue;??
??? cout << setw(5)<<j;
??? if( (++ k %10 )== 0 ) cout<<endl;?
? }
? cout<<endl;??
}
2、(8分)以下程序用随机函数生成两位整数,取M个各不相等的数据,按生成顺序存放在数组a中。图2是生成20个数据的显示效果。请按照题意编写insert函数及填写函数原型。
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>?????????????????????????
#include<time.h>
_____________________;//insert函数原型int insert( int *ap, int k, int n ); ? ?????????????????
void main()??????????????????????????????
{ const int M=20;
? int n, i=0;
? int a[M]={ 0 };
? srand(time(0));
? while (i<M)
? { do{ n=rand()%100;}while(n<10);? //生成数据
??? if( insert( a, i, n ) ) i++;?? //把不相同数据插入数组a
?? }
? cout<<"生成的数组:"<<endl;
? for( i=1; i<=M;i++ )??
?? { cout<<a[i]<<"? "; if(i%10==0)cout<<endl;? }
???? cout<<endl;
}
int insert(int *ap, int k, int n)
{ for(int j=0; j<k; j++)??? ?????? //滤去相同数
??? if( ap[j]== n ) break;
? if(j==k){ ap[j] = n; return 1; } //添加数据
? return 0;
}
世间温柔,不过是芳春柳摇染花香,槐序蝉鸣入深巷,白茂叶落醉故乡。