资源描述
一、单项选择题
1. 函数调用不可以( D )。
A. 出现在一个表达式中
B. 出现在执行语句中
C. 作为一个函数的实参
D. 作为一个函数的形参
2. 以下正确的描述是( B )。
A. 函数的定义可以嵌套,函数的调用不可以嵌套
B. 函数的定义不可以嵌套,函数的调用可以嵌套
C. 函数的定义和函数的调用均可以嵌套
D. 函数的定义和函数的调用均不可以嵌套
3. 若用数组名作为函数调用的实参,传递给形参的是( A )。
A. 数组的首地址 B. 数组中第一个元素的值
C. 数组全部元素的值 D. 数组元素的个数
4. 以下错误的描述是( D )。
A. 被调用函数中可以不用return语句
B. 被调用函数中可以用多个return语句
C. 被调用函数中,如果有返回值,就一定要有return语句
D. 被调用函数中,一个return语句可返回多个值给调用函数
5. 以下正确的描述是( C )。
A. 不允许设置参数的默认值
B. 设置参数的默认值只能在定义函数时设置
C. 设置参数的默认值时,应该设置右边的参数
D. 设置参数的默认值时,应该全部参数都设置
6. 采用重载函数的目的是( D )。
A. 实现共享 B. 减少空间
C. 提高速度 D. 使用方便,提高可读性
7. 将两个字符串连接起来组成一个字符串时,选用( C )函数。
A. strlen() B. strcap() C. strcat() D. strcmp()
8. 以下叙述中正确的是( B )。
A. 使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值
B. 使用const定义的常量名有类型之分,其值在程序运行时是不可改变的
C. 在程序中使用内联函数使程序的可读性变差
D. 在定义函数时可以在形参表的任何位置给出缺省形参值
9. 下面的标识符中,( C )是文件级作用域。
A. 函数形参 B.语句标号 C.外部静态类标识符 D.自动类标识符
19. 设array为一个数组,则表达式sizeof(array)/sizeof(array[0])的结果为( B )。
A. array数组首地址
B. array数组中元素个数
C. array数组中每个元素所占的字节数
D. array数组占的总字节数
10. 用new运算符创建一个含10个元素的一维整型数组的正确语句是( C )。
A. int *p=new a[10]; B. int *p=new float[10];
C. int *p=new int[10]; D. int *p=new int[10]={1,2,3,4,5}
11. 下列给字符数组赋初值时,正确的是( A )。
A. char s1[]=”abcdef”; B. char s2[4]=”abcd”;
C. char s3[2][3]={“abc”,”xyz”}; D. char s4[4][]={‘a’,’x’,’s’,’t’};
12. 设有定义“static int data[5][6];”,设该数组在静态存储区中的起始地址为十进制的100,若每个int型数占4个字节,则数组元素data[2][3]的地址为( D )。
A. 115 B.124 C.130 D.160
13. 假定变量m定义为“int m=7;”,则定义变量p的正确语句为( B )。
A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m;
14. 假定k是一个double类型的变量,则关于变量p的正确定义语句为( D )。
A. double p=&k; B. int *p=&k;
C. double &p=*k; D. char *p=”Thank you!”;
15. 变量s的定义为“char *s=”Hello world!”;”,要使变量p指向s所指向的同一个字符串,则应选取( A )。
A. char *p=s; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s;
16. 关于void 指针,下列说法正确的是( C )。
A. void 指针就是未指向任何数据的指针
B. void 指针就是已定义而未初始化的指针
C. 指向任何类型数据的指针可直接赋值给一个void 指针
D. void 指针值可直接赋给一个非void 指针
17. 假定一条定义语句为“int a[10], x, *pa=a;”,若要把数组a中下标为3的元素值赋给x,则不正确的语句为( D )。
A. x=pa[3]; B. x=*(a+3); C. x=a[3]; D. x=*pa+3;
18. 假定有定义“int b[10]; int *pb;”,则不正确的赋值语句为(D )。
A. pb=b; B. pb=&b[0]; C. *pb=new int; D. pb=b[5];
19. 假定p是具有double类型的指针变量,则表达式++p使p的值(以字节为单位)增加( C )。
A. 1 B. 4 C. sizeof(double) D. sizeof(p)
20. 假定p指向的字符串为”string”,则cout<<p+3的输出结果为( C )。
A. string B. ring C. ing D. i
21. 假定p指向的字符串为”string”,若要输出这个字符串的地址值,则使用( D )。
A. cout<<*p; B. cout<<p; C. cout<<&p; D. cout<<(void *)p;
22. 定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为( A )。
A. int *p=new int[30]; B. int *p=new int(30);
C. int *p=new [30]; D. *p=new int[30];
23. 假定p是具有int**类型的指针变量,则给p赋值的正确语句为( B )。
A. p=new int; B. p=new int*; C. p=new int**; D. p=new int[10];
24. 要使语句“p=new int[10][20];”能够正常执行,p应被事先定义为( D )。
A. int *p; B. int **p; C. int *p[20]; D. int(*p)[20];
25. 假定有“struct BOOK{char title[40]; float price;}; BOOK *book=new BOOK;”,则正确的语句为( A )。
A. strcpy(book->title,”Wang Tao”); B. strcpy(book.title,”Wang Tao”);
C. strcpy(*book.title,”Wang Tao”); D. strcpy((*book)->title,”Wang Tao”);
26. 假定有“struct BOOK{char title[40]; float price;}; BOOK *book;”,则不正确的语句为( A )。
A. BOOK *x=new book; B. BOOK x={"C++ Programming",27.0};
C. BOOK *x=new BOOK; D. BOOK *x=book;
27. 假定有“struct BOOK{char title[40]; float price;}book;”,则正确的语句为( B )。
A. BOOK &x= &book; B. BOOK &x=book;
C. BOOK &x=new BOOK; D. BOOK &x=BOOK;
28. 下列对引用的陈述中不正确的是( C )。
A. 每一个引用都是其所引用变量的别名,因此必须初始化
B. 形式上针对引用的操作实际上作用于它所引用的变量
C. 一旦定义了引用,一切针对其所引用变量的操作只能通过该引用间接进行
D. 不需要单独为引用分配存储空间
29. 假定变量a和pa定义为“double a[10], *pa=a;”,要将12.35赋值给a中的下标为5的元素,不正确的语句是( D )。
A. pa[5]=12.35; B. a[5]=12.35;
C. *(pa+5)=12.35; D. *(a[0]+5)=12.35;
30. 假定变量b和pb定义为“int b[10], *pb=b;”,要将24赋值给b[1]元素中,不正确的语句是( C )。
A. *(pb+1)=24; B. *(b+1)=24; C. *++b=24; D. *++pb=24;
31. 假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( A )。
A. delete p; B. delete *p; C. delete &p; D. delete []p;
32. 假定指针变量p定义为“int *p=new int[30];”,要释放p所指向的动态内存,应使用语句( D )。
A. delete p; B. delete *p; C. delete &p; D. delete []p;
33. 假定变量x定义为“int x=5;”,要使rx成为x的引用(别名),rx应定义为( D )。
A. int rx=x; B. int rx=&x; C. int *rx=&x; D. int &rx=x;
34. 下面的这个循环的循环次数是:for(int i=0,j=10;i=j=10;i++,j--). (A)
A无限次 B. 语法错误,不能执行 C. 10 D.1
35.下列do-while循环的循环次数是: (B)
for(int i=0,x=0;!x&&i<=5;i++)
A.5 B.6 C.1 D无限次
36.C++程序的执行总是从哪里开始的?(A)
A.main函数 B..第一行 C..头文件 D.函数注释
二、填空题
1. 含随机函数的表达式rand()%20的值在___0__至___19___区间内。
2. 在程序中执行到__return______语句时,将结束所在函数的执行过程,返回到调用该函数的位置。
3.在程序执行完____main____函数后,将结束整个程序的执行过程,返回到操作系统下的C++集成开发窗口。
4. 当在程序中执行到____continue____语句时,将结束所在循环语句中循环体的一次执行。
12. 元素类型为int的数组a[10]共占用___40_____字节的存储空间。
5. 假设double类型的数据占4字节,元素类型为double的二维数组a[4][6]共占用_____192___字节的存储空间。
6. 假设char类型的数据占1字节,元素类型为char的二维数组a[10][30]共占用___300_____字节的存储空间。
7. 存储字符’a’和字符串”a”分别需要占用___1_____和_____2___个字节。
8. 空串的长度为___0_____,存储它需要占用____1____个字节。
9. 字符串”\’a\’xy=4\n”的长度为____8____。
10. 字符串”a:\\xxk\\数据”的长度为____11____。
11. 用于存储一个长度为n的字符串的字符数组的长度至少为____n+1____。
12. 若a是一个字符数组,则从键盘上向该数组输入一个字符串的表达式为____cin>>a______。
13. 若a是一个字符数组,则向屏幕输出a中所存字符串的表达式为___cout<<a_______。
14. 一个二维字符数组a[10][20]能够存储___10_____个字符串,每个字符串的长度至多为_____19___。
15. 对一个二维字符数组a进行初始化的数据为{”123”,”456”,”789”},则a[1]元素对应的字符串为_____”456”_____。
16. strlen(”apple”)的值为____5____,strcmp(”a”,”A”)的值为___1_____。
17. 若需要把一个字符串”aaa”赋值到字符数组a中,则需要执行___strcpy_____函数的调用来实现。
18. 假定对二维数组a[3][4]进行初始化的数据为{{3,5,6},{2,8},{7}},则a[1][1]和a[2][3]分别被初始化为___8____和______0__。
19. 在C++语言中,一个函数由函数头和____函数体______组成。
20. 重载一个函数的条件是:该函数必须在参数的个数或参数的____类型______上与其它同名函数有所不同。
22. 如果一个函数直接或间接地调用自身,这样的调用称为____递归________调用。
23.假定p所指变量对象的值为25,p+1所指对象的值为42,则*++p的值为_____42___。
24. 假定p所指变量的值为25,p+1所指变量的值为42,则执行(*p)++运算后,p所指对象的值为____26____。
25.假定p所指变量的值为25,p+1所指变量的值为42,则执行*p++运算后,p所指变量的值为____42____。
26. 假定对数组a[]进行初始化的数据为{2,7,9,6,5,7,10},则a[2]和a[5]分别被初始化为_____9___和_____7___。
27. 假定一个变量为int*类型,则指向该变量的指针类型为____int **__。
28. 假定p是一个指向整数变量的指针,则用____*p____表示该整数变量,用_____&p___表示指针变量p的地址。
三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面。
1. 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。
#include <iostream.h>
const int N=8;
void main()
{
int a[N],*p,*q;
for(p=a; p<a+N; p++) ___(1)___;
p=a;q=a+N-1;
while(p<q) {
int r=*p; *p=*q; *q=r;
___(2)___; ___(3)___;
}
for(p=a;p<a+N; p++)
cout<<*p<<' ';
cout<<endl;
}
(1) cin>>*p (2) p++ (或++p) (3) q-- (或--q)
2. 从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。注意二进制数的存放是按照从低位到高位的次序进行的。
#include <iostream.h>
void main()
{
int x;
cout<<"输入一个整数:";
cin>>x;
int a[20],k=0,r;
do {
r=x%2;
a[k++]=r;
x=___(1)___;
} while(___(2)___);
for(--k;k>=0;k--) ___(3)___;
cout<<endl;
}
(1) x/2 (2) x!=0 (3) cout<<a[k]
3. 对数组a[n]按升序进行的选择排序算法
void SelectSort(int a[], ___(1)___)
{
int i,j,k;
for(i=1;i<n;i++) { //进行n-1次选择和交换
k=i-1;
for(j=i;j<n;j++)
if(a[j]<a[k]) ___(2)___;
int x=a[i-1]; a[i-1]=a[k]; ___(3)___;
}
}
(1) int n (2) k=j (3) a[k]=x
4. 对数组a[n]按升序进行的插入排序算法
void InsertSort(___(1)___, int n)
{
int i,j,x;
for(i=1;i<n;i++) { //进行n-1次循环
x=a[i];
for(j=i-1;j>=0;j--) //为x顺序向前寻找合适的插入位置
if(x<a[j]) ___(2)___;
else ___(3)___;
a[j+1]=x;
}
}
(1) int a[] (或int* a) (2) a[j+1]=a[j] (3) break
5. 对按从小到大排列的有序数组a[n]进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。
int BinarySearch(int a[],int x)
{
int low=0, high=N-1; //定义并初始化区间下界和上界变量
int mid; //定义保存中点元素下标的变量
while(low<=high) {
mid=___(1)___;
if(x==a[mid]) ___(2)___;
else if(x<a[mid]) high=mid-1;
else ___(3)___;
}
return -1;
}
(1) (low+high)/2 (2) return mid (3) low=mid+1
6. 用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。
void sort(char *table[], int size){
for(int i=1,___(1)___; i++){
char *p=table[i];
for(int j=i-1; j>=0 ; j--)
if(strcmp(p,table[j])<0) ___(2)___;
else break;
table[j+1]=___(3)___;
}
}
(1) cin>>*p (2) p++ (或++p) (3) q-- (或--q)
7. 输入某一年的年份和月份,计算该月的天数
#include <iostream.h>
void main()
{ int year,month,day;
cout<<"Input year and month:";
cin>>year>>month;
switch (_____1_____)
{ case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: _____2____;break;
case 4:
case 6:
case 9:
case 11: _____3_____;break;
case 2:if (______________4_______ _______)
day=29;
else
day=28;
break;
_______5______:cout<<"Input data error!"<<endl;day=0;break;
}
if (day!=0)
cout<<"The day of "<<year<<','<<month<<" is "<<day<<endl;
}
四、指出程序或函数的功能
1. void f2(double a[], int n)
{
int i; double sum=0;
for(i=0;i<n;i++) sum+=a[i];
sum/=n;
for(i=0;i<n;i++)
if(a[i]>=sum) cout<<a[i]<<’ ’;
cout<<endl;
}
功能: 显示输出数组a[n]中大于等于平均值的所有元素值。
2. void f4(char a[M][N])
{
int c1,c2,c3;
c1=c2=c3=0;
for(int i=0;i<M;i++)
if(strlen(a[i])<5) c1++;
else if(strlen(a[i])>=5 && strlen(a[i])<15) c2++;
else c3++;
cout<<c1<<’ ’<<c2<<’ ’<<c3<<endl;
}
功能:对于二维字符数组a中保存的M个字符串,分别统计并输出其长度小于5、大于等于5且小于15、大于等于15的字符串个数。
3. void fun3(int a[][N], int m, int n, int& row, int& col)
{
int x=a[0][0];
row=col=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(a[i][j]>x) {
x=a[i][j]; row=i; col=j;
}
}
功能:从一个二维整型数组中查找具有最大值的元素,由引用参数row和col带回该元素的行号和列号。
5. char* f8(char* str1, const char* str2)
{
int i=0,j=0;
while(str1[i]) i++;
while(str2[j]) str1[i++]=str2[j++] ;
str1[i]='\0';
return str1;
}
功能:实现strcat函数的功能,把str2所指字符串连接到str1所指字符串的后面,并返回str1指针。
6. int f8(const char* str1, const char* str2)
{
int i=0;
while(str1[i] && str2[i])
if(str1[i]==str2[i]) i++;
else if(str1[i]>str2[i]) return 1;
else return -1;
if(str1[i]==str2[i]) return 0;
else if(str1[i]>str2[i]) return 1;
else return -1;
}
功能:
实现strcmp函数的功能,比较两个字符串str1和str2的大小,若str1较大则返回1,若str2较大则返回-1,若两者相等则返回0。
7.#include<iostream.h>
void f(int &a,int &b)
{
int t=a; a=b; b=t;
}
void main(void)
{
int x=10,y=15;
f(x,y);
cout<<x<<’\t’<<y<<’\n’;
}
8.#include<iostream.h>
void main(void)
{ int i=10;
switch (i)
{ case 9:i++;
case 10:++i;
case 11:i++;
default:i=i+1;
}
cout<<i<<endl;
}
五、写出程序运行结果
1. #include<iostream.h>
void main() {
char a[]="abcdabcabfgacd";
int i1=0, i2=0, i=0;
while(a[i]) {
if(a[i]==’a’) i1++;
if(a[i]==’b’) i2++;
i++;
}
cout<<i1<<’ ’<<i2<<’ ’<<i<<endl;
}
结果:4 3 14
2. #include<iostream.h>
void main() {
int a[8]={36,25,48,14,55,40,50,24};
int b1, b2;
b1=b2=a[0];
for(int i=1;i<8;i++)
if(a[i]>b1) {b2=b1; b1=a[i];}
else if(a[i]>b2) b2=a[i];
cout<<b1<<' '<<b2<<endl;
}
结果:55 50
3. #include<iostream.h>
void f4(int a[], int n, int& s)
{
s=0;
for(int i=0; i<n; i++) s+=a[i];
}
void main()
{
int b[8]={4,8,6,9,2,10,7,12};
int x; f4(b,5,x);
cout<<x<<' ';
int y; f4(b+3,4,y);
cout<<y<<' ';
cout<<x+y<<endl;
}
结果:29 28 57
4. #include<iostream.h>
void f2(int& x, int& y)
{
int z=x; x=y; y=z;
}
void f3(int* x, int* y)
{
int z=*x; *x=*y; *y=z;
}
void main()
{
int x=10,y=26;
cout<<"x,y="<<x<<", "<<y<<endl;
f2(x,y);
cout<<"x,y="<<x<<", "<<y<<endl;
f3(&x,&y);
cout<<"x,y="<<x<<", "<<y<<endl;
x++; y--;
f2(y,x);
cout<<"x,y="<<x<<", "<<y<<endl;
}
结果: x,y=10, 26
x,y=26, 10
x,y=10, 26
x,y=25, 11
5. #include<iomanip.h>
const int N=3;
void main()
{
int a[N][N]={{7,-5,3},{2,8,-6},{1,-4,-2}};
int b[N][N]={{3,6,-9},{2,-8,3},{5,-2,-7}};
int i,j,c[N][N];
for(i=0;i<N;i++) //计算矩阵C
for(j=0;j<N;j++)
c[i][j]=a[i][j]+b[i][j];
for(i=0;i<N;i++) { //输出矩阵C
for(j=0;j<N;j++)
cout<<setw(5)<<c[i][j];
cout<<endl;
}
}
结果: 10 1 -6
4 0 -3
6 -6 -9
6.#include<iostream.h>
#include<string.h>
struct Worker {
char name[15]; //姓名
int age; //年龄
float pay; //工资
};
void main()
{
Worker x;
char * t="WeiRong";
int d=45;
float f=1235;
strcpy(x.name, t);
x.age=d;
x.pay=f;
cout<<x.name<<" "<<x.age<<" "<<x.pay<<endl;
}
结果: WeiRong 45 1235
7. #include<iomanip.h>
void LG(int*& a, int& m)
{
a=new i
展开阅读全文