同步练习4.1
1.有数组定义 double d[10]; 以下叙述不正确的是( )。
(A)数组d有10个元素 (B)数组d的最后一个元素是d[10]
(C)数组d的第一个元素*d (D)数组d的字节数是sizeof(double)*10
2.以下对一维数组a的定义正确的是( )。
(A)int n = 5, a[n]; (B)int a(5);
(C)const int N = 5; int a[N]; (D)int n; cin>>n; int a[n];
3.下列数组定义语句中,不合法的是( )。
(A)int a[3] = { 0, 1,2, 3 }; (B)int a[] = { 0, 1,2 };
(C)int a[3] = { 0, 1,2 }; (D)int a[3] = { 0 };
4.已知 int a[10] = { 0,1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a; 以下不能表示数组 a 中元素的表达式是( )。
(A)*a (B)*p (C)a (D)a[ p-a ]
5.已知 int a[] = {0,2,4,6,8,10 }, *p = a+1; 其值等于0的表达式是( )。
(A)* (p++) (B)*(++p) (C)*(p--) (D)*(--p)
【解答】 B C A C D
1.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
int main()
{ int i, count=0, sum=0;double average;int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};for( i=0; i<10; i++ ){ if( a[i] % 2 == 0 )continue;sum += a[ i ];count++;}average = sum/count;cout << "count = " <<count << 't' << "average = " << average <<endl;
}
【解答】
2.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
int main()
{ int a[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };int *p = a, sum =0;for(; p < a+9; p++ )if(*p % 2 == 0 )sum += *p;cout << "sum = " << sum << endl;
}
【解答】
3.设计一个程序,要求有以下功能:
(1)声明一个长度为10的整型数组;
(2)输入数组元素;
(3)寻找数组中的最大值元素和这个元素的下标;
(4)输出最大值元素的值和它的下标值。
【解答】
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{int a[10],max,i,j;cout<<"请输入10个数:";for( i=0;i<10;i++){cin>>a[i]; }max=0; //记录最大元素的下标for(j=0;j<10;j++){if(a[j]>=a[max]) //用当前最大元素与遍历元素比较max=j; //修改最大下标值}cout<<"最大值为:"<<a[max]<<endl;cout<<"它的下标为:"<<max<<endl;
}
同步练习4.2
1. 说明一个长度为10的数组,元素类型为整型指针的正确语句是( )。
(A)int *pary[10]; (B)int (*pary)[10]
(C)int *pary(10); (D)int **pary[10]
2. 有以下语句,则能够输出a+b+c的值的语句是( )。
int a=1, b=2, c=3; int*pary[3]={&a, &b, &c};
(A)cout<<(pary[0]+pary[1]+pary[2]); (B)cout<<(*pary[0]+*pary[1]+*pary[2]);
(C)cout<<(pary[1]+pary[2]+pary[3]); (D)cout<<(*pary[1]+*pary[2]+*pary[3]);
【解答】 A B
使用以下语句:
const int n=20;
int a[n]; int *pa[n]; int i;
for(i=0; i<n; i++)a[i]=i+1;
编写完整的程序,通过pa数组修改数组a元素的值,使其元素值自增10,然后通过pa数组遍历a数组,输出全部元素值,要求每行输出10个元素。
【解答】
#include<iostream>
using namespace std;
int main()
{const int n=20;int a[n];int *pa[n];int i;for(i=0; i<n; i++){a[i]=i+1;pa[i]=a+i; //对指针数组元素赋值*pa[i]+=10; //数组元素值自增10cout<<*pa[i]<<" "; //输出数组元素if((i+1)%10==0) //格式控制 cout<<endl;}
}
同步练习4.3
1.以下不能对二维数组a进行正确初始化的语句是( )。
(A)int a[2][3] = { 0};
(B)int a[][3] = { {0,1 }, { 0 } };
(C)int a[2][3] = { {0, 1 }, { 2, 3 }, { 4, 5 } };
(D)int a[][3] = { 0,1, 2, 3, 4, 5 };
2.已知 int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6}, { 7 } }; 则 a[2][1]的值是( )。
(A)0 (B)2 (C)6 (D)7
3.已知 int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 以下不能表示数组元素a[2][1]的地址是( )。
(A)&a[2][1] (B)*(a[2]+1) (C)a[2]+1 (D)*(a+2)+1
4. 有以下说明语句,则正确的赋值语句是( )。
int a[5][5]; int*p, **q;
(A)p=a; (B)p=*a; (C)q=a; (D)q=*a;
5. 有以下说明语句,则正确的赋值语句是( )。
int a[5][5]; int*p, **q;
(A)p=a[0]; (B)p=&a[0]; (C)q=a[0]; (D)q=&a[0][0];
【解答】 C C B B A
1.阅读程序,写出运行结果。
#include <iostream>
#include <iomanip>
using namespace std;
const int N = 5;
int main()
{ int a[N][N]={ 0 }, i, j, k;for( k=1, i=0; i<N; i++ )for( j=i; j>= 0; j--, k++ )a[j][i - j ] = k;for( i=0; i<N; i++ ){ for( j=0; j<N; j++ )cout << setw( 3 ) << a[i][j];cout << endl;}
}
【解答】
2.以下程序用于输入一个矩阵的元素,并输出指定行的元素。请补充inputAry函数和outputAry函数。
#include<iostream>
using namespace std;
const int N=5;
int main()
{ int ary[N][N], k;inputAry(ary, N);cout<<"输入行号,k = ";cin>>k;outputAry(ary, N, k-1);
}
【解答】
#include<iostream>
using namespace std;
const int N=5;
void inputAry(int ary[N][N], int n );
void outputAry(const int ary[N][N], int n, int line);
int main()
{int ary[N][N], k;inputAry(ary, N);cout<<"输入行号,k = ";cin>>k;outputAry(ary, N, k-1);
}
void inputAry(int ary[N][N], int n)
{cout<<"输入"<<n<<"*"<<n<<"个矩阵元素n";for(int i=0; i<n; i++)for(int j=0; j<n; j++)cin>>ary[i][j];
}
void outputAry(const int ary[N][N], int n, int k)
{for(int i=0; i<n; i++)cout<<ary[k][i]<<" ";cout<<endl;
}
同步练习4.4
1.若用数组名作为调用函数的实参,则传递给形参的是( )。
(A)数组存储首地址 (B)数组的第一个元素值
(C)数组中全部元素的值 (D)数组元素的个数
2.有说明语句:int a[10];
及函数:int fun(int x[10], int n) { returnsizeof(x); }
则语句 cout<<fun(a,10)<<endl; 的显示结果是( )。
(A)40 (B)10 (C)4 (D)0
3.有以下说明语句,则调用函数的正确语句是( )。
int a[10];
void fun( int * ,int n);
(A)fun(a, 10); (B)fun(a[0], 10); (C)fun(*a, 10); (D)fun(&a, 10);
4.有以下说明语句,则调用函数的正确语句是( )。
int b[4][5];
void fun( int * ,int n);
(A)fun(b, 20); (B)fun(b[0], 20); (C)fun(b[0][0], 20); (D)fun(&b, 20);
5. 有以下说明语句,则调用函数的正确语句是( )。
int x[4][5];
void fun( int y[4][5] , int m, int n);
(A)fun(x, 4,5); (B)fun(*x, 4,5); (C)fun(x[0], 4,5); (D)fun(&x, 4,5);
【解答】 A C A B A
1.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
int f(int [],int);
int main()
{ int a[] = { -1, 3, 5, -7, 9, -11 };cout << f( a, 6 ) << endl;
}
int f( int a[], int size )
{ int i, t=1;for( i=0; i<size; i ++ )if( a[i]>0 ) t*= a[i];return t;
}
【解答】
2.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
int f( int [][3], int, int );
int main()
{ int a[][3] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };cout << f( a, 3, 3 ) << endl;
}
int f( int a[][3], int row, int col )
{ int i, j, t=1;for( i=0; i<row; i++ )for( j=0; j<col; j++ ){ a[i][j]++;if( i == j ) t *= a[i][j];}return t;
}
【解答】
3.本程序的main函数定义了一个用二维数组m表示的6×6方阵。程序中:
(1)调用setMatrix函数,对方阵元素赋不大于100的随机整数;
(2)调用diagonal函数,依次把m阵的主对角线、次对角线放在数组a中。
请补充定义setMatrix函数和diagonal函数,使其成为完整程序。
#include<iostream>
#include <cstdlib>
#include<ctime>
using namespace std;
const int N=6;
int main()
{ int m[N][N],a[2*N],i,j;setMatrix( m, N*N ); //调用函数,对方阵元素赋不大于100的随机整数cout<<N<<"*"<<N<<"方阵:n";for( i=0; i<N; i++ ) //输出方阵元素{ for(j=0;j<N; j++) cout<<m[i][j]<< 't';cout<<endl;}diagonal( m, a, N ); //调用函数,依次把m阵的主对角线、次对角线放在数组a中cout<<"对角线元素:n";for( i=0; i<2*N; i++ ) //输出对角线元素cout<<a[i]<<" ";cout<<endl;
}
【解答】
void setMatrix( int matrix[][N],int n ) //matrix是二维数组参数
{ int i,*p; //p是一级指针变量p=*matrix; //二维数组作降维处理srand(unsigned(time(0)));for( i=0; i<n; i++,p++ )*p= rand()%100; //对数组元素赋随机数
}
void diagonal( int matrix[][N], int *ary, int n)
{ int i;for (i=0;i<n;i++){ ary[i]= matrix[i][i]; //主对角线ary[i+n]= matrix[i][n-i-1]; //次对角线}
}
同步练习4.5
1. 以下建立动态存储的语句正确的是( )。
(A)int p=new int; (B)int p=new (10);
(C)int *p(10); (D)int *p=newint(10);
2. 以下建立动态存储的语句正确的是( )。
(A)int p=new int[]; (B)int p=new [10];
(C)int *p=newint[10]; (D)int *p[10]=newint;
3. 有说明语句,则释放动态数组的正确语句是( )。
int *p=new int[10];
(A)delete []p; (B)delete p[]
(C)delete int[]p (D)delete p int[10]
4. 有说明语句,则访问动态数组元素的正确语句是( )。
int *p=new int[10];
(A)int a=p; (B)int a=&p;
(C)int* a=p[1] (D)int a=p[1];
【解答】 D C A C
1.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
int main()
{ int *p; cout << "test1: n" ;p= new int( 5);cout<<*p << endl;p= new int[5];cout << "test2: n";for(int i=0; i<5; i++){ *(p+i)=i+1;cout <<*(p+i) << "t";}cout<<endl;
}
【解答】
2.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
void test1( int *a1 )
{ a1 = new int( 5 );cout << "*a1 = " << *a1 << endl;
}
void test2(int * & a2)
{ a2 = new int( 5 );cout << "*a2 = " << *a2 << endl;
}
int main()
{ int *p = new int( 1 );test1( p );cout << "test1: *p1 = " << *p << endl;test2( p );cout << "test2: *p2 = " << *p << endl;
}
【解答】
3.以下程序修改了同步练习4.3程序练习第2题中程序的主函数,请补充inputAry函数和outputAry函数,使程序完成相同的功能。
#include<iostream>
using namespace std;
int main()
{ int *pa, n, k;cout<<"输入矩阵的阶,n = ";cin>>n;pa=new int[n*n];inputAry(pa, n);cout<<"输入行号,k = ";cin>>k;outputAry(pa, n, k-1);
}
【解答】
#include<iostream>
using namespace std;
void inputAry(int *ary, int n );
void outputAry(const int *ary, int n, int k);
int main()
{int *pa, n, k;cout<<"输入矩阵的阶,n = ";cin>>n;pa=new int[n*n];inputAry(pa, n);cout<<"输入行号,k = ";cin>>k;outputAry(pa, n, k-1);
}
void inputAry(int *ary, int n)
{cout<<"输入"<<n<<"*"<<n<<"个矩阵元素n";for(int i=0; i<n*n; i++)cin>>ary[i];
}
void outputAry(const int *ary, int n, int k)
{for(int i=0; i<n; i++)cout<<ary[n*k+i]<<" ";cout<<endl;
}
同步练习4.6
1.已知 char *a[]={ "fortran", " basic", "pascal","java", "c++" }; 则 cout<<a[3];的显示结果是( )。
(A)t (B)一个地址值 (C)java (D)javac++
2.设有 char *s="ABCDE"; cout<<*(s+1)<<endl; 输出结果是( )。
(A)A (B)B (C)ABCD (D)BCD
3.设有 char *s="ABCDE"; cout<<(s+1)<<endl; 输出结果是( )。
(A)A (B)B (C)ABCD (D)BCDE
4.设有 char *s="ABCDE"; cout<<strlen(s)<<endl; 输出结果是( )。
(A)6 (B)5 (C)4 (D)1
5.设 char *s1, *s2; 分别指向两个字符串,可以判断字符串s1和s2是否相等的表达式为( )。
(A)s1=s2 (B)s1==s2
(C)strcpy(s1,s2)==0 (D)strcmp(s1,s2)==0
【解答】 C B D B D
1.阅读程序,写出运行结果。
#include <iostream>
using namespace std;
int main()
{ char s[] = "abccda";int i; char c;for( i = 1; ( c=s[i] ) != '