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

程序设计基础课后答案第四章

程序设计基础课后答案第四章
程序设计基础课后答案第四章

4.1 阅读下列程序,写出执行结果

1.#include

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

void main()

{ int a[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;

int *p = a , sum = 0 ;

for( ; p

if( *p % 2 == 0 ) sum += *p ;

cout << "sum = " << sum << endl ;

}

3.const int n = 5 ;

#include

#include

void main()

{ int a[n][n]={ 0 }, i, j, k ;

for( k=1 , i=0 ; i

for( j=i; j>= 0; j-- , k++ )

a[j][i - j ] = k ;

for( i=0 ; i

{ for( j=0; j

cout << setw( 3 ) << a[i][j] ;

cout << endl ;

}

}

4.int f(int [],int);

#include

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

if( a[i]>0 ) t *= a[i] ;

return t;

}

5.int f( int [][3], int, int ) ;

#include

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

for( j=0; j

{ a[i][j] ++ ;

if( i == j ) t *= a[i][j] ;

}

return t ;

}

6.#include

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

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

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

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

#include

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

void create(int *, int);

void main()

{ int *a, len;

cin>>len;

create(a,len);

for( int i = 0; i

cout << endl;

delete []a;

}

void create(int *ap, int n)

{ ap=new int[n];

for(int i=0; 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

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:"<

for(k=0;k

b[k/N][k%N]=a[k];

for(k=0;k

cout<

cout<<"**After convert**"<

cout<<"array b:"<

for(i=0;i

{ for(j=0;j

cout<

}

}

4.有以下函数

void query()

{ int *p;

p=new int[3];

//……

delete []p;

p=new double[5];

//……

delete []p;

}

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

【答案】

在语句p=new double[5]; 中企图把动态浮点型数组的地址写入整型指针p,造成错误。错误为error C2440: “=”: 无法从“double *”转换为“int *”。

改正方法:增加一个double*q指针。

void query()

{ int *p;

p=new int[3];

delete [] p;

//……

double *q;

q=new double[5];

//……

delete []q;

}

5.有以下程序根据输入值,设计功能是调用函数create建立并初始化动态数组,令a[i]=i。但该程序运行后不能得到期望结果,请分析程序的错误原因并修改之。

#include

using namespace std;

void create(int *, int);

int main()

{ int *a = NULL, len;

cin>>len;

create(a,len);

for( int i = 0; i< len; i++ ) cout << a[i] << " ";

cout << endl;

delete []a;

a = NULL ;

}

void create(int *ap, int n)

{ ap=new int[n];

for(int i=0; i

}

【答案】

函数create中,指针参数int*ap是地址值的参数。调用函数时接受实际参数a的地址值作为初制值。ap仅是局部变量,ap=new int[n]获得新的地址值,函数执行完毕返回,ap被释放,完全与实际参数ap无关。程序没有编译错误,但main不能获得动态数组。修改方法是把ap改为指针引用参数。

void create(int *&,int); //函数原型声明,使用引用参数

void create(int *&ap,int n) //函数定义

{ ap=new int[n];

for(int i=0;i

}

4.3 编程题

1.已知求成绩的平均值和均方差公式: ,,其中n为学生人数,为第i个学生成绩。求某班学生的平均成绩和均方差。

答案 4.3-1

#include

#include

void main()

{ double s[] = { 76, 85, 54, 77, 93, 83, 90, 67, 81, 65 };

double sum1=0,sum2=0,ave,dev;

int n, i;

n = sizeof( s )/sizeof( double ); //求数组元素的个数

for( i=0; i

sum1 += s[i];

ave = sum1/n;

for( i=0; i

sum2 += pow( s[i]-ave, 2 );

dev = sqrt( sum2/n );

cout << "rve=" << ave << '\t' << "dev=" << dev << endl;

}

第四章 练习题及参考答案

第四章 静态场的解 练习题 1、设点电荷q 位于金属直角劈上方,其坐标如右图所示,求 (1) 画出镜像电荷所在的位置 (2) 直角劈内任意一点),,(z y x 处的电位表达式 (3) 解:(1)镜像电荷所在的位置如图1所示。 (2)如图2所示任一点),,(z y x 处的电位为 ??? ? ??-+-= 4321011114r r r r q πεφ 其中, ()()()()()()()()2 22422 232 2222 22121212121z y x r z y x r z y x r z y x r +-++= ++++=+++-=+-+-= 2、 两个点电荷Q +和Q -位于半径为a 的接地导体球的直径延长线上,距球心均为 d 。证明镜像电荷构成一位于球心的电偶极子,且偶极矩大小为232d Q a 。 证明:由点电荷的球面镜像法知,+Q 和-Q 的镜像电荷Q Q ''',分别位于球内+Q 和- Q 连线上大小分别为Q D a μ,且分别距球心为D a 2(分别位于球心两侧)。可见Q Q ''',构 成电偶极子,由电偶极距的定义式得偶极距的大小为: 图1 图2 q - q +q -

2 322D Q a D a Q D a ql p =?==。结论得证。 3、已知一个半径为a 的接地导体球,球外一个点电荷q 位于距球心O 为d 处。利用镜像法求球外空间任意点的电位分布。 解:由点电荷的球面镜像法可知,q 的像电荷q '必定位于球内,且在q 与球心0连线上,位置在距离球心设为f 处。建立直角坐标系,由边界条件(?球)=0可取球面上两个特殊点B A ,讨论。B A ,是q 与球心0连线所对应的直径与球面的两个交点。由图示及点电荷的电位公式得: 0)(4)(4)(00=+' ++= f a q a d q A πεπε?, 0) (4)(4)(00=-' +-= f a q a d q B πεπε?。 解此方程组得:d a f q d a q 2 ,=-='。 所以任意场点),(y x P 处的电位为: r q r q ' '+ = 0044πεπε?。 其中r r ',分别是点电荷q 和q ' 到场点P 的距离。 值分别为21 2221 22])[(,])[(y f x r y d x r +-='+-=。 4、半径为a 的不接地导体球附近距球心O 为d (?d a )处有一点电荷q ,用镜像法计算 球外任一点的电位。 解:由点电荷的球面镜像法可知,q 的像电荷除了有q '(即导体球接地时对应的结果, q d a q -=',其位置为d a f 2=),还在球心处有另外一个镜像电荷q '',以保证导体球面电 势不为零的边界条件成立,且可知q q '-=''。 所以任意场点P 处的电位为: r q r q r q ' '''+ ' '+ = 000444πεπεπε?

第四章课后习题答案

4-8 一个半径为r =1m ,转速为1500r/min 的飞轮,受到制动,均匀减速,经时间t =50s 后静止,求:(1)飞轮的角加速度和飞轮的角速度随时间的关系;(2)飞轮到静止这段时间内转过的转数;(3)t =25s 时飞轮边缘上一点的线速率和加速度的大小。 解 (1)由于均匀减速,所以角加速度不变为 2015000.5/6050r r s s s β-= =-? 由角速度和角加速度的关系得 25/0 t r s d dt ω ωβ=? ? 得 250.5(/)t r s ω=- (2) d d d d dt dt d d ωωθωω βθθ = == 25/r s d d θβθωω=? ? 解得 625r θ= 所以转数为625 (3)由于250.5(/)t r s ω=- 所以t=25s 时 12.5/25(/)r s rad s ωπ== 所以线速率为 25(/)v r m s ωπ== 角加速度大小不变 4-9 某电机的转速随时间的关系为ω=ω0(1-e -t/τ ),式中,ω0=s ,τ=,求:(1) t =时的转速;(2)角加速度随时间变化的规律;(3)启动6s 后转过的圈数。 解 (1)t=60s 代入得 39(1)(/)8.6/e rad s rad s ω-=-= (2)由d dt ω β= 得 2 4.5t e β- = (3)由6 d dt θθω=?? 33618e θ-=+ [/2][5.87]5n θπ===

4-10 一个圆盘绕穿过质心的轴转动,其角坐标随时间的关系为θ(t )=γt+βt 3 ,其初始转速为零,求其转速随时间变化的规律。 解 由d dt θ ω= 得 23t ωγβ=+ 由于初始时刻转速为零,γ=0 23t ωβ= 4-11 求半径为R ,高为h ,质量为m 的圆柱体绕其对称轴转动时的转动惯量。 解 建立柱坐标,取圆柱体上的一个体元,其对转轴的转动惯量为 2 222 m m dJ dV d d dz R h R h ρρρρθππ== 积分求得 23220001 2 R h m J d d dz mR R h πρρθπ= =??? 4-12一个半径为R ,密度为ρ的薄板圆盘上开了一个半径为R/2的圆孔,圆孔与盘边缘相切。求该圆盘对通过圆盘中心而与圆盘垂直的轴的转动惯量。 解:把圆孔补上,取圆盘上一面元dS ,到转轴的距离为r ,则其转动惯量为 22dJ r dS r rdrd ρρθ== 积分得绕轴转动惯量为 23410 1 2 R J r drd R π ρθπρ==? ? 圆孔部分的绕轴转动惯量可由平行轴定理得 4 422213()()()222232 R R R R J πρπρρπ=+= 总的转动惯量为 4 121332 R J J J πρ=-= 4-13电风扇在开启电源后,经过t 1时间达到额定转速ω,当关闭电源后,经过t 2时间后停止转动,已知风扇转子的转动惯量为J ,并假定摩擦力矩和电动机的电磁力矩均为常量,求电动机的电磁力矩。 解:由转动定理得

C++程序设计基础课后答案 第八章

8.1 阅读下列程序,写出执行结果 1.#include class Bclass { public: Bclass( int i, int j ) { x = i; y = j; } virtual int fun() { return 0 ; } protected: int x, y ; }; class Iclass:public Bclass { public : Iclass(int i, int j, int k):Bclass(i, j) { z = k; } int fun() { return ( x + y + z ) / 3; } private : int z ; }; void main() { Iclass obj( 2, 4, 10 ); Bclass p1 = obj; cout << p1.fun() << endl; Bclass & p2 = obj ; cout << p2.fun() << endl; cout << p2.Bclass :: fun() << endl; Bclass *p3 = &obj;

cout << p3 -> fun() << endl; } 2.#include class Base { public: virtual void getxy( int i,int j = 0 ) { x = i; y = j; } virtual void fun() = 0 ; protected: int x , y; }; class A: public Base { public: void fun() { cout<<"x = "<

文本预览
相关文档 最新文档