《C程序设计基础(第三版)周霭如_习题及其解答(第3版)》由会员分享,可在线阅读,更多相关《C程序设计基础(第三版)周霭如_习题及其解答(第3版)(140页珍藏版)》请在金锄头文库上搜索。
1、习题1及其解答1.1 选择题1 . 一个最简单的C +程序,可以只有一个( c ) 。( a )库函数 ( b )自定义函数 ( c ) m a i n 函数( d )空函数2 . 用C +语言编制的源程序要变为目标程序必须要经过( d ) 。( a )解释 ( b )汇编 编 辑 ( d )编译3 . C +程序中的简单语句必须以( b ) 结束。( a )冒号 ( b )分号 空 格 ( d ) 花括号4 . 有说明i n t a = 0 ; d o u b l e x= 5 . 1 6 ; 以下语句中,( c ) 属于编译错误。( a ) x= a / x; ( b ) x= x/ a
2、; ( c ) a = a % x; ( d )x= x* a ;5 .执行C +程序时出现的“ 溢出”错误属于( c ) 错误。( a )编译 ( b )连接 ( c )运行 ( d )逻辑6 . 下列选项中,全部都是C +关键字的选项为( c ) 。(a ) whi l e I F St a t i c(b ) b r e a k c ha r g o(c ) s i ze o f c a s e e xt e r n(d ) s wi t c h fl o a ti n t e g e r7 .按C +标识符的语法规定,合法的标识符是(a )。(a ) _a b c (b ) n e w
3、 (c ) it (d )a g e 8 . C +语句中,两个标识符之间(a )不熊作为C +的分隔符。( a )数字 (b ) ; (c ) : (d ) +9 .下列正确的八进制整型常量表示是(b )。(a ) Oa O (b ) 0 1 5 (c ) 0 8 0 (d )0 x1 01 0 .下列错误的十六进制整型常量表示是(c )0(a ) 0 x1 1 (b ) Oxa f (c ) Oxg (d ) Oxl f1 1 .在下列选项中, 全部都合法的浮点型数据的选项为(b )。(a ) - l e 3 . 5 1 5 . 2 e - 4 (b ) 1 2 . 3 4- l e +5
4、 0 . I E - 1 2(c ) 0 . 2 e - 2 - 1 2 3 4 5 . e - 5 (d ) 5 . 0 e (l +4 )0 . 1 8 e +21 2 .下列正确的字符常量为(d )o(a ) “ a ”(b ) n a m e (c ) a (d ) MO V1 3 .下列选项中,(d )不熊交换变量a和b的值。(a) t=b; b=a; a=t; (b) a=a+b; b=a-b; a=a-b;(c) t=a; a=b; b=t; (d) a=b; b=a;1 4 .关于下列语句叙述错误的是(a )oint i=1 0, *p=&i;(a) p的值为1 0 (b) p
5、指向整型变量i(c) *p表示变量i的值 (d) p的值是变量i的地址1 5 .有以下变量说明,下面不正确的赋值语句是(b )。int a=5, b=1 0, c; int *pl = &a, *p2 = &b;(a) *p2 = b ; (b) pl = a ;(c) p2 = pl ; (d) c = *pl *( *p2 );1 6 .有以下变量说明,下面正确的语句是(b )0int a=1 0, b; int &pa=a, &pb=b;(a) &pb = a; (b) pb = pa; (c) pb = &pa; (d)*pb = *pa;1 7 .执行下面语句序列后,a和b的值分别为
6、(b )oint a = 5 , b = 3 , t ;int &ra = a ;int &rb = b ;t = r a ; r a = r b ; r b = t ;(a ) 3 和3 (b ) 3 和 5 (c ) 5 和3 (d ) 5 和 51 8 .在下列运算符中,(d )优先级最高。(a ) = (b ) * = (c ) + (d ) *1 9 . 在下列运算符中,( d ) 优先级最低。(a ) ! (b ) & (c ) ! = (d ) ?:2 0 .设 i n t i = l , j=2;则表达式i +j 的值为(c )o(a ) 1 (b ) 2 (c ) 3 (d
7、) 42 1 .设 i n t i = l , j=2;则表达式+i +j 的值为(d )0(a ) 1 (b ) 2 (c ) 3 (d ) 42 2 .在下列表达式选项中,(c )是正确。(a ) + (a +) (b ) a +b (c ) a +b (d )a +b2 3 .已知 i n t i = 0 , j = l , k = 2 ; 则逻辑表达式 +i |j &+k 的值为(b )o(a ) 0 (b ) 1 (c ) 2 (d ) 32 4 .执行下列语句后,x的值是( d ) , y的值是( c )0i n t x, y ;x =y =l; + x | + y ;( a )不
8、确定(b ) 0(c ) 1(d ) 22 5. 设x为整型变量, 不能正确表达数学关系lV x 5的C +逻辑表 达 式 是 (a )。(a ) 1 x 5 (b ) x= = 2 |x= = 3 |x= = 4(c ) l x & x 5 (d ) ! (x = 5 )26.已 知i n t x = 5 ;执行下列语句后,x的值为(c )。X += X = X * X ;(a ) 2 5 (b ) 4 02 7 .设 i n t a = l , b = 2 , c = 3 ,(a ) ab?a:cd?c:(a ) 1 (b ) 22 8 .以下逗号表达式的值为( x = 4 * 5 , x
9、 * 5 ), x(a ) 2 5 (b ) 2 0(c ) - 4 0 (d ) 2 0d = 4 ;则以下条件表达式的值为d(c ) 3 (d ) 4d ) o+ 2 5(c ) 1 0 0 (d ) 4 51.2把下列数学表达式写成C+算术表达式1 .1 -1 + i1 + -x + y2. x x x (a x+b )+c +d +e3 . I n (1 +|1 0)a - b4 .1 + y cos 4 8 05 . c o t(1 x ) 6 . l g (a2+a b +b2)1 + X2【 解答】1 . 1 / (1 + 1 / (1 + 1 / (X + y)2 . x *
10、( x * ( x * ( a * x + b ) + c ) + d ) + e3 . l o g ( 1 + p o w( fa b s ( (a + b ) / ( a - b ) ), 1 0 )4 . s q r t ( 1 + 3 . 1 4 1 5 9 / 2 * c o s ( 4 8 * 3 . 1 4 1 5 9 / 1 8 0 )5 . l / t a n ( ( 1 - x* x )/ ( 1 + x* x)或者 c o s ( ( 1 - x* x )/ (1 + x* x ) )/ s i n ( ( 1 - x* x )/ (1+ x* x )6 . l o g
11、l O ( a*a + a*b + b*b)1 . 3 用逻辑表达式表示下列条件L i被 j 整除 2 . n 是小于正整数k的偶数3 . l Wx 1 0 4 . x, y 其中有一个小于z5 . y - 1 0 0 , - 1 0 , 并且 y 史 1 0 , 1 0 0 6 .坐标点(x, y ) 落在以(1 0 , 2 0 )为圆心,以 3 5 为半径的圆内7 .三条边a , b 和 c 构成三角形8 .年份Y e a r 能被4 整除,但不能被100整除或者能被400整除【 解 答 】1. i %j = = 0 2. (n k ) & (n %2 = = 0)3. l = x & x
12、 10 4. x z | | y = -100 & y = 10 & y = 100 )6. s q r t (p o w (x -10), 2) + p o w (y -20), 2) c & b +c a & c +a b8. (y e a r %4 = = 0) & (y e a r %100!= 0) | | (y e a r %400= 0)1.4阅读下列程序,写出执行结果1.#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n O i n t a = 1, b = 2;b o o l x , y ;c o u
13、 t (a +) + (+b ) e n d l ;c o u t a % b e n d l ;x = !a b ;y = a一 & b ;c o u t x e n d l ;c o u t y e n d l ;)【 解答】42012.#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n O i n t x , y , z , f ;x = y = z = 1;f = 一x | | y - & zc o u t x = xc o u t y = yc o u t z = X z e n d l ; e n d l
14、; e n d l ;c o u t f = * f e n d l ;【 解答】x = 0y = 0z = 2f = l3.t t i n c l u d e #i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n ( ) i n t a = 123;i n t &r a = a ;i n t *p a = &a ;c o u t s e t w (5) d e c a s e t w (5) o c t r a s e t w (5) h e x *p a e n d l ;)【 解答】123 173 7b1. 5思考
15、题1 .什么叫数据类型?变量的类型定义有什么作用?【 解答】数 据 “ 类型”是对数据的抽象。类型相同的数据有相同的表示形式、存储格式以及相关的操作。定义一个变量时,计算机根据变量的类型分配存储空间,并以该类型解释存放的数据。2 .普通数据类型变量和指针类型变量的定义、存储、使用方式上有何区别?请编写一个程序验证之。【 解答】验证程序:变量类型定义存储使用方式数据类 型 标 识符数据值通过名访问即直接访问对变量内容操作指针类 型 * 标识符地址值通过指针变量的地址值间址访问对象#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a
16、 i n () i n t a , b , c ;c o u t , ,a , b , c =cinabc; 对普通数据类型变量赋值i n t *p a = &a , *p b = &b , *p c = &c ; 用变量地址值初始化指针变量c o u t , ,a , b , c = “ X b X , c e n d l ; 名访问,输出a ,b ,c的值c o u t , ,p a , p b , p c = X p a , , p c e n d l ;输出指针变量的地址值间址访问,输出p a , p b , p c指向的变量的赋值c o u t , ,*p a , *p b , *p
17、 c = *p a ” , /,* pb, /,z , * p c e n d l ;)3 .什么叫数据对象的引用?对象的引用和对象的指针有什么区另W请用一个验证程序说明之。【 解答】引用是为数据对象定义别名。引用与指针有以下几点区别:( 1 )引用名不是内存变量,而指针变量要开辟内存空间。( 2 )引用名需要在变量定义与变量名绑定,并且不能重定义;指针变量可以在程序中赋给不同的地址值,改变指向。(3)程序中用变量名和引用名访问对象的形式和效果一样;指针变量通过间址访问对象。验证程序:#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t
18、 m a i n () i n t a ;c o u t a = ;c i n a ;i n t r a = a ;i n t *p a = &a ;c o u t a 的 值 :z , a e n d l ;c o u t a 的地址:“ X &a e n d l ;c o u t r a 的值:z , r a e n d l ;c o u t r a 的地址:, z &r a e n d l ;c o u t , ?p a所指向的变量的值:” X *p a e n d l ;c o u t p a 的地址:, , p a e n d l ;)4 . 数据对象在C+中有什么不同的访问方式?请
19、编写一个程序验证之。【 解答】数据对象在C+中的访问方式有:名访问,引用(别名)访问,间址访问。验证程序:#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n () i n t a ;c o u t a & a x (2) (a +b ) != x (3) a | | (b +x )(4) a = = (b *x ) (5) a -b x (6) (a /x = = b )7 .阅读以下程序,分析下面语句序列中每一个字符“ *”和的意义,写出输出结果。#i n cl ude usi n g n a m e spa ce
20、std;i n t m a i n () i n t a =10, b =20;i n t *p = &a , *q = &b ;*p = *p * *q;i n t & ra = a ;ra =a ;i n t * & rt = q;*rt = 30;c o u t , /a =, /a, , n b =, ,b, , n *p=, ,* p , , n *q= , ,*q, , n ra = ,r a/ , n *rt=, , *rt e n dl ;【 解答】字 符 和 的 意 义 见 程 序 中 添 加 的 注 释 。tti n cl ude usi n g n a m e spa c
21、e std;i n t m a i n () i n t a =10, b =20;i n t *p = &a , *q = &b ; / 是指针类型说明符,是取址运算符*p = *p * *q; 第1、2、4个 *”是间址访问符,第3个 算 术 乘 运 算 符i n t & ra = a ; / 是引用说明符ra=a;i n t * & rt = q;/ “ *”是指针类型说明符,是引用说明符*rt = 30; / “ *”是间址访问符输出语句中的“ *”是间址访问符co ut a =a n b = b X n *p= *pX n *q=*q “ n ra =X ra n *rt=X *rt
22、X e n dl ;)程序输出结果为:a =200b =30*p=200*q=30ra =200*rt=301 . 6 编程题1 .输入一个三位整数,将它反向输出。【 解答】#i n cl ude usi n g n a m e spa ce std;i n t m a i n () i n t x , i , j , k ;co ut ” pl e a se i n put x :;ci n x ;i = x /100;j = x /10 %10;k = x %10;co ut k j i e n dl ;)2.输入平面上某点横坐标x 和纵坐标y , 若该点在由图3.1表示的方块区域内,则输
23、出1 ; 否则,输出0。图 1.11正方形【 解答】#i n cl ude usi n g n a m e spa ce std;i n t m a i n () do ub l e x , y , b;co ut ” pl e a se i n put x ,y :;ci n x y ;b = ( -2=x ) & ( x =2 ) & ( -2=y ) & ( y =2 );co ut b e n dl ;)3.输入三个整数,求出其中最小数(要求使用条件表达式)。【 解答】 i n cl ude usi n g n a m e spa ce std;i n t m a i n () i n
24、 t a , b , c, te m p, m i n ;co ut ” pl e a se i n put a , b , c:” ;ci n a b c;te m p = ( a b ) ? a :b ;m i n = ( te m p = 0 )i f ( x = 0 ) y = 0 ;;在下列选项使i的值变成1的语句(b ) i f ( x =y ) i + ;(d) i f ( !x ) i + ;二 : ,下面选项中能正确表示上x0(b ) y = -1 ;i f ( x != 0 )i f ( x 0 ) y =1 ;e l se y = -1;(c) i f ( x = 0 )
25、i f ( x 0 ) y = -1 ;(d) ye l se y = 0;-1 ;i f ( x = 0 )e l se y = 0 ;i f ( x 0 ) y =-1 ;e l se y = 1 ;e l se y =1 ;3 .假设i =2,执行下列语句后i的值为(b )0sw i tch ( i ) ca se 1 : i + ;ca se 2 : i 一 ;ca se 3 : + i ; b re a k ;ca se 4 : i ;de f a ul t : i + ;)(a ) 1 (b ) 2 (c) 3 (d) 44 .已 知i n t i =0, x =0;下 面w h
26、i l e语句执行时循环次数为( d )。w h i l e ( !x & i 3 ) x + ; i + ; (a ) 4 (b ) 3 (c) 2 (d) 15 .已知i n t i =3;下面do _w h i l e语句执行时循环次数为(b )0do i一; co ut i e n dl ; w h i l e ( i != 1 );(a ) 1 (b ) 2 (c) 3 (d)无限6 . 下面for语句执行时循环次数为(b )0int i;for ( i=0, j=5;i=j;) cout i j endl;i+; j ;)(a) 0 (b) 5 (c) 1 0 (d)无限7 . 以
27、下死循环的程序段是(b )0(a) int x; for( int x=0 ; x=0 );(c) int a=5 ; while( a ) a一 ; ;(d) int i=3 ; for( ; i ; i 一 );2. 2 阅读下列程序,写出执行结果1 .#includeusing namespace std;int main 0 int a, b, c, d, x;a = c = 0 ; b = l ; d = 20;i f ( a ) d = d-10;e l se i f ( !b )i f ( J c )x = 15;e l se x = 25;co ut d e n dl ;【 解
28、答】202.#i n cl ude usi n g n a m e spa ce std;i n t m a i n () i n t a = 0, b = 1;sw i tch ( a ) ca se 0: sw i tch ( b ) ca se 0 : c o u t , ,a =, ,a, /b=z , b e n d l ; b re a k ;ca se 1 : co ut a =X a ”b =b e n dl ; b re a k ;ca se 1: a +; b +; co ut a =X a b= , , b e n d l ;)【 解答】a = 0 b = 1a = 1
29、b = 23.#i n cl ude usi n g n a m e spa ce std;i n t m a i n O i n t i = 1;w h i l e ( i =10 )i f ( +i % 3 != 1 )co n ti n ue ;e l se co ut i e n dl ;)【 解答】47104.tti n cl ude usi n g n a m e spa ce std;i n t m a i n () i n t i = 0 , j = 5;do i +; j ;i f ( i 3 ) b re a k ; w h i l e ( j 0 );co ut i =
30、i t* j = j e n dl ;)【 解答】i = 4 j = 15.#i n cl ude usi n g n a m e spa ce std;i n t m a i n () i n t i , j ;f o r( i =l , j =5; i j ; i + ) j ; c o u t i ,V j e n dl ;)【 解答】3 36.#i n cl ude usi n g n a m e spa ce std;i n t m a i n O i n t i , s = 0;f o r( i =0;sw i tch ( ca seca seca sei 5; i +i )0:
31、s +=1: s +=2: s +=)i ; b re a ki ; b re a ki ; b re a kde f a ul t: s += 2;c o u t , ,s=, , s e n d l ;【 解答】s= 77 .#i n cl ude usi n g n a m e spa ce std;i n t m a i n () i n t i , j , x = 0;f o r( i =0; i =3; i + ) x +;f o r( j =0; j = 9 0 , B- ( 9 0 , 8 0 , C - ( 8 0 , 7 0 , D - ( 7 0 , 6 0 , , E
32、- 6 0#i n c l u deu si n g n am esp ac e st d;i n t m ai n ( ) c h ar g d;c o u t , ,E n t er t h e g r ade: *;c i n g d;直到输入有效等级,否则程序不继续运行w h i l e( ! ( ( g d=,A* & g d=,a &g d=90, B-(90, 80 ,C-(80, 70 , D-(70, 60, E-60#includeu si n g n am esp ac e st d;i n t m ai n ( ) c h ar g d;c o u t , ,E n t
33、 er t h e g r ade: ;c i n g d;直到输入有效等级,否则程序不继续运行w h i l e( ! ( ( g d= A & g d= a &g dg d;)sw i t c h ( g d) c ase A:c ase , a : c o u t , ,n Sc o r ed 9 0 - 1 0 0 !n ” ; br eak ;c ase B:c ase b : c o u t , ,n Sc o r ed 8 0 - 8 9 ! n ” ; br eak ;c ase C :c ase , c : c o u t , ,n Sc o r ed 7 0 - 7 9 !
34、n, ,; br eak ;c ase D c ase d : c o u t “ n Sc o r ed 6 0 - 6 9 !n ” ; br eak ;c ase E :c ase e : c o u t , zn Sc o r e u n der 6 0 !n ” ; br eak ;defau l t : c o u t , ,Un ex p ec t er r o r !n ” ; 防止意外错误)2.什么叫循环控制?归纳比较C +中各种循环控制语句的语法、循环条件和循环结束条件的表示形式及执行流程。【 解答】循环控制是在特定的条件下,程序重复执行一些特定动作。语句语法执行流程使用场
35、合w h i l e语句w h i l e ( 表达式)循环体;循环条件:表达式值为 非 0 ( 真)循环结束条件:表达false达 年 一 I1 true循环体程 序 中 常 用于 根 据 条 件 执 行操 作 而 不 需 关 心循环次数的情况。先 判 断 形 式循环,条件不成立!while语句的执行流程式值为0 ( 假)时不进入循环体。do - w hi l e语句do循环体w h i l e( 表达式) ;循环条件:表达式值为非0 ( 真)循环结束条件:表达式值为0 ( 假)循环体| falsedo_whil e语句执行流程程序中常用于根据条件执行操作而不需关心循环次数。后判断形式循环,
36、至少执行1次循环体。一 般 情 况 ,w h i l e语 句 和 dow h i l e语句可以互换使用。fo r语句fo r ( 表 达 式 1 ; 表达式2 ; 表达式3 )循环体;( 1 ) 表达式1 称为初始化表达式,不是循for!表达式l1 true循环体表达式s1语句的执行流矛falsefo r 语句称为步长循环语句,通常用于确定循环次数的情况。由于语句的3个表达式均可以环体执行部分。( 2 )表达式3 称为后置表达式,作为循环体的最后一个执行表达式。( 3 )循环条件:表达式 2 值为非0 ( 真)循环结束条件:表达式 2 值为0 ( 假)缺省,也可以用于条件循环,即循环次数不
37、确定的情况。3 .根据一个实际问题,用不同的循环语句编程,分析其优缺点。【 解答】略。4 .用 i f语句和g o t o 语句组织循环, 改写思考题的第3 小题编写的程序。分析在什么情况下可以适当使用g o t 。 语句。【 解答】在不破坏程序基本流程控制的情况下, 可以适当使用g o t o 语句实现从语句结构内部向外的必要跳转,即按特定条件结束结构语句块的执行。程序略。5 . 有以下程序#i n c l u deu si n g n am esp ac e st d;i n t m ai n ( ) c h ar c ;c i n c ;i f ( c = , | | c=- Y)i n
38、 t a= l ;el sei n t a= O ;c o u t , ,a=, , a en dl ;)编译错误为:er r o r C 2 0 6 5 : , a : u n dec l ar ed i den t i fi er , 指示变量a 没有定义。请分析原因,并做出修改。【 解答】变量a 的定义不应该放在i f - e l s e 语句体中。 说明语句和执行语句的执行时机不同。变量说明要求在编译时定义存储空间,而i f - e l s e是执行语句,程序运行后才执行。正确的程序是:# i n c l u d e u s i n g n a m e s p a c e s t d
39、;i n t m a i n ( ) c h a r c ;i n t a ;c i n c ;i f ( c = y | | c =, Y, )a =l ;e l s ea =O;c o u t a = a Xe n d l ;)6 . 有以下程序,希望判断两个输入的整数是否相等。程序通过编译,但不能达到预期结果。请分析程序能够通过C+ + 编译而不能得到期望结果的原因。# i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n O i n t a , b ;c o u t , za : c i n a ;c o u t
40、, ,b : c i n b ;i f ( a =b )c o u t a 等于“ b e n d l ;e l s ec o u t a 不等于 b e n d l ;)程序运行后,输入a的值为4 , b的值为9 , 显示结果如下:a : 4b : 99 等 于 9【 解答】在 i f 语句的判断表达式( a =b ) 中,赋值号“ =”应该是逻辑等。从语法上,C+ + 的 i f 语句把a =b 这个赋值表达式视为逻辑表达式,没有编译错误。a =b 的值决定于b 。若 b的输入值不等于0 , i f 作为逻辑真( t r u e ) ,否则作为逻辑假( f a l s e ) 。所以,题目
41、中输入b的值虽然不等于a , 但表达式a =b 为逻辑t r u e , 执行了i f 语句的第1 个分支。2. 4编程题1 . 输入某学生成绩,若成绩在85分以上输出“ very good,若成绩在60分到85分之间输出“ good” , 若成绩低于60分输出“ nogood” 。【 解答】#includeusing namespace std;int main () double score;cout / ,please input score:;cin score;if ( score=85 ) cout ” Very good!;else if ( score=60 ) cout Go
42、od!;else cout ” No good!” ;)2 . 输入三个整数,按从小到大的顺序输出它们的值。【 解答】#includeusing namespace std;i n t m a i n ( ) i n t a , b , c , t ;c o u t ” a , b , c = ;c i n a b c ;i f ( a b ) t =a ; a =b ; b =t ; i f ( a c ) t =a ; a =c ; c =t ; i f ( b c ) t =b ; b =c ; c =t ; c o u t a J t * b t c e n d l ;3 . 输入三角
43、形的三条边,判别它们能否形成三角形,若能,则判断是等边、等腰、还是一般三角形。【 解答】# i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n O d o u b l e a , b , c ;c o u t a , b , c = ;c i n a b c ;i f ( a + b c & & b + c a & & c + a b ) i f ( a = b & & b = c )c o u t 等边三角形! e n d l ;e l s e i f ( a = b | a = c | b = c )c o u t
44、等腰三角形! e n d l ;e l s e c o u t ” 一般三角形! e n d l ;e l s ec o u t 不能形成三角形! e n d l ;4.输入百分制成绩,并把它转换成五级分制,转换公式为:grade ( 级别) =A ( 优秀)B ( 良好)C ( 中等)D ( 合格)E ( 不合格)90-10080-8970-7960-690-59【 解答】# i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n ( ) d o u b l e s c o r e ; c h a r g r a d e
45、;c o u t ” s c o r e = ;c i n s c o r e ;i f ( s c o r e = 0 & & s c o r e = 1 0 0 ) s wi t c h ( i n t ( s c o r e ) / 1 0 ) c a s e1 0 :c a s e9 : g r a d e = a ; b r e a k ;c a s e8 : g r a d e = b ; b r e a k ;c a s e7 : g r a d e = c ; b r e a k ;c a s e6 : g r a d e = d ; b r e a k ;c a s e5 :
46、c a s e4 :c a s e3 :c a s e2 :c a s e1 :c a s e0 : g r a d e = e ; b r e a k ;)e l s e c o u t 数据输入错误! e n d l ;g o t o e n d ;c o u t g r a d e e n d l ;e n d :分号不能省5.编程序模拟剪刀、石头和纸游戏。游戏规则为:剪刀剪纸,石头砸剪刀,纸包石头。玩游戏者从键盘上输入s ( 表示剪刀)或r( 表示石头)或P ( 表示纸) ,要求两个游戏者交替输入,计算机给出输赢的信息。【 解答】# i n c l u d e u s i n g n
47、a m e s p a c e s t d ;i n t m a i n O c h a r f i r s t , s e c o n d ;c o u t ” Fi r s t i n p u t ( s , r o r p )c i n f i r s t ;c o u t ” Se c o n d i n p u t ( s , r o r p )c i n s e c o n d ;s wi t c h ( f i r s t ) c a s e s :switch ( second ) case s, : cout ”Scissor ties scissor. ” endl; go
48、to end;case r: cout ”Scissor is crushed byrock. endl; goto end;case p : cout ”Scissor cuts paper. ” endl; goto end;default : cout second input error!, z endl ; goto end;)case r :switch ( second ) case s: cout Rock crushes scissor. endl; goto end;case r : cout ”Rock ties rock. endl;goto end;case p :
49、cout ”Rock is wrapped by paper.” endl; goto end;default : cout ”second input error!endl; goto end;)case p:switch ( second ) case s : cout ” Paper is cut by scissor.” endl; goto end;case r : cout ” Paper wraps the rock. ” endl; goto end;case p : cout ” Paper ties paper. endl;goto end;default : cout ”
50、 second input error! endl; goto end;)default : cout ” First input error! endl; gotoend;)e n d : ;6. 输入一个整数, 输出该整数的所有素数因子。 例如, 输入1 20,输出为2、2、2、3 和 5。【 解答】#includeusing namespace std;int main() int m , i = 2;cout ”please input m:;cin m;while( i=m )if( m % i = 0 ) cout i ;m = m / i ;)else i+;)7. 使用迭代公式
51、加= (x. +a/xn)/2 (n = 0,1,2,/ =。 / 2) 编程序求某一正整数 a 的平方根。【 解答】#include#includeusing namespace std;int main() const double eps = le-8;double a, xO, x;cout , ,please input a:;cin a;xO = a / 2;x = ( xO + a/xO )/2;while( fabs( x-xO )eps ) xO = x; x =( xO + a/xO )/2;)cout x endl;)8. 已知 X=0。 , 1 0 , 20 , 1 8
52、0,求 sinx, cosx和 tanx 的值。【 解答】#include#include#includeusing namespace std;int main ( ) const double pi = 3.1 41 59265;int i;double x, yl, y2, y3;cout setw(2) x setw(1 5) “ sin(x)” setw(1 5) “ cos(x) setw(1 5) “ tg(x) endl;for( i=0; i=1 8; i+ ) x = i*1 0*pi/1 80;yl = sin( x );y2 = cos(x);y3 = yl/y2;co
53、ut setw(2) i setw(1 5) yl setw(1 5) y2 setw(1 5) y3 endl;9. 在 1 00到 200中找出同时满足用3 除余2 , 用 5 除余3 和用7除余2的所有整数。【 解答】# in c l u d e u sin g n a m e sp a c e st d ;in t m a in ( ) in t i;f o r( iOO; i=2 00; i+ + ) if ( ( i % 3 = 2 ) & & ( i % 5 = 3 ) & & ( i % 7= = 2 ) )c o u t i e n d l ;)1 0.求1 00到999中的
54、水仙花数。所谓水仙花数是指一个三位数,它的每位数字的立方之和等于该数。例如,因为1 53=1 3+ 5, + 33,所以1 53为水仙花数。【 解答】# in c l u d e u sin g n a m e sp a c e st d ;in t m a in ( ) in t i, a , b , c ;f o r( i=1 00; i=999; i+ + ) a = i/ 1 00;b = ( i- a * 1 00 ) / 1 0;c = i - a * 1 00 - b * 1 0;if ( i = a * a * a + b * b * b + c * c * c ) c o u
55、 t i e n d l ;)1 1. 求1 000之内的所有完数。所谓完数是指一个数恰好等于它的所有因子之和。例如,因为6=1 + 2 + 3,所以6为完数。【 解答】# in c l u d e u sin g n a m e sp a c e st d ;in t m a in O in t i, j, s;f o r( i=l ; i=1 000; i+ + )s = 0;f o r( j=l ; ji; j+ + )if ( i % j = 0 ) s = s + j;if ( i = s ) c o u t i e n d l ;)1 2 . 编一程序显示由符号组成的三角形图案。例
56、如,程序运行后,屏幕显示: Ho w m a n y l in e s ?用户输入:5屏幕显示:W h a t c h a ra c t e r ?用户输入:*则输出如下图案。【 解答】# in c l u d e u sin g n a m e sp a c e st d ;in t m a in ( ) in t i, j, k, n ;c h a r c h ;c o u t / ,Ho w m a n y l in e s ? n ;c in n ;c o u t / ,W h a t c h a ra c t e r ? n ;c in c h ;f o r( i=l ; i=n ;
57、 i+ + ) f o r( k=l ; k=n - i; k+ + ) c o u t ”f o r( j=l ; j=2 * i- l ; j+ + ) c o u t c h ;c o u t e n d l ;)1 3. 已知X Y Z + Y Z Z =532 ,其中X , Y和Z为数字,编一程序求出X ,Y和Z的值。【 解答】# in c l u d e u sin g n a m e sp a c e st d ;in t m a in O in t x , y , z , i;f o r( x =l ; x =9; x + + )f o r( y =l ; y =9; y +
58、+ )f o r( z =0; z =9; z + + ) i = 1 00* x + 1 0* y + z + 1 00* y + 1 0* z + z ;if ( i = 532 )c o u t x = X x X t y = y X t z =, z z e n d l ;习题3 及其解答3 . 1 选择题1 .以下正确的函数原型为( d ) 。( a ) f l ( in t x ; in t y ) ; ( b ) v o id f l ( x , y ) ;( c ) v o id f l ( in t x , y ) ; ( d ) v o id f l ( in t ,in
59、t ) ;2 .有函数原型v o id f u n 2 ( in t ) ; 下面选项中,不正确的调用是 (C ) O( a ) in t a = 2 1 ; f u n 2 ( a ) ; ( b ) in tf u n 2 ( a * 3 ) ;a1 5;( c ) in t b = 1 00; f u n 2 ( & b ) ; ( d ) f u n 2 ( 2 56 ) ;3 . 有函数原型v o id f u n 3( in t * ) ; 下面选项中,正确的调用是( C ) O( a ) d o u b l e x = 2 . 1 7; f u n 3( & x ) ; ( b
60、) in t a = 1 5 ;f u n 3( a * 3. 1 4 ) ;( c ) in t b = 1 00; f u n 3( & b ) ; ( d ) f u n 3 ( 2 56 ) ;4 . 有函数原型v o id f u n 4( in t & ) ; 下面选项中,正确的调用是 (c ) 。( a ) in t a = 2 . 1 7; f u n 4( & a ) ; ( b ) in t a = 1 5;f u n 4( a * 3. 1 4 ) ;( c ) in t b = 1 00; f u n 4( b ) ; ( d ) f u n 4( 2 56 ) ;5
61、. 有声明v o id f u n 5( in t * & ) ; in t a , * p = & a ;下面选项中,正确的调用是( b )0( a ) f u n 5 ( & a ) ; ( b ) f u n 5( p ) ; ( c ) f u n 5( * a ) ;( d ) f u n 5( * p ) ;6 . 有声明in t f u n 6( in t ) , ( * p f ) ( in t ) = f u n 6;下面选项中,正确的调用是( C ) o( a ) in t a =1 5; in t n =f u n 6( & a ) ; ( b ) in t a = 1
62、5;c o u t ( & p f ) ( a ) ;( c ) c o u t ( * p f ) ( 2 56 ) ; ( d ) c o u t * p f ( 2 56 ) :7 . 在V C中, 若定义一个函数的返回类型为v o id , 以下叙述正确的是 (C ) 0( a )函数返回值需要强类型转换 ( b )函数不执行任何操作( c )函数本身没有返回值 ( d )函数不能修改实际参数的值8 .函数参数的默认值不允许为( c )0( a )全局常量 ( b )直接常量 ( c )局部变量 ( d )函数调用9 . 使用重载函数编程序的目的是( a ) 。( a )使用相同的函数
63、名调用功能相似的函数 ( b ) 共享程序代码( c )提高程序的运行速度( d )节省存贮空间1 0 .下列的描述中( b ) 是错误的。( a ) 使用全局变量可以从被调用函数中获取多个操作结果( b ) 局部变量可以初始化, 若不初始化, 则系统默认它的值为0( c ) 当函数调用完后,静态局部变量的值不会消失( d) 全局变量若不初始化,则系统默认它的值为01 1 .下列选项中,( c ) 的具有文件作用域。( a ) 语句标号 ( b ) 局部变量 ( c ) 全局变量( d) 静态变量3.2阅读下列程序,写出执行结果1 .# inc ludeusing na mespa c e s
64、td;# inc ludeint f ( int ) ;int ma inO int i;for( i = 0 ; i 3 ; i + + )c out f( i ) endl;int f ( int a ) int b = 0 , c = 1 ;b + + ; c + + ;return int( a + pow( doub le ( b ) , 2 ) + c ) ;【 解答】3452 .# inc ludeusing na mespa c e std;void func ( int a , int b , int c = 3 , int d = 4 ) ;int ma inO func
65、( 1 0 , 1 5 , 2 0 , 3 0 ) ;func ( 1 0 , 1 1 , 1 2 ) ;func ( 1 2 , 1 2 ) ;void func ( int a , int b , int c , int d ) c out a t b t c t d endl;【 解 答 】1 01 52 03 01 01 11 241 21 2343 .# inc ludeusing na mespa c e std;void func ( int, int, int * ) ;int ma inO int x , y, z ;func ( 5 , 6 , &x ) ;func ( 7
66、 , x , &y ) ;func ( x , y, &z ) ;c out * 、 y , z endl;)void func ( int a , int b , int * c ) b + = a ; * c = b - a ;【 解 答 】6 , 6 , 64.# inc ludeusing na mespa c e std;void func ( int, int, int & ) ;int ma inO int x = 0 , y= l , z = 2 ;func ( 1 , 2 , x ) ;func ( x + y , y , y ) ;func ( z , x + y , z
67、) ;c out x ” , y , ” z endlvoid func ( int a , int b , int &c ) b + = a ; c = b - a ;【 解 答 】2 , 1 , 3#includeusing namespace std;void func( int *, int *, int *& );int main() int a=1 0, b=20;int *p=&a, *q=&b;func ( p, q, p );cout *p= *p , *q= *q endl;)void func( int *tl , int *t2 , int *& rt ) *tl +=
68、 5 ; *t2 += 5 ;rt = tl ;*rt += 5 ;cout *tl ” , *t2= *t2 ,*rt= *rt endl;)【 解答】*tl=20, *t2=25, *rt=20* p= 2 0 , * q= 2 56 .# inc ludeusing na mespa c e std;int f2 ( int, int ) ;int fl( int a , int b ) int c ;a + = a ; b + = b ;c = f2 ( a + b , b + 1 ) ;return c ;)int f2 ( int a , int b ) int c ;c = b
69、% 2 ;return a + c ;)int ma in ( ) int a = 3 , b = 4;c out fl( a , b ) endl;【 解答】1 57 .# inc ludeusing na mespa c e std;int a ge( int n ) int f;if( n = = 1 ) f = 1 0 ;else f = a ge( n- l ) + 2 ;return f ;int ma in ( ) c out a ge : a ge( 5 ) endl;)【 解答】a ge:1 8# inc ludeusing na mespa c e std;int fl (
70、 int a , int b ) return a + b ; int f2 ( int a , int b ) return a - b ; int f3 ( int ( * t ) ( int, int ) , int a , int b ) return(* t ) ( a , b ) ; )int ma inO int ( * p ) ( int, int ) ;P = fl ;c out f3 ( p, 4, 8 ) endl;P = f2 ;c out f3 ( p, 8 , 4 ) endl;【 解答】1 249.# inc ludeusing na mespa c e std;
71、int sub ( int, int ) ;int a = 1 ;int ma in ( ) int m = 1 , n = 2 ,f = sub ( m, n ) ;c out a * t*f = sub ( m, n ) ;c out a * tfint sub ( int c , int sta tic int m = 2 ,c out m * tsf ; f endl; f endl;d )n = 5 ; n t endl;a = + + a ; c = m + + ; d = n + + ;return c + d ;)【 解答】2 52 73 6393 . 3思考题1 .函数的作用
72、是什么?如何定义函数?什么叫函数原型?【 解答】函数的两个重要作用:( 1 )任务划分,把一个复杂任务划分为若干小任务,便于分工处理和验证程序正确性;( 2 )软件重用,把一些功能相同或相近的程序段,独立编写成函数,让应用程序随时调用,而不需要编写雷同的代码。函数的定义形式:类 型 函 数 名 (形式参数表)语句序列)函数原型是函数声明,告诉编译器函数的接口信息:函数名、返回数据类型、接收的参数个数、参数类型和参数顺序,编译器根据函数原型检查函数调用的正确性。2 .什么叫函数值的返回类型?什么叫函数的类型?如何通过指向函数的指针调用一个已经定义的函数?请写一个验证程序说明。【 解答】( 1)函
73、数的返回类型是函数返回的表达式的值得类型;( 2 )函数类型是指函数的接口, 包括函数的参数定义和返回类型;( 3 )若有functionType functionName; functionType 是已经定义的函数类型functionType *functionPointer=functionName; / / 定义函数指针并获取函数地址则可以通过函数指针调用函数:(*f unc t i onPo inter)(argumentList);或 functionPointer (argumentList);其中argumentList是实际参数表。验证程序:#includeusing nam
74、espace std;int main() typedef int myfunc(int, int);myf unc f, *fp;int a=1 0, b=6;fp= f;c out, ,Using f ( a ) : * f ( a , b ) endl; 函数名调用函数c out, ,Using fp ( a ) : z , fp( a , b ) endl; 函数指针调用函数c out, ,Using ( * fp) ( a ) :, , ( * fp) ( a , b ) endl; / / 函数指针调用函数return 0 ;)int f ( int i, int j) retur
75、n i* j;)3.什么叫形式参数?什么叫实际参数? C + + 函数参数有什么不同的传递方式?请写一个验证程序说明。【 解答】参数是调用函数与被调用函数之间交换数据的通道。函数定义首部的参数称为形式参数,调用函数时使用的参数称为实际参数。C + + 有三种参数传递机制: 值传递(值调用) ; 指针传递(地址调用) ;引用传递(引用调用) 。验证程序:#i n c l u d e i o s t r e a m u s i n g n a m e s p a c e s t d ;v o i d f u n c A (i n t i ) i =i +10; v o i d f u n c B(
76、i n t *j ) *j =*j +20; v o i d f u n c C (i n t &k ) k =k +30; i n t m a i n () i n t a =l ;f u n c A (a ) ; c o u t , ,a =/ , a e n d l ;f u n c B (&a ) ; c o u t z ,a =, ,a e n d l ;f u n c C (a ) ;c o u t a = a e n d l ;)程序输出:a =l 传值参数,实际参数值不变a =21 指针参数,形式参数通过间址修改实际参数a =51 引用参数,形式参数通过别名方式修改实际参数4
77、. C +函数通过什么方式传递返回值?当一个函数返回指针类型时,对返回表达式有什么要求?若返回引用类型时,是否可以返回一个算术表达式?为什么?【 解答】C +首先计算表达式的值, 然后把该值赋给函数返回类型的匿名对象,通过这个对象,把数值带回调用点,继续执行后续代码。当函数返回指针类型时,返回的地址值所指对象不能是局部变量。因为局部变量在函数运行结束后会被销毁,返回这个指针是毫无意义的。返回引用的对象不能是局部变量,也不能返回表达式。算术表达式的值被储存在匿名空间中,函数运行结束后会被销毁,返回这个变量的引用也是无意义的。5 .变量的生存期和变量作用域有什么区别?请举例说明。【 解答】变量的生
78、存期是指程序运行后,变量占有内存的时间;变量作用域指的是指变量声明之后,在程序正文中有效的那部分区域。例如,定义函数:v o i d c o u n t () s t a t i c i n t n =0;/)该函数中n 被定义为s t a t i c 变量, 生存期是整个程序运行时期;但作用域只在c o u n t 函数中。6 . 静态局部变量有什么特点?编写一个应用程序,说明静态局部变量的作用。【 解答】静态局部变量的生存期是全程的,作用域是局部的。程序开始执行时就分配和初始化存储空间( 默认初始化值为0) 。定义静态局部变量的函数退出时,系统保持其存储空间和数值。下次调用这个函数时,s
79、t a t i c 变量还是上次退出函数时的值。直至整个程序运行结束,系统才收回存储空间。程序略。7 . 在一个语句块中能否访问一个外层的同名局部变量?能否访问一个同名的全局变量? 如果可以, 应该如何访问?请写一个验证程序说明。【 解答】一个语句块中不能访问外层的同名局部变量。可以访问一个同名的全局变量。验证程序:#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t a =0; 全局变量ai n t m a i n () i n t a =l ; 外层局部变量a i n t a =2; 内层局部变量ac o u t , ,L o c
80、a l a i s , , a e n d l ; 输出内层局部变量a)c o u t / ,M a i n a i s , / a e n d l ; 输出外层局部变量ac o u t , ,G l o b a l a i s , z : :a e n d l ; 输出全局部变量a)8 . 有函数原型v o i d f (i n t & n);和函数调用i n t a ;/ / f (a ) ;有人说,因为n是a的引用,在函数f中访问n相当于访问a,所以,可以在f的函数体内直接使用变量名a。这种说法正确吗?为什么?请你写个验证程序。【 解答】形式参数n的作用域是f函数,实际参数a的作用域是调
81、用f函数的模块(例如m a i n函数) ,所以在f函数中可见n而不可见a。因此,这种说法不正确。f函数内不能直接使用变量名a ,只能通过别名n访问a。验证程序:#i n c l u d e u s i n g n a m e s p a c e s t d ;v o i d f ( i n t &n ) ;i n t m a i n () i n t a = 1 ;f ( a ) ;c o u t , ,a =z , a e n d l ;v o i d f ( i n t &n ) a +; 错误,直接使用an + + ; 正确)产生编译错误:e r r o r C 2065: “ a ”
82、 :未声明的标识符9 . 有函数原型d o ub l e f un c t i o n (i n t , d o ub l e ) ;函 数 f un c t i o n 的返回值类型是什么?函数的类型是什么?请用t y p e d e f 定义函数的类型。若有函数调用语句x = f un c t i o n (10, (2* (0. 314+ 5) ) ;其中的括号“ () ”与函数原型中括号有什么语义区别?【 解答】函数f un c t i o n 的返回值类型是d o ub l e函数类型是: d o ub l e (i n t , d o ub l e )可以定义为: t y p e
83、d e f d o ub l e f un T y p e (i n t , d o ub l e ) ;函数调用f un c t i o n (10, (2* (0. 314+ 5) ) 中, 外层括号表示调用函数匹配的实际参数表,里面的两层括号是表达式运算。10.请分析以下各语句的意义。i n t * f un () ;i n t * (* p f ) () ;f un () ;p f = f un ;p f 0 ;【 解答】i n t * f un O ; 函数原型声明。 f un 是返回i n t * 类型,没有参数的函数i n t * (* p f ) 0 ; 声明指针变量。p f
84、是指向函数的指针,函数类型为i n t * ()f un () ; 调用函数语句p f = f un ; 向指针变量赋值。函数指针p f 指向函数f unp f () ; 用指针变量间址调用函数3.4编程题1 . 已 知 y = S W + S 3,其中s h 为双曲正弦函数, 即.) = 止 1。sh2x + sh3x 2编一程序,输入X的值,求 y的值。【 解答】# i n c l ud e # i n c l ud e us i n g n a m e s p a c e s t d ;d o ub l e s h ( d o ub l e t ) ;i n t m a i n () d
85、 o ub l e x , y ;c o ut x = ;c i n x ;y = s h ( l + s h (x ) ) /( s h ( 2* x ) + s h ( 3* x ) ) ;c o ut y = y e n d l ;d o ub l e s h ( d o ub l e t ) r e t ur n ( e x p ( t ) - e x p ( - t ) ) /2; 2 .输入m、n和p的值,求s = 1 + 2+ .+机 + + 2 , + . . . + , 的值。注I5 + 25 + + p 5意判断运算中的溢出。【 解答】us i n g n a m e s
86、p a c e s t d ;d o ub l e f ( l o n g k , l o n g n um ) ;i n t m a i n () long m, n, p ; double s, fl, f2, f3;cout ” m, n, p=;cinmnp;fl=f ( 1 , m ); f2=f ( 3, n ); f3=f ( 5, p );if (fl & f2 & f3 ) s = ( fl + f2) /f3;cout s= s endl;)else cout“ 溢出! n” ;)double f ( long k, long num ) long i;double sum
87、=0;for( i=l; i=num & sum21 47483647; i+ ) sum = sum + pow( double (i), double (k);if (i=num)return 0; 溢出时返回return sum;3 .输入a,b和c的值,编写一个程序求这三个数的最大值和最小值。要求把求最大值和最小值编写成一个函数,并使用指针或引用作为形式参数把结果返回main函数。【 解答】( 1 )使用指针参数#includeusing namespace std;void fmaxmin( double, double , double , double *, double* );
88、int main() double a, b, c, max, min;cout a, b, c =;cin a b c;fmaxmin ( a, b, c, &max, &min );cout max max endl;cout min= min endl;)void fmaxmin( double x,double y, double z, double*pl,double *p2 ) double u, v;if ( xy ) u = x; v = y; else u = y; v = x; ;if ( zu ) u = z;if ( zv ) v = z;*pl = u;*p2 = v
89、;)( 2 )使用引用参数#includeusing namespace std;void fmaxmin ( double, double , double , double& , double& );int main() double a, b, c, max, min;cout ” a, b, c=;cin a b c;fmaxmin ( a, b, c, max, min );cout max= max endl;c o ut m i n = m i n e n d l ;)v o i d f m a x m i n ( d o ub l e x , d o ub l e y , d
90、o ub l e z , d o ub l e& p l , d o ub l e & p 2 ) d o ub l e u, v ;i f ( x y ) u= x ; v = y ; e l s e u = y ; v = x ; ;i f ( z u ) u = z ;i f ( z v ) v = z ;p l = u;p 2 = v ;)4 . 用线性同余法生成随机数序列的公式为:rk = ( m ul t i p l i e r * rk- i + i n c r e m e n t ) % m o d ul us序列中的每一个数及, 可以由它的前一个数r i 计算出来。 例如,
91、如果有:rk = ( 25173 * rk. 1 + 138 49 ) % 65536则可以产生65536个各不相同的整型随机数。设计一个函数作随机数生成器,生成一位或两位数的随机数。利用这个随机数生成器,编写一个小学生四则运算的练习程序:- 可以进行难度选择。一级难度只用一位数,二级难度用两位数;- 可以选择运算类型,包括加、减、乘、除等; - 给 出 错 误 提 示 ; 可以统计成绩。【 解答】#includeusing namespace std;int Rand(int, int); 生成指定范围的随机数int main() int w, i, r, t = 0;char op, an
92、swer;int a, b, d;while (1 ) 练习开始 cout 现在开始?( Y 或 N ) n ;cinanswer;if (answer=N | | answer=n) break;while (1 ) c ou t 请输入难度(1或2 )c i n w ;i f ( w ! = 1 & w ! = 2 )c ou t 输入难度错误,重新输入! X e nd l;e lse b re a k ;)w h i le (1 ) c ou t 请输入运算类型(+,-,*,/): ;c i n op;i f ( op ! = + & op & op ! = * & op ! =c ou
93、 t 输入运算符错误,重新输入! e nd l;e lse b re a k;)出1 0道题,每题1 0分t= 0 ;f or( i = l; i = 1 0 : i + ) w h i le (1 ) i f ( w = = 1 ) a = R a nd (O , 1 0 ); b = R a nd (0 , 1 0 );)e lsei f ( w = = 2 ) a = R a nd (1 0 , 1 0 0 ) ; b = R a nd (1 0 , 1 0 0 );)i f ( op )i f ( a b ) c onti nu e ;使被减数大于减数i f ( op = = /)i
94、f ( i nt( a /b ) ! = (a / b ) ) c onti nu e ; /只做结果为整数的除法b re a k;c ou t a op b ;c i n d ;sw i tc h ( op ) c a se : r = a + b ; b re a k;c a sera - b ; b re a k;c a se : r = a * b ; b re a k;c a se : r = a / b ; b re a k;)i f ( r = = d ) c ou t “ 你算对了,加 1 0 分! e nd l;t = t + 1 0 ;)e lse c ou t 你算错了!
95、 e nd l;)c ou t 你的成绩是: t 分 e nd l;)i nt R a nd (i nt m, i nt n) sta ti c i nt r; 静态变量保留上一个随机数d o r = ( 2 51 73 *r + 1 3 849 ) % 6553 6 ; w h i le (r = n);re tu rn r;5 . 已知勒让德多项式为1 = 0P”(x) = , x n = (2 - l)p“_i (x )-(n - Dp,7。) / 1编一程序,从键盘上输入X 和 n 的值,使用递归函数求P“ (x)的值。【 解答】#includeusing namespace std;
96、double p( double x, int n );int main() int n;double x;cout ” please input x and n:;cin x n;cout p( x , n )= p( x, n ) endl;)double p( double x, int n ) double tl,t2;if( n = 0 ) return 1 ;else if( n - 1 ) return x;e lse tl = ( 2 *n-l )*p( x , n-1 );t2 = ( n-l )*p( x , n-2 );re tu rn ( tl-t2 )/n;)6 .
97、把以下程序中的pri nt。函数改写为等价的递归函数。tti nc lu d e u si ng na me spa c e std ;v oi d pri nt( i nt w ) f or( i nt i = l ; i = w ; i + ) f or( i nt j = 1 ; j = i ; j + )c ou t i ;c ou t e nd l ;)i nt ma i n 0 pri nt( 5 );)运行显示:12 23 3 34 4 4 45 5 5 5 5【 解答】# i nc lu d e u si ng na me spa c e std ;v oi d pri nt(
98、i nt w ) i nt i ;i f ( w ) pri nt( w -1 );f or( i = l; i = w ; i + )c ou t w zc ou t e nd l;v oi d ma i nO pri nt ( 5 );7 .已知用梯形法求积分的公式为:T ,(/(。 )+/(% 度/( “ + M,其2 |=|中h = ( b a ) / n, n为积分区间的等分数,编程序求如下积分的值。要求把求积分公式编写成一个函数,并使用函数指针作为形式参数。调用该函数时,给定不同的被积函数作为实际参数求不同的积分。寻, 尸 公 【 解答】# i nc lu d e # i nc l
99、u d e u si ng na me spa c e std ;d ou b le f l ( d ou b le x ) re tu rn 4 / ( 1+ x *x );)d ou b le f 2 ( d ou b le x ) re tu rn sqrt ( 1 + x *x );double f3( double x ) return sin( x );)double trap( double ( *fun ) ( double x ), double a, doubleb, long n ) double t, h; int i;t = ( ( *fun ) (a) + ( *f
100、un ) ( b ) ) / 2. 0;h = ( b - a ) / n;for ( i=l; i=n-l; i+ ) t += ( *fun ) ( a + i * h ) ;t *= h;return t ;)int main() double tl, t2, t3;tl = trap( fl, 0,1 ,1 0000 );cout tl= tl endl;t2 = trap( f2, 1 , 2, 1 0000 );cout t2= t2 endl;t3 = trap( sin, 0, 3. 1 41 59265/2,1 0000 );c ou t t3 = t3 e nd l;)8.
101、编写一个程序, 包含三个重载的d i spla y 函数和一个主函数。要求第一个函数输出d ou b le 值,前面用字符串“ a d ou b le : ”引导,第二个函数输出一个i nt值,前面用字符串“ a i nt: ”引导,第三个函数输出一个c h a r字符值,前面用字符串“ a c h a r: w引导,在主函数中分别用d ou b le 、i nt和 c h a r型变量作为实参调用d i spla y函数。【 解答】# i nc lu d e u si ng na me spa c e std ;v oi d d i spla y ( d ou b le d ) c ou t
102、 ” a d ou b le : d e nd l;)v oi d d i spla y ( i nt i ) c ou t a i nt: i e nd l;v oi d d i spla y ( c h a r c ) c ou t ” a c h a r: c e nd l;int main() double d = 1 . 5; int i = 1 00; char c = a;display( d );display( i );display( c );)9.使用重载函数编程序分别把两个数和三个数从大到小排列。【 解答】#includeusing namespace std;void
103、 sort ( double x, double y );void sort( double x, double y, double z );int main() sort ( 5. 6, 79 );sort ( 0. 5, 30. 8, 5. 9 );)void sort(double x, double y) if ( xy ) cout x t y endl;else cout y t x endl;void sort ( double x, double y, double z ) double t;if( yz ) t = y; y = z; z = t; if( xz ) t =
104、x; x = z; z = t; if( xy ) t = x; x = y ;y = t; cout x * t* y * t5 z * t* endl;)1 0.给定求组合数公式为:一加,编一程序,输入m 和 n的值,求C: 的值。注意优化算法,降低溢出可能。要求主函数调用以下函数求组合数:int Fabricate ( int m, int n ); 返回 c: 的值Fabricate函数内又须调用Multi函数:int Multi( int m, int n ) ; / 返 回. x n程序由4 个文件组成。 头文件存放函数原型作为调用接口; 其他3 个 cpp文件分别是main、Fa
105、bricate和 Multi函数的定义。【 解答】/Fabricate, httifndef FABRICATEDttdefine FABRICATEDint Fabricate( int m , int n );int Multi( int m , int n );#endif/main, cpp#includeusing namespace std;#include Fabricate, h”int mainO int m , n;cout ”input m and n:;cin m n;cout ”Fabricate。 m n )= Fabricate( m , n ) endl;/F
106、a b ri c a te , c pp i nc lu d e “ F a b ri c a te , h ”i nt F a b ri c a te ( i nt m, i nt n ) re tu rn M u lti ( m, m-n + 1 ) / M u lti ( n, 1 );)/M u lti , c ppi nt M u lti ( i nt m, i nt n ) i nt i , t = 1 ;f or( i = n; i s2 ( b) strcmp( sl, s2 ) = = 0( c) strcmp( sl, s2 ) 0 ( d) strcmp( s2 , si
107、) 04 . 2 阅读下列程序,写出执行结果1 .ttinclude using namespace std;int main( ) int i, count= 0 , sum= 0 ;double average ;int a = 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 1 0 ;for( i= 0 ; i 1 0 ; i+ + ) if( ai % 2 = = 0 )continue ;sum + = a i ;count + + ;)average = sum/ count ;cout / ,count = count t average = averag
108、e endl ;)【 解答】conut = 5 average = 52 .ttinclude using namespace std;int main( ) int a9 = 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 ;)【 解答】sum = 2 03 .# include # include using namespace std;const int N = 5 ;in
109、t main( ) int aN N = 0 , i, j, k ;for( k= l , i= 0 ; i = 0 ; j , k+ + )aj i- j = k ;for( i= 0 ; i N ; i+ + ) for( j= 0 ; j N ; j+ + )cout setw( 3 ) ai j ;cout endl ;)【 解答】1 32 56 1 0 1 59 1 4 04 8 1 3 0 07 1 2 0 0 01 1 0 0 0 04 .# include using namespace std;int f ( int , int) ;int main( ) int a = -
110、 1 , 3 , 5 , - 7 , 9 , - 1 1 ) ;cout f( a, 6 ) endl ;)int f( int a, int siz e ) int i, t= l ;for( i= 0 ; i 0 ) t * = ai;return t;)【 解答】1 3 55 .# include using namespace std;int f ( int 3 , int, int ) ;int main( ) int a 3 = 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8cout f( a, 3 , 3 ) endl ;)int f ( int a3 , i
111、nt row, int col ) int i, j, t= l ;for( i= 0 ; i row; i + + )for( j= 0 ; j col; j+ + ) + + ;if( i = = j ) t * = ai j :)return t ;)【 解答】4 56 .# include using namespace std;void testl( int * al ) al = new int( 5 ) ;cout * al = * al endl ;)void test2 ( int * & a2 ) a2 = new int ( 5 ) ;cout * a2 = )int m
112、ain( ) int * p = new int( 1testl ( p ) ;cout ” testl: * pltest2 ( p ) ;cout ” test2 : * p2* a2 endl ;) ;= X * p endl ;= * * p endl ;)【 解 答 】* al= 5testl: * pl= 1*a2= 5test2 : * p2 = 57 .include using namespace std;int main( ) char s = abccda ;int i ; char c ;for ( i = 1 ; ( c= si ) ! = 0 ; i + + ) s
113、witch( c ) case,a, :cout ;continue ;case b :cout ;break ;casec:cout ;break ;case d : continue ;)cout # endl ;)【 解答】$ #* #* #%8 .# include using namespace std;int main( ) char * str = c+ + , basic ,char * * p ;int i ;p = str ;for( i= 0 ; i 3 ; i+ + )cout * ( p+ i ) endl ;)【 解答】C + +pascal ;basicpasca
114、l9 .include using namespace std;int main( ) char si = F ortran , s2 = F oxpro ;char * p , * q ;p = si ; q = s2 ;while( * p & & * q ) if ( * p = = * q )cout * p ;P + + ;q + + ;)cout endl ;)【 解答】F or1 0 .#include #include using namespace std;int main() char str1 0 = vb, pascal, c+” , s 1 0 :strcpy_s (
115、 s , ( strcmp ( str 0, str 1 ) 0 ? str 0:strl) ) ;if ( strcmp( str2, s ) 0 )strcpy_s ( s, str 2 1 ) ;cout s endl ;)【 解答】C+4. 3 思考题1 .数组说明语句要向编译器提供什么信息?请写出一维数组、二维数组说明语句的形式。【 解答】数组说明语句要向编译器提供数组名( 标识符) ,数组元素的类型、数组维数、数 组 长 度 ( 元素的个数)等信息。一维数组说明语句为: 类型数组名表达式二维数组说明语句为: 类型数组名表达式表达式J2 . 数组名、数组元素的区别是什么?归纳一维数组
116、元素地址、元素值不同的表示形式。若有说明int aa 3 , * pa= aa;请使用aa或 pa,写出3 个以上与aa2 等价的表达式。【 解答】数组名是一个标识符,执行代码中代表数组的地址,即指向数组起始位置的指针;而数组元素是下标变量,性质相当于普通变量。对一维数组aa第 i 个元素的地址可以表示为: & aaiaa+ i;对一维数组aa第 i 个元素的值可以表示为:ai * ( a+ i) ;与 aa2 等价的表达式:* ( aa+ 2 ) * ( & a ) * ( pa+ 2 ) pa 2 3.要 把 一 维 数 组 int am* n的元素传送到二维数组intbm n中,即在程序
117、中要执行bi j= ak;请写出k今i, j 的下标变换公式,并用程序验证。【 解答】转换公式:i= k/ n j= k% n验证程序:# include using namespace std;int main( ) const int M= 3 , N= 4 ;intk, aM* N = l, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,1 0 ,1 1 ,1 2 ,bM N;int i, j;c o u t , ,array a :, , e n d l ;for( k= 0 ; k M* N; k+ + )bk/ N k% N = ak;for( k= 0 ; k M
118、* N; k+ + )c o u t a k ,tJ ;cout endl;c o u t , ,* * A fter convert* */ , e n d l ;c o u t , ,array b:, , endl;for( i= 0 ; i M; i+ + ) for( j= 0 ; j N; j+ + ) cout bi j,tJ ;cout endl;4 . 有以下函数void query ( ) int * p;p= new int 3 ;/ / delete p;p= new double5 ;/ / delete p;)出现了编译错误。请分析错误的原因,并把上述程序补充完整,
119、上机验证你的判断。【 解答】在语句p= new double5 ;中企图把动态浮点型数组的地址写入整型指针P,造成错误。错 误 为 error C 2 4 4 0 : “ = ” :无法从udouble * 转换为 int * 。改正方法:增加一个double* q指针。void query ( ) int * p;p= new int3 ;delete 口 p ;/ / . . . . . .d o u b l e *q ;q = n e w d o u b l e 5 ;/ / d e l e t e q ;)5 . 有以下程序根据输入值, 设计功能是调用函数c r e a t e 建立并
120、初始化动态数组,令 a i = i 。但该程序运行后不能得到期望结果,请分析程序的错误原因并修改之。t t i n c l u d e u s i n g n a m e s p a c e s t d ;v o i d c r e a t e ( i n t *, i n t );i n t m a i n ( ) i n t *a = N UL L , l e n ;c i n l e n ;c r e a t e ( a , l e n );f o r ( i n t i = 0 ; i l e n ; i + )c o u t a i c o u t e n d l ;d e l e
121、t e a ;a = N UL L ;)v o i d c r e a t e ( i n t *a p , i n t n ) a p = n e w i n t n ;f o r ( i n t i = 0 ; i n ; i +) a p i = i ;)【 解答】函数c r e a t e 中,指针参数i n t *a p 是传地址值的参数。调用函数时接受实际参数a 的值( 地址值)作为初始值。 a p 仅是局部变量, a p = n e wi n t n 获得新的地址值,函数执行完毕返回,a p 被释放,完全与实际参数a 无关。程序没有编译错误,但m a i n 不能获得动态数组。修
122、改方法是把a p 改为指针引用参数。v o i d c r e a t e ( i n t *& , i n t );函数原型声明, 使用引用参数v o i d c r e a t e ( i n t *& a p , i n t n ) 函数定义 a p = n e w i n t n ;f o r ( i n t i = 0 ; i n ; i +)a p i = i ;)4 . 4 编程题ii fni . 已知求成绩的平均值和均方差公式: 即 ”近 , 留E,nJI n其中n为学生人数,s , 为第i 个学生成绩。求某班学生的平均成绩和均方差。【 解答】# i n c l u d e #
123、 i n c l u d e u s i n g n a m e s p a c e s t d ;v o i d a v e M s d ( d o u b l e , i n t , d o u b l e & , d o u b l e & );求平均值和均方差值函数i n t m a i n ( ) d o u b l e s 口 = 7 6, 8 5 , 5 4 , 7 7 , 9 3 , 8 3 , 9 0 , 67 , 8 1 ,65 );d o u b l e a v e , m s d ;i n t i , n ;n = s i z e o f ( s )/ s i z e
124、o f ( d o u b l e ); 求数组元素的个数c o u t 学生成绩: ;f o r ( i = 0 ; i n ; i + )c o u t s i / ,c o u t e n d l ;a v e M s d ( s , n , a v e , m s d );c o u t 平均值: a v e e n d l 均方差值: m s d e n d l ;)v o i d a v e M s d ( d o u b l e s , i n t n , d o u b l e & a v e , d o u b l e& m s d ) i n t i ;d o u b l
125、e s u m l = 0 , s u m 2 = 0 ;f o r ( i = 0 ; i n ; i + ) 求平均值s u m l += s i ;a v e = s u m l / n ;f o r ( i = 0 ; i n ; i + ) 求均方差s u m 2 += p o w ( s i - a v e , 2 );m s d = s q r t ( s u m 2 / n );)2.用随机函数产生1 0个互不相同的两位整数存放到一维数组中,并输出其中的素数。【 解答】# i n c l u d e # i n c l u d e # i n c l u d e # i n c
126、 l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n ( ) i n t a 1 0 , i , j ;s r a n d ( i n t ( t i m e ( 0 ); 为随机数生成器设置种子值f o r ( i = 0 ; i 1 0 ; i + ) 1 : a i = r a n d ( );产生随机数存放到数组中i f ( a i 1 0 | | a i XOO ) 获取指定范围数据g o t o 1 ;f o r ( j = 0 ; j = a j )g o t o 1 ;)f o r ( i = 0 ; i 1 0 ;
127、 i + )c o u t a i c o u t e n d l ;f o r ( i = 0 ; i 1 0 ; i + ) d o u b l e m = s q r t ( d o u b l e ( a i );f o r ( j = 2 ; j m )c o u t a i :c o u t “ 是素数! e n d l ;3.将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。【 解答】# i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n ( ) i n t a = 3 8 , 6, 2
128、 9 , 1 , 2 5 , 2 0 , 6, 3 2 , 7 8 , 1 0 );i n t i n d e x 1 0 ; 记录下标的数组i n t i , j , t e m p ;f o r ( i = 0 ; i 1 0 ; i + )i n d e x i = i ;f o r ( i = 0 ; i = 8 ; i + )f o r ( j = i +l ; j = 9 ; j + )i f ( a i a j ) t e m p = a i ; a i = a j ; a j = t e m p ;t e m p = i n d e x i ; i n d e x i = i
129、n d e x j ;i n d e x j = t e m p ;f o r ( i = 0 ; i 1 0 ; i + )c o u t a i t i n d e x i e n d l ;)4 . 从键盘上输入一个正整数,判别它是否为回文数。所谓回文数是指正读和反读都一样的数。例如,123321是回文数。【 解答】#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n () i n t b 10, i , j , k , f l a g ;l o n g n u m , n ;c o u t n u m = ; c
130、 i n n u m ;k = 0;n = n u m ;d o 拆分整数,把各数字放入数组b b k + = n % 10;n = n /10; w h i l e ( n != 0);f l a g = l ; 判断标志i = 0; j = k -l ; 设置指示下标的指针w h i l e (i j )i f ( b i + != bj- ) 对称位置元素不相等 f l a g = 0;b r e a k ;)i f ( f l a g ) c o u t n u m ” 是回文数! e n d l ;e l s e c o u t n u m ” 不是回文数!“ e n d l ;5.
131、把两个升序排列的整型数组合并为一个升序数组。设计好你的算法,以得到较高的运行效率。【 解答】#i n c l u d e u s i n g n a m e s p a c e s t d ;v o i d m e r g e (c o n s t i n t a , i n t n a , c o n s t i n t b , i n t n b ,i n t c , i n t n c );i n t m a i n () i n t a 4 = 1, 2, 5 , 7 ;i n t b 8 = 3, 4, 8 , 8 , 9 , 10, 11, 12 );i n t c 12;i n
132、t i ;m e r g e ( a , 4, b , 8 , c , 12 );f o r ( i = 0; i 12; i + )c o u t c i c o u t e n d l ;)v o i d m e r g e (c o n s t i n t a , i n t n a , c o n s t i n t b , i n t n b ,i n t c , i n t n c ) i n t i , j , k ;i = j = k = 0;w h i l e ( i n a & j b j ) 当a i b j ,把b i 写入数组c c k = b j ; k +; j
133、+; e l s e当a i = b j ,把a i 写入数组c c k = a i ; k +; i +; w h i l e ( i n a ) c k = a i ; i +; k +; 把数组a的剩余元素写入数组cw h i l e ( j n b ) c k = b j ; k +; j +; 把数组b的剩余元素写入数组c)6.输入一个表示星期几的数,然后输出相应的英文单词。要求使用指针数组实现。【 解答】#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n () c h a r W e e k d a y 7
134、 = s u n d a y , m o n d a y , t u e s d a y ,“ W e d n e s d a y , t h u r s d a y ,f r i d a y , S a t u r d a y );i n t d ;c o u t z ,p l e a s e i n p u t w e e k d a y :c i n d ;i f ( d = 0 & d = 6 )c o u t d - *( w e e k d a y+ d ) e n d l ;e l s e c o u t i n p u t e r r o r !z , e n d l ;)7
135、. 编写函数:(1)在一个二维数组中形成如以下形式的n 阶矩阵:2 1 1 1 13 2 1 1 14 3 2 1 1、5 4 3 2 1 ,(2)去掉靠边元素,生成新的n -2 阶矩阵;(3)求矩阵主对角线下元素之和;(4)以方阵形式输出数组。在 m a i n 函数中调用以上函数进行测试。【 解答】#i n c l u d e u s i n g n a m e s p a c e s t d ;v o i d c r e a t e ( i n t *&a p p , i n t n );void del( int *&app, int *&bpp, int n );int maindi
136、agonal( int *&app, int n );void output( int *&app, int );int main() int *ap = NU LL, *bp = NU LL, n;cout 输入矩阵的阶: ;cin n;create( ap, n );cout n 形成矩阵: n;output ( ap, n );cout 去掉靠边元素生成的矩阵: n ;del ( ap, bp, n );output( bp, n-2 );cout ” 主对角线元素之和:“ X maindiagonal ( ap,n ) endl;)形成n 阶矩阵函数void create ( int
137、* &app, int n ) app = new int n*n ;int i, j, k = 0;for( i=0; in; i+ )for( j=0; jn; j+ ) if( i=j ) appk = 1 ;else appk = i-j+1 ;k+;)去掉靠边元素生成n-2阶矩阵函数void del( int *&app, int *&bpp, int n ) int i, j, k = 0;bpp = new int ( n-2 )*( n-2 );for ( i=0; in; i+ ) for( j=0; jn; j+ )if ( i & j & in-l & j n-l ) b
138、ppk= *( app + i*n + j );k+;求主对角线元素之和函数int maindiagonal( int *&app, int n ) int i, j, k = 0, sum = 0;for ( i=0; in; i+ ) for( j=0; jn; j+ )if( i=j )sum += *( app + i*n + j);)return sum;)以方阵的形式输出数组函数void output( int *&app, int n ) int i, j;for ( i=0; in ; i+ ) for( j=0; jn; j+ )cout *( app + i*n + j)
139、t;coutendl;c o u t e n d l ;)8. 设某一城市三个百货公司某个季度销售电视机的情况和价格如下表格所示。编写程序,将每个表数据以数组存放,求各个百货公司的电视机营业额。【 解答】康佳T CL长虹第一百货公司30025 015 0第二百货公司200240200第三百货公司28 021018 0牌号价格康佳3500TCL3300长虹3800#i n c l u d e u s i n g n a m e s p a c e s t d ;i n t m a i n () l o n g s 3 = 300, 25 0,15 0 , 200, 240,200, 28 0,
140、210, 18 0 ;l o n g p = 35 00, 3300, 38 00 );i n t i , j ;d o u b l e s u m ;f o r ( i = 0; i 3; i + ) s u m = 0;f o r ( j = 0; j 3; j +)s u m += s i j * p j ;c o u t 第 i +1 百货公司的电视机营业额 :” s u m e n d l ;)9 .设计函数求一整型数组的最小元素及其下标。在主函数中定义和初始化该整型数组, 调用该函数,并显示最小元素值和下标值。【 解答】#i n c l u d e u s i n g n a m
141、e s p a c e s t d ;i n t f m i n (i n t , i n t );i n t m a i n () i n t a = 7 3, 8 5 , 6 2, 9 5 , 7 7 , 5 6 , 8 1, 6 6 , 9 0,8 0 );i n t i n d e x ;i n d e x = f m i n ( a , s i z e o f (a )/s i z e o f (i n t );c o u t ” T h e m i n n u m n u m b e r i s : a i n d e x e n d l ;c o u t ” T h e i n
142、d e x i s : i n d e x e n d l ;)i n t f m i n ( i n t a , i n t s i z e ) i n t i , m i n = a 0, i n d e x = 0;f o r ( i = 0; i s i z e ; i + )i f ( a i m i n ) m i n = a i ; i n d e x = i ; ;r e t u r n i n d e x ;)10.假设有从小到大排列的一组数据存放在一个数组中, 在主函数中从键盘输入一个在该数组的最小值和最大值之间的数,并调用一函数把输入的数插入到原有的数组中,保持从小到大的
143、顺序,并把最大数挤出。要求在主函数中输出改变后的数组。【 解答】#includeusing namespace std;void insert( int a, int, int );int main() int a = 1 0, 1 2, 23, 25, 48, 48, 53, 58, 60, 78 ;int x, n, i;cout ” please input insert data:cin x;n = sizeof (a)/sizeof (int); 求数组长度insert ( a, n, x ); 插入元素for( i=0; in; i+ )cout ai cout endl;)voi
144、d insert( int a, int n, int x ) int i, p, j;if ( xan-l) for( i=l; in; i+ ) 查找插入位置if ( x = p ; j ) 后移元素,挤出最大值aj = aj- l;ap = x; 插入元素)1 1 .编写程序,按照指定长度生成动态数组, 用随机数对数组元素赋值,然后逆置该数组元素。例如,对数组A 5 ,初值为6 , 3 ,7 , 8 , 2 ,逆置后的值是2 , 8 , 7 , 3 , 6 0程序输出逆置前、后的数组元素序列。【 解答】# include# include # includeus ing nam es p
145、 ace s t d;void p r int ar r ay(int * p , int n);void adver s e (int * p , int n);int m ain() int * p , n, i;cout。请输入数组长度: ;cin n;P = new int n; / / 产生动态数组s r and(t im e(O);f or (i= 0 ; i n; i+ + ) 产生随机数并存放到动态数组中* (p + i)= r and ()/ 1 0 0 0 ;cout X” 动态数组:” ;p r int ar r ay (p , n); 输出动态数组adver s e (
146、p , n); 对数组逆置cout ” 逆置数组: ;p r int ar r ay (p , n); 输出逆置数组)/ / 输出数组函数void p r int ar r ay(int * p , int n) int i;f or ( i= 0 ; i n; i+ + ) if (i % 5 = = 0 ) cout endl; / / 控制一行输出5 个数据cout , ,a rra y ( p+i ) ;)cout endl;)/ / 对数组逆置函数void adver s e(int * p , int n) int i, t ;f or (i= 0 ; i n/ 2 ; i+ +
147、) t = * (p + i);* (p + i)= * (p + n- i- 1 );* (p + n- i- l)= t ;)1 2 . 把一个字符串插入到另一个字符串中指定的位置。【 解答】# includeus ing nam es p ace s t d;int m ain() int p , i, j, k;ch ar s i4 0 , s 2 4 0 , s 3 8 0 ;cout s l= ;cin s i;cout s 2 = ;cin s 2 ;cout ” inp ut ins er t p os it ion: ;cin p ; 输入插入位置f or ( i= 0 ;
148、i p ; i+ + )s 3 i = s li;f or ( j= 0 ; s 2 j ! = , 0 , ; j+ + )s 3 i+ j = s 2 j;f or ( k= p ; s ik ! = 0 ; k+ + )s 3 j+ k = s i k;s 3 j+ k = 0 ;cout s 3 = s 3 endl;1 3.把某班学生的姓名和学号分别存放到两个数组中, 从键盘上输入某一学生学号,查找该学生是否在该班,若找到该学生,则显示出相应的姓名。【 解答】#includeusing namespace std;int main() char name5 20 = li ming,
149、 , “ zhang qing,“ liu xiao ping, wang ying,lu pei ;long num5 = 20030001 , 20030002, 20030005,20030007, 2003001 0 ;int i;long snumber;cout / ,please input studentnumber:*;cin snumber;for( i=0; i5; i+ ) if( numi = snumber ) cout ” Found! The name is : 。namei endl;br eak;if ( i= = 5 ) cout C an t f oun
150、d! ” endl;)1 4 . 将一组C + + 关键字存放到一个二维数组中,并找出这些关键字的最小者。【 解答】# include# include us ing nam es p ace s t d;int m ain() ch ar s t r ing1 0 ;ch ar s t r 口 1 0 = w h ile , br eak , if , ext er n” ,void , aut o ,long , s t at ic , do , cons t );int i;s t r cp y ( s t r ing, s t r 0 );for( i=0; i1 0; i+ )if(
151、 strcmp(stri, string) 0 ) strcpy( string,stri);cout ” The minimum string is: string endl;)1 5. 使用指针函数编写程序,把两个字符串连接起来。【 解答】#includeusing namespace std;char *strcat( char *strl, char *str2 ) char *p = strl;while( *p != 0 ) p+;*p = *str2;do p+;str2+;*p = *str2; while( *str2 != 0 );return( strl );int m
152、ain() ch ar s t r l8 0 , s t r 2 8 0 ;cout inp ut s t r l: ;cin s t r l;cout ” inp ut s t r 2 :, z;cin s t r 2 ;cout s t r l+ s t r 2 = s t r cat ( s t r l, s t r 2 ) endl;)1 6. 使 用s t r ing类,写一个简单文本编辑程序,能够实现基本的插入、删除、查找、替换等功能。【 解答】略。习题5及其解答5 . 1选择题1 .有说明s t r uct p oint int x; int y; p ;正确的赋值语句是(C )
153、 0(a) point, x = 1 ; point, y = 2; (b) point= 1 , 2 ;(c) p. x = 1 ; p. y = 2; (d) p = 1 , 2 ;2 . 已知有职工情况结构变量emp定义为:struct Date int year;int month;int day;);strnct Employee char name20;long code ;Date birth);Employee emp ;下列对emp的birth的正确赋值方法是(d )。(a) year=1 980; month=5; day=l;(b) birth. year=1 980;
154、birth. month=5; birth. day=l;(c) emp. year=1 980; emp. month=5; emp. day=l;(d) emp. birth. year=1 980; emp. birth. month=5;emp. birth. day=l;3 .假定有以下说明语句,则下面引用形式错误的是(b )0struct Student int num ;double score ;);Student stu3 = 1 001 , 80, 1 002, 75, 1 003,91 ),*p=stu ;(a) p-num (b) (p+). num (c) (p+)
155、-num (d)(*p). num4 .若有以下说明语句,则下列错误的引用是(d )0struct Worker int no;char name20;);Worker w, *p = &w ;(a) w. no (b) p-no (c) (*p). no (d)*p. no5 . s i和s 2是两个结构类型变量,若要赋值s l= s 2合法,则它们的说明应该是(c )。(a) s i只能接受相同类型的数据成员 (b)结构中的成员相同(c)同一结构类型的变量 (d)存储字节长度一样的变量5.2阅读下列程序,写出执行结果。1 .include us ing nam es p ace s t d
156、;s t r uct D at a int n ;double s cor e ;) ;int m ainO D at a a3 = 1 0 0 1 , 8 7 , 1 0 0 2 , 7 2 , 1 0 0 3 , 9 0 , * p = a ;cout (p + + )- n endl ;cout (p + + )- n endl ;cout p - n+ + endl ;cout (* p ) n+ + endl ;【 解答】1 0 0 11 0 0 21 0 0 31 0 0 42 .t t include us ing nam es p ace s t d;s t r uct Em
157、p loyee ch ar nam e 2 0 ;ch ar s ex ;) ;void f un( Em p loyee * p ) if ( (* p ). s ex = = m)cout (* p ). nam e endl ;int m ainO Em p loyee em p 5 = Liming, m, Wangxiaoping,I , Luwei , m ) ;int i ;for( i=0; i3; i+ )fun( emp+i ) ;)【 解答】LimingLuwei3.ttinclude using namespace std;struct Node char * s ;Node * q ;);int main () Node a = Mary” , a+1 , Jack, a+2 , Jim,a ) ;Node *p = a ;cout p- s endl ;cout p- q- s endl ;cout p- q- q- s endl ;cout p- q- q- q- s endl ;【 解答】MaryJackJimMary