计算机程序设计基础(C++)(景红版)课后全部习题集与参考答案解析 下载本文

6. #include using namespace std; void main( )

{ const int N=7; int a[N][N],i,j; for(i=0;i

a[i][j]=a[i][j-1]+a[i][j-2]; for(i=0;i

if (j

7.#include

#include using namespace std; void main( )

{ const int N=5; int a[N][N]; int i,j; for(i=0;i

{ for(j=0;j

8. #include #include using namespace std; void main( )

{ int a[10]={1,1,2,3,2,7,4,2,8,9}; int b=32%6;

int i,j,c=0,k=9; for(i=0;i<9;i++) { if(a[i]==b) { c=c+1; k--;

for(j=i;j<9;j++) { a[j]=a[j+1];} i--;

}

}

for(i=0;i<=k;i++) cout<

四、程序填空题

1.功能:将若干个数按从小到大顺序排序。 #include using namespace std; void main( )

{ int i,j; double temp; double a[11];

cout<<\输入需排序的10个数:\ for(i=1;i<11;i++) cin>>a[i]; for(i=1;i<=9;i++)

for( ① ) if( ② ) { temp=a[i]; ③ ; ④ ;}

cout<<\排序后的10个数为:\ for(j=1;j<=10;j++) cout<

2.功能:使用冒泡法对10个数从大到小排序。 #include void main( )

{ const int N=10; int a[N], j,k;

cout<<\ for(j=0;j>a[j]; for(j=0;j

for(k=0; ① ; k++)

if( ② )

{ a[k]+=a[k+1]; ③ ; ④ ;

for(j=0; ⑤ ;j++) cout<

cout<

3.功能:把一个数列中的所有相同的数删到只剩下一个。 #include using namespace std; void main( )

{ int a[10],i,j,pos=1; for(i=0;i<10;i++) cin>>a[i]; for(i=1;i<10;i++)

{ for(j=0; ① ;j++) if (a[i]==a[j]) break;

if( ② ) { a[pos]=a[i]; pos++; }

}

for(i=0; ③ ;i++) cout<

功能:折半查找

1 #include 2 using namespace std; 3 void main( )

4 { int a[10],low=9,mid,high=0,x,pos;

5 cout<<\请输入10个数(降序):\6 for(int i=0;i<=10;i++) 7 cin>>a[i];

8 cout<<\请输入欲查找的数:\ 9 cin>>x;

10 while(low<=high) 11 {

12 mid=(low+high)/2; 13 if(a[mid]=x)

14 { pos=mid; 15 break; } 16 else if(a[mid]>x) 17 high=mid-1; 18 else

19 low=mid+1;

}

20 }

21 if(low>high)

22 cout<<\没有找到\23 else

24 cout<

本题有七个错误,写出错误行号及正确语句。 ( )

第5章 指针的应用

一、判断题

( )1. 从内存单元中存取数据的方法有直接访问方式和间接访问方式。 ( )2. 能够直接赋值给指针变量的整数是0和1。

( )3. 声明了指向int类型的指针,该指针可以被赋予任何类型对象的地址。 ( )4. 变量的指针,其含义是指该变量的地址。

( )5. 设有如下定义语句:int *p,a;则语句 p=&a;中的运算符‘&’的含义是取变量的值。

( )6. 在使用指针变量时,可以把常量或表达式的地址赋给指针变量,表示该指针指向

常量或表达式的地址。

( )7. 设有定义语句:int a[10];该数组的数组名a是数组首地址,是一个地址常量,是

数组第一个元素的地址。

( )8. 设有如下语句:int *p,a[10]={0};则可用语句: { for(p=a;p

cin>>*p; } 从键盘输入数组的值。

( )9. 在操作一个一维数组时,可能会用到两个指针变量指向该数组,这两个指针变量

之间可以进行关系运算,其关系运算的结果表明了这两个指针变量所指向的数组元素的先后关系。

( )10. 对于已经定义好的相同的两个指针变量之间,可以进行加法运算、减法运算和

赋值运算。

( )11. 设有如下一段程序: int *var,ab;;ab=100;var=&ab;ab=*var+10;执行上面的程

序段后;ab的值为 110。 ( )12. 有如下定义语句:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式可以表

示为 *p+=9。

( )13. 有定义语句:int a[5][5],*p;二维数组a首地址可表示为:p=a[0]或p=&a[0][0]。 ( )14. 有定义语句:int a[3][2]={6,5,4,3,2,1},*p=a[0];cout<<*(p+5)<

出的值为2。

( )15. 在VC++中,存储的分配有两种,即静态存储分配和动态存储分配。

( )16. 静态存储分配:是指程序中使用的变量和数组的类型、数目和大小,是在编程

时由程序员分配确定下来的,因此,在程序运行时这些数据占据的存储空间数也是一定的。

( )17. 动态存储分配:在程序运行过程中按照实际需要申请适量的内存单元,使用结

束后还可以释放,这种存储分配方法被称为动态存储分配。

( )18. 实现动态分配内存,需要运用指针和使用运算符:new和delete。 ( )19. 使用动态存储分配时,用运算符new获取的内存空间,不必须用delete进行释放。

( )20. 对一个指针可以多次调用delete运算符进行释放。在使用delete运算符进行释放

时,不用考虑数组的维数。 二、单项选择题

1. 下列关于指针运算的描述错误的是( )。 (A) 指针变量是用于存储变量地址的变量 (B) 指针变量是用于存储变量值的变量 (C) 在一定条件下,指针变量可以为空值 (D) 可以使用指针变量来访问数组

2. 若已经定义了a为int型变量,则对指针变量p的定义及初始化正确语句是( )。 (A) int *p=a; (B) int p=a; (C) int *p=*a (D) int *p=&a; 3. 若有定义:int x=0, *p=&x;,则语句:cout<<*p;的输出结果是( )。 (A) 随机值 (B) p的地址 (C) x的地址 (D) 0

4. 设有定义语句:int n=0,*p=&n,*q;则以下选项中,正确的语句是( )。 (A) p=1; (B) p=q; (C) *p=*q; (D) *p=5;

5. 已知一运行正常的程序中有下面的语句,由此可知,变量a和b的类型分别是( )。 int *p2=&x,*p1=a;*p2=*b;

(A) int和int (B) int *和int (C) int和int * (D) int *和int * 6. 设有如下的程序段,程序段运行后输出的结果是( )。 { int a=1,b=3,c=5;

int *p1=&a,*p2=&b,*p=&c; *p=*p1*(*p2); cout<

(A) 1 (B) 3 (C) 5 (D) 15 7. 设有如下程序段: int x=8,*p=&x;

cout<<*p++<

(A) 8 (B) 9 (C) 8的地址 (D) 9的地址 8. 设有如下程序段: int x=8,*p=&x;

cout<<++*p<

(A) 8 (B) 9 (C) 8的地址 (D) 9的地址

9. 设有定义语句:int *point, a=4;和 point=&a;下面均代表地址的一组选项是( )。 (A) a, point (B) &a,*point (C) point, &a (D) a, *point 10. 设有定义语句:int a[10],*p=a;对数组元素正确使用的语句是( )。

(A) a[p] (B) p[a] (C) *(p+2) (D) p+2

11. 设有定义语句:int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则数值不为3的表达式是( )。 (A) a[3] (B) p[3] (C) p+=2,*(p++) (D) p+=2,*(++p) 12. 设int x[ ]={1,2,3,4,5,6},*p=x;则数值为3的表达式是( )。 (A) p+=2, *++p (B) p+=2, *p++ (C) p+=3, *p (D) p+=2, ++*p

13. 设有定义语句:int a[5],*p=a; 则下列描述错误的是( )。 (A) 表达式p=p+1是合法的 (B) 表达式a=a+1是合法的