当前位置:文档之家› 最新C++程序设计基础课后答案--第四章

最新C++程序设计基础课后答案--第四章

4.1 阅读下列程序,写出执行结果1.#include <iostream.h>void main(){ int i, conut=0, sum=0 ;float 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 ] ;conut ++ ;}average = sum / conut ;cout << "conut = " << conut << '\t' << "average = " << average << endl ;}2.#include <iostream.h>void 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.const int n = 5 ;#include <iostream.h>#include <iomanip.h>void 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 ;}}4.int f(int [],int);#include <iostream.h>void 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;}5.int f( int [][3], int, int ) ;#include <iostream.h>void 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 ;}6.#include<iostream.h>void test1( int *a1 ){ a1 = new int( 5 ) ;cout << "*a1 = " << *a1 << endl ;}void test2(int * & a2){ a2 = new int( 5 ) ;cout << "*a2 = " << *a2 << endl ;}void main(){ int *p = new int( 1 ) ;test1( p ) ;cout << "test1: *p1 = " << *p << endl ;test2( p ) ;cout << "test2: *p2 = " << *p << endl ;}7.#include <iostream.h>void main(){ char s[] = "abccda" ;int i ; char c ;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 ;}}8.#include <iostream.h>void main(){ char *str[] = { "c++", "basic", "pascal" } ;char **p ;int i ;p = str ;for( i=0 ; i<3 ; i++ )cout << *( p+i ) << endl ;}9.#include <iostream.h>void main(){ char s1[] = "Fortran" , s2[] = "Foxpro" ;char *p , *q ;p = s1 ; q = s2 ;while( *p && *q ){ if ( *p == *q )cout << *p ;p ++ ;q ++ ;}cout << endl ;}10.#include <string.h>#include <iostream.h>void main(){ char str[][10] = { "vb", "pascal", "c++" }, s[10] ;strcpy( s , ( strcmp( str[0] , str[1] ) < 0 str[0] : str[1] ) ) ;if( strcmp( str[2], s ) < 0 ) strcpy( s, str[2] ) ;cout << s << endl ;}4.2 思考题1.数组说明语句要向编译器提供什么信息?写出一维数组、二维数组说明语句的形式。

2.数组名、数组元素的区别是什么?归纳一维数组元素地址、元素值不同的表示形式。

有说明int aa [3], *pa=aa;使用aa或pa,写出3个以上与aa[2] 等价的表达式。

3.要把一维数组 int a[n*n] 的元素传送到二维数组 int b[n][n] 中,即在程序中要执行b[i][j]=a[k];写出k->i,j的下标变换公式,并用程序验证之。

4.有以下函数void query(){ int *p;p=new int[3];//……delete []p;p=new double[5];//……delete []p;}出现了编译错误。

请分析错误的原因,并把上述程序补充完整,上机验证你的判断。

5.有以下程序根据输入值,调用函数create建立并初始化动态数组,令a[i]=i。

该程序运行后,主函数不能返回期望值。

请分析程序的错误原因并修改之。

#include <iostream.h>void create(int *, int);void main(){ int *a, len;cin>>len;create(a,len);for( int i = 0; i<len; i++ ) cout << a[i] << " ";cout << endl;delete []a;}void create(int *ap, int n){ ap=new int[n];for(int i=0; i<n; i++) ap[i]=i;}1.数组说明语句要向编译器提供什么信息?请写出一维数组、二维数组说明语句的形式。

【答案】数组说明语句要向编译器提供数组名(标识符),数组元素的类型、数组长度(元素的个数)等信息。

一维数组说明语句为:类型数组名[表达式]二维数组说明语句为:类型数组名[表达式1] [表达式2]2.数组名、数组元素的区别是什么?归纳一维数组元素地址、元素值不同的表示形式。

若有说明int aa [3], *pa=aa;请使用aa或pa,写出3个以上与aa[2] 等价的表达式。

【答案】数组名是一个标识符,执行代码中代表数组的地址,即指向数组起始位置的指针;而数组元素是下标变量,性质相当于普通变量。

对一维数组aa第i个元素的地址可以表示为: &aa[i] aa+i;对一维数组aa第i个元素的值可以表示为:a[i] *(a+i);与aa[2]等价的表达式:*(aa+2) *(&a[2]) *(pa+2) pa[2]3.要把一维数组 int a[m*n] 的元素传送到二维数组 int b[m][n] 中,即在程序中要执行b[i][j]=a[k];请写出k→i,j的下标变换公式,并用程序验证。

【答案】转换公式 i=k/n j=k%n验证程序:#include <iostream>using namespace std;int main(){ const int M=3,N=4;int k,a[M*N]={1,2,3,4,5,6,7,8,9,10,11,12},b[M][N];int i,j;cout<<"array a:"<<endl;for(k=0;k<M*N;k++)b[k/N][k%N]=a[k];for(k=0;k<M*N;k++) cout<<a[k]<<'\t';cout<<endl;cout<<"**After convert**"<<endl;cout<<"array b:"<<endl;for(i=0;i<M;i++){ for(j=0;j<N;j++) cout<<b[i][j]<<'\t';cout<<endl;}}4.有以下函数void query(){ int *p;p=new int[3];//……delete []p;p=new double[5];//……delete []p;}出现了编译错误。

相关主题