资源预览内容
第1页 / 共64页
第2页 / 共64页
第3页 / 共64页
第4页 / 共64页
第5页 / 共64页
第6页 / 共64页
第7页 / 共64页
第8页 / 共64页
第9页 / 共64页
第10页 / 共64页
亲,该文档总共64页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言程序设计课后习题答案( 主编:胡宏智)习题参考答案习题一参考答案:【 习 题 IT】 A B C D【 习 题 1 -2 C【 习 题 1-31 B【 习 题 1 -4 】B【 习 题 1 -5 略习题二参考答案:一、单项选择题【 习题2 -1 】 【 习题2 -6 】:C C D B A A二、简答题【 习题2 -7 】:C语言提供了丰富的数据类型,可以根据这些数据类型构造出不同的数据结构。C中的数据类型包括基本类型、构造类型、指针类型、空类型等。其中基本类型包括整型、字符型、实 型 ( 浮点型)等。【 习题2 -8 】:C中整常数的表示整型常量即整常数。C整常数可用以下三种形式表示:1 十进制整数; O2八进制整数。以数字0 开头的数是八进制数,如 01 2 3 表示八进制数1 2 3 ; O 3十六进制整数。以 O x 开头的数是十六进制数。如 0x 1 2 3 , 代表十六进制O数 1 2 3 【 习题2 -9 】:c规定对所有的变量要“ 先定义,后使用”,这样规定有以下好处:( 1 ) 便于纠错;( 2 ) 便于编译系统为变量分配存储空间;( 3 ) 运算合法性检查。【 习题270 1:C语句可以分为以下五类:( 1 ) . 控制语句。 完成一定的控制功能;( 2 ) . 函数调用语句;( 3 ) 表达式语句;( 4 ) 空语句;( 5 ) 可以用 把一些语句括起来成为复合语句。C只 有 9种控制语句,它们是:( 1 ) i f ( ) e l s e ( 条件语句)( 2 ) f or( )( 转 向 语 句 )( 3 ) w hi l e ( ) ( 循环语句)( 4 ) d ow hi l e ()( 循环语句)( 5 ) c on ti n ue ( 结束本次循环语句)( 6 ) b re a k ( 中止执行s w i tc h或循环语句)附 录 第 1页 共 36页 ( 7 ) s w i tc h( 多分支选择语句)( 8 ) g oto ( 转向语句)( 9 ) re turn ( 从函数返回语句)【 习题2 -1 1 】:表达式不是独立存在的,它存在于其它表达式、语句、函数参数里,表达式后面加上一个分号,就变成表达式语句,如i = i + l ( 是表达式,不是语句)i = i + l ; ( 是语句)表达式能构成语句是C语言的一个特色。其 实 “ 函数调用语句”也是属于表达式语句,因为函数调用也属于表达式的种,只是为了便于理解和使用,我 们 把 “ 函数调用语句”和 “ 表达式语句”分开来说明。由于C程序中大多数语句是表达式语句( 包括函数调用语句) , 所以有人把C语言称作“ 表达式语言”。【 习题2 -1 2 :字符常量就是一个字符,用单引号括起来,占一个字节;而字符串常量是由若干个字符组合而成,用双引号括起来,存贮时自动在后面加“ 0”,即使同样是一个字符,字符串常量后面还要加一个“ 0”。【 习题2-13:( 1) 12, a ; ( 2) 40, 20; ( 3) 113, 4b ; ( 4) 176627, fd 97; ( 5) 177621, ff91; ( 6) 4663, 9b 3; ( 7) 110022,9012; ( 8) 51013, 520b 。三、阅读程序写结果或填空【 习题2-14:a a b b c c a b cA N【 习题2-15:261【 习题2-16:10【 习题2-17:575 767. 856400,-789. 12402367. 856400 ,-789. 12402367. 86, -789. 12, 67. 8564,-789. 1240, 67. 856400, -789. 1240236. 78564e +01, -7. 9e +02A , 65, 101,411234567,4553207, d 68765535,177777, ffff, -1C OMPUTE R, C OM【 习题 2-18:9, 11,9, 10【 习题2-19】:2. 5【 习题2-20】:3. 5【 习题 2-21:( 1) 14, ( 2) 10, ( 3) 60, ( 4) 0, ( 5) 0, ( 6) 0【 习题 2-22: x -5& & x 5 | x -5四、编写程序题附 录 第2页 共3 6页 【 习题2-23ma in( )(floa t r, h, C l, Sa , Sb , Va , Vb ;sc a nf ( % f, % f & r, & h) ;C l=2*3. 14*r;Sa =3. 14*r*r;Sb =4*Sa ;Va =4*3. 14*r*r*r/ 3;Vb =Sa *h;printf( C 1二 % . 2fn,C l) ;printf( Sa二 % . 2fnSb =% . 2fnVa =% . 2fnVb =% . 2fn ,Sa , Sb , Va ,Vb ) ; 【 习题2-24】ma in( )floa t F , c ;printf( 请输入一个华氏温度:n ) ;sc a nf ( % f , & F ) ;c =5. 0/ 9. 0*( F -32) ; / *注 意5和9要实型表示,否则5 / 9的值为0*/ printf ( 摄氏度为:为2fn ,c ) ;)【 习题2-25# inc lud e std io. hma in( )c ha r c l, c 2;printf ( 请输入两个字符c l, c 2: n ) ;c l=ge tc ha r ( ) ;c 2=ge tc ha r ( ) ;printf ( “ 用putc ha r语句输出结果为:n) ;putc ha r( c l) ;putc ha r ;putc ha r ( c 2) ;printf ( “ 用printf语句输出结果为:n) ;printf (z ,n% c % c n” , c l, c 2) ;( 1) 都可以; 用 printf ( ) 函数;( 3) 不是在任何情况下,因为c ha r只有一个字节,而 int有 2 个字节。能表示的范围不一 样 。【 习题2-26】:# inc lud e ftd e fine PI 3. 14159ma in( )附 录 第 3 页 共 3 6 页 floa t r, h, c l, c s, c vz;printf( I nput r,h: ) ;sc a nf ( % f, % f , & r, & h) ;c l=2*PI *r;c s=PI *r*r;c vz=c s*h;printf (, zThe le ngth of the c irc umfe re nc e :% 6. 2fn/ z, c l) ;printf( a re a of the c irc le : % 6. 2fn c s) ;printf( volume of the c olumn: % 6, 2fn , c vz) ;)【 习题2-27】:# inc lud e ma in( )c ha r c h;printf ( nlnput a le tte r:z ,) ;s can f &ch );printf (z/nA SC I I the le tte r:% d ” , c h) ;)习题三参考答案:一、单项选择题【 习题3 T 】【 习题3-6: D C A D C B o【 习题3-7】:( 1) 0 , ( 2) 1 , ( 3) 1 , ( 4) 0 , ( 5) 1 o二、简单题【 习题3-8】:程序解决问题是按指定的次序执行一系列操作的结果,按照次序执行操作的过程描述称为算法。算法的特性:( 1) 有穷性; ( 2) 确定性; ( 3) 有零个或多个输入; ( 4) 有一个或多个输出; ( 5)有效性。举例:菜谱操作步骤、乐谱、施工图纸等等。【 习题3-9】:( 1) 自然语言,( 2) 伪代码,( 3) 流程图,( 4) 计算机语言。自然语言通俗易懂,但有歧义性;伪代码方便实用,但没有流程图明晰,容易犯逻辑错误;流程图明晰但绘制和修改时比较繁琐;计算机语言表示算法严谨,但无法做到算法设计的第一步就使用计算机语言,读程序比看流程图要费神很多。【 习题3- 10:顺序结构,由顺序执行的一组语句或者结构组成。( 2) 分支结构,根据判断条件,做出取舍,要么执行A分支要么执行B分支, 必须执行其中的一个,不可全执行也不可全不执行。( 3) 循环结构,由需要反复执行的一段代码或者结构组成。任何算法功能都可以通过以上三种基本程序结构的组合来实现。附 录 第 4页 共 3 6 页 【 习题3- 11:非 0 为真,0 为假。三、用传统流程图表示求解以下问题的算法。【 习题3 T 2 】【 习题3 T 9 :如下图3- 12 3- 19 所示。开 始输入a 、b 、c YNa ba与 b互换开 始 A - C B - A C f B结 束Ya b打 印 c b 、a打 印 a 、c 、b打印a 、b 、c( 结 束 )结 束3- 12 3- 13 3- 14其中的符号“ 一”表 示 “ 倒给”,例 如 “ A - C ” “ 将 A瓶中的液体倒给C 瓶”附 录 第 5页 共 3 6 页开 始 输 入nn被3整除Y n被5整除打印:n能被3、5整除N打印:n不能被3、5整除3- 15 3- 16 3- 17开 始 a 、 b c d = b 2- 4 a c YNd e O NYx l , x 2= - b / ( 2a )d = 0x l = ( - b + d ) / ( 2a ) x l = ( - b - d ) /( 2a ) p = - b / ( 2a ) q = / ( 2a )打 印x l , x 2打E p : x l = p + q i x 2= p - q i结 束3- 18 3- 19四、编 写 程 序 题 【 习题3- 20:t f i n c l u d e 附 录 第6页 共3 6页m a i n ( ) i n t x , y ;p r i n t f ( 输入 x : ) ;scanf&x);i f ( x l ) / * x l * / y = x ;p r i n t f ( x = % 3d , y = x = % d n ” , x , y ) ;)e l s e i f ( x 10) / * I W x T O * / y = 2* x T ;p r i n t f Cx = % 3d , y = 2* x - l = % d n ” , x , y ) ;)e l s e / * x , 10 * / y = 3* x - l l ;p r i n t f Cx = % 3d , y = 3* x - l l = % d n ” , x , y ) ;)【 习题3- 21:t t i n c l u d e m a i n ( ) l o n g i n t n u m ;i n t i n d i v , t e n , h u n d r e d , t h o u s a n d , t e n _ t h o u s a n d , p l a c e ;/ * 分别代表个位、十位、百位、千位、万位和位数* /p r i n t f ( 请输入一个整数( 0 9 9 9 9 9 ) :” ) ;s c a n f ( 绘l d ,& n u m ) ;i f ( n u m 9 9 9 9 ) p l a c e = 5 ;e l s e i f ( n u m 9 9 9 ) p l a c e = 4 ;e l s e i f ( n u m 9 9 ) p l a c e = 3;e l s e i f ( n u m 9 ) p l a c e = 2;e l s e p l a c e = l ;p r i n t f ( p l a c e = % d n ,p l a c e ) ;t e n _ t h o u s a n dz:n u m / 10000;t h o u s a n d二n u m / 1000/ 10;h u n d r e d = n u m / 100% 10;t e n = n u m % 100/ 10;i n d i v = n u m % 10;s wi t c h ( p l a c e ) c a s e 5 : p r i n t f ( d , % d , % d , % d , % d , , t e n _ t h o u s a n d , t h o u s a n d , h u n d r e d , t e n , i n d i v ) ;p r i n t f ( n反序数字为; ) ;p r i n t f (z ,% d % d % d % d % d nz ,, i n d i v , t e n , h u n d r e d , t h o u s a n d , t e n _ t h o u s a n d ) ; b r e a k ;c a s e 4 : p r i n t f ( % d , % d , % d , % d ,t h o u s a n d , h u n d r e d , t e n , i n d i v ) ;p r i n t f ( n反序数字为:) ;p r i n t f C/% d % d % d % d n, z, i n d i v , t e n , h u n d r e d , t h o u s a n d ) ;附 录 第7页 共3 6页b r e a k ;c a s e 3 : p r i n t f ( % d , % d , % d ,h u n d r e d , t e n , i n d i v ) ;p r i n t f ( n反序数字为:) ;p r i n t f ( d % d % d n ,i n d i v , t e n , h u n d r e d ) ;b r e a k ;c a s e 2: p r i n t f ( % d , % d , t e n , i n d i v ) ;p r i n t f ( n 反序数字为:) ;p r i n t f ( % d % d n ” , i n d i v , t e n ) ;b r e a k ;c a s e 1: p r i n t f (, z% dz ,, i n d i v ) ;p r i n t f ( n 反序数字为: ) ;p r i n t f ( % d n , i n d i v ) ;b r e a k ;)【 习题3- 22】:( 1) 用 i f 语句编程序。t t i n c l u d e m a i n ( ) l o n g i ;f l o a t b o n u s , b o n l , b o n 2, b o n 4 , b o n 6, b o n l O ;b o n l = l 00000* 0. 1; / * 利润为10万元时的奖金* /b o n 2= b o n l + 100000* 0. 07 5 ; / * 利润为 20 万元时的奖金* /b o n 4 = b o n 2+ 200000* 0. 05 ; / * 利润为 4 0 万元时的奖金* /b o n 6= b o n 4 + 200000* 0. 03; / * 利润为 60 万元时的奖金* /b o n l 0= b o n 6+ 4 00000* 0. 015 ; / * 利润为 100 万元时的奖金* /p r i n t f ( 请输入利润i : ) ;s c a n f ( 绘l d , & i ) ;i f ( i = 100000)b o n u s 二 i * 0. 1; / * 利润在 10 万元以内按 0. 1 提成奖金* / e l s e i f ( i = 200000)b o n u s = b o n l + ( i - 100000) * 0. 07 5 ; / * 利润在 10 万至 20 万元时的奖金* / e l s ei f ( i = 4 00000)b o n u s = b o n 2+ ( i - 200000) * 0. 05 ; / * 利润在 20 万至 4 0 万元时的奖金* / e l s ei f ( i = 600000)b o n u s = b o n 4 + ( i - 4 00000) * 0. 03; / * 利润在 4 0 万至 60 万元时的奖金* / e l s ei f ( i bon6 h onlO;然后再加上各区间附加部分的奖金。( 2) 用 sw itc h 语句编程序。输入利润i , 确定相应的提成等级bra nc h# inc lud e ma in( ) long i;f loa t bonus, bonl, bon2, bon4, bon6, bonlO;int c ;bonl= l00000* 0. 1;bon2= bonl+ 100000* 0. 07 5;bon4= bon2+ 200000* 0. 05;bon6= bon4+ 200000* 0. 03;bonl0= bon6+ 400000* 0. 015;printf ( 请输入利润i: ) ;s can f& i );c = i/100000;if ( c 10) c = 10;sw itc h ( c ) c a se 0: bonus= l* 0. 1; bre a k;c a se 1: bonus= bon1 + ( i-100000) * 0.07 5; bre a k;c a se 2 :c a se 3: bonus= bon2+ ( i-200000) * 0. 05; bre a k;c a se 4:c a se 5: bonus= bon4+ ( i-400000) * 0. 03; bre a k;c a se 6:c a se 7 :c a se 8 :c a se 9: bonus= bon6+ ( i-600000) * 0. 015; bre a k;c a se 10: bonus= bon 10+ ( iT 000000) * 0. 01;)printf ( 奖金是%10. 2f, z, bonus) ;【 习题3-23】:# inc lud e ma in ( ) int t, a , b, c , d ;printf ( 请输入4 个整数:) ;sc a nf ( %d , %d , %d , %d, &a , &b, &c , &d ) ;附录 第 9 页 共 36 页 printf Cn a = %d , b= %d , c = %d , d = %d n , a , b, c , d ) ;if ( a b) t= a ; a = b; b= t; if ( a c ) t= a ; a = c ; c = t; if ( a d ) t= a ; a = d ; d = t; if ( b c ) t= a ; b= c ; c = t; if ( b d ) t= b; b= d ; d = t; if ( c d ) t= c ; c = d ; d = t; printf ( 排序结果如下:n ) ;printf (z/%d , %d , %d , %d n , a , b, c , d ) ;)【 习题3-24:# inc lud e ma in( ) int p, r, n, m, te mp;printf ( 请输入两个正整数n, m: ) ;sc a nf ( %d , %d , &n, &m) ;if ( n m) te mpon; n= m; m= te mp; /* 把大数放在n 中, 小数放在m 中* / p= n* m; /* 先将n 和 m的乘积保存在P 中, 以便求最小公倍数时用* / w h ile ( m! = O) /* 求 n 和 m 的最大公约数* / r= n%m;printf ( 它们的最大公约数为:%d n,n) ;printf ( 它们的最小公倍数为:/d n, p/n) ; /* P是原来两个整数的乘积* / 【 习题3-25】:# inc lud e ma in ( ) c h a r c ;int le tte r= O, spa c e = 0, d ig it= 0, oth e r= 0;printf ( 请输入一行字符:n ) ;w h ile ( ( c = g e tc h a r ( ) ) ! = n ) if ( c = a &c = z |c = A &c = O&c 二 9) d ig it+ + ;e lse oth e r+ + ;)printf ( 字母数= %d, 空格数或d, 数字数二 %d, 其他字符数二 %d n , le tte r, spa c e , d ig it, oth e r) ;【 习题3-26:# inc lud e 附 录 第 1 0 页 共 3 6 页 ma in。(int a , b, x, y;sc a nf ( %d , %d , &a , &b) ;x= a * a + b* b;if ( x 100) y= x/100; printf y) ; e lse printf ( d , a * a + b* b) ;【 习题3-27 :# inc lud e ma in( )(int x;sc a nf ( %d , , &x) ;if ( x%5= = 0&x%7 = = 0) printf ( Ye s ) ; e lse printf ( No. ) ;)【 习题3-28 :# inc lud e ma inOint x;f loa t y ;sc a nf ( %d , , &x) ;if ( x 0&x 10&x =20) y= 10;e lse if ( x 20&x 40) y= -0.5* x+ 20; e lse y= -l;if ( y! = -l) printf (, z% r , y ) ;e lse printf ( E rror! n) ;)【 习题3-29:# inc lud e ma in( )(int x;sc a nf ( %d , , &x) ;if ( ( x%3= 0) & ( x%5= 0) & ( x%7 = 0) )printf (, z%d c a n be d iv id e d by 3, 5, 7 n” , x) ; e lse if ( ( x%3= = 0) & & ( x%5= = 0) )printf C %d c a n be d iv id e d by 3, 5, n , x) ;附录第 11 页 共 36 页 e lse if ( ( x%3= = 0) &( x%7 = = 0) )printf (z/%d c a n be d iv id e d by 3, 7 n, x) ;e lse if ( ( x%5= = 0) & & ( x%7 = = 0) )printf ( d c a n be d iv id e d by 5,7 n ,x) ;e lse if ( x%3= = 0)printf( d can be dividedelse if(x%5=0)printf (z ,% d can be dividedelse if(x%7=0)printf( d can be dividedelse printf( % d cannot be3-30:#includemain()(float x;by 3rT, x);by 5n , x);by7nz,, x);divided by 3,5,7n”,x );int y;printf (z ,n input x:);scanf (%f, &x);switch(x0)(case 1:y=l;break;case 0:switch(x=0)case 1:y=0;break;defaut:y=l;printfC n y=%d ,y);3-31:# inc lud e ma in ( )(int sc ore , te mp, log ; c h a r g ra d e ;log = l;w h ile ( log )(printf ( e nte r sc ore : ) ;sc a nf ( 级d , &sc ore ) ;if ( sc ore 100|sc ore 0)printf (z ,n e rror, try a g a in! n ) ;e lse log = 0;)附 录 第 1 2 页 共 3 6 页 【 习 题 【 习 题 if ( sc ore = = 100) te mp= 9;e lse te mp= ( sc ore -sc ore %10) /10;sw itc h ( te mp)(c a se 0:c a se 1:c a se 2:c a se 3:c a se 4:c a se 5: g ra d e = E ; bre a k;c a se 6: g ra d e=,DJ ; bre a k;c a se 7 : g ra d e=,C,; bre a k;c a se 8 : g ra d e = B ; bre a k;c a se 9: g ra d e = A ; bre a k;)printf ( sc ore二 %d , g ra d ezz%c nz ,, sc ore , g ra d e ) ;)【 习题3-32:# inc lud e ma in( )(int a , b;c h a r symbol;printf C ple a se e nte r/) ;sc a nf (z/%d %c %d i , &a , f e symbol, &b) ;printf ( Orig ina l v a lue :%d %c %d in, ,, a , symbol, b) ;symbol= + , ;e lse symbol= ;printf (, zNe w v a lue :%d %c %d i/z, a , symbol, b) ;if ( symbol* -)【 习题3-33:ttinc lud e ma in( ) int a , n, i= l, sn= O, tn= O;printf ( a , n二 :) ;sc a nf (%d, %dz ,, &a , &n) ;w h ile ( i = n) tn= tn+ a ; /* 赋值后的t n为i个a组成数的值* / sn= sn+ tn; /* 赋值后的s n为多项式前i项之和* / a = a * 10;+ + i;)printf ( a + a a + a a a + = %d n ,sn) ;附 录 第1 3页 共3 6页【 习题3-34:ttinc lud e ma in ( ) f loa t s= 0,t= l;int n;f or( n= l; n = 20; n+ + ) t= t* n; /* 求 n! * /s= s+ t; /* 将各项累加* /printf ( 1! + 2! + .+ 20! = %e n” ,s) ;【 习题3-35:#include main() int nl=1 00,n2=50,n3=1 0;float k;float sl=0, s2=0, s3=0;for(k=l;k=nl;k+) /* 计算 1 到 1 00 的和* / sl=sl+k;for (k=l; k=n2; k+) /* 计算 1 到 50 各数的平方和* / s2=s2+k*k;for (k=l;k=n3;k+) /* 计算 1 到 1 0 各数的倒数和* / s3=s3+l/k;printf ( 总和= %8 . 2fn” , sl+s2+s3);)【 习题3-36】:#include main ( ) int i, j, k, n;printf(“ 水仙花”数是: ) ;for (n=1 00;n1 000;n+) i=n/1 00;j=n/1 0-i*1 0;k=n%1 0;if (n=i*i*i+j*j*j+k*k*k)printf(%4d” ,n);p r i n t f C V ) ;【 习题3-37 :# inc lud e ma in( )(附录 第 14 页 共 36 页 int d a y= O, num= 2;f loa t sum= O. 0, a v e ;w h ile ( num = 100)(sum+ = 0. 8 * num;d a y+ + ; num* 二 2;)a v e = sum/d a y;printf (z ,na v e = %5. 2f , a v e ) ;)【 习题3-38 】:# inc lud e ma in( )(int i;f or ( i= l; i 100; i+ + )if ( i* i%10= = i| i* i%100= = i)printf ( 3d , i) ;【 习题3-39】 参考答案:# inc lud e ma in( )(int i, x, y;long la st= 1;printf ( I nput x, y: ) ;sc a nf (, z%d , %d , &x, &y) ;f or ( i= l; i = y; i+ + )la st= la st* x%1000;printf (/zT h e 3 d ig its: ld nz ,, la st) ;)【 习题340) :方法一:程序如下ttd e f ine M 1000 /* 定义寻找范围* /itinc lud e ma in( ) int kl, k2, k3, k4, k5, k6, k7 , k8 , k9, klO;int i, a , n, s;f or( a = 2; a = M ; a + + ) /* a 是 2 1000之间的整数.检查它是否完数* / n= 0; /* n用来累计 a的因子的个数* /s= a ; /* s用来存放尚未求出的因子之和, 开始时等于a * / f or( i= l ; i l) printf (, z%d , %d , kl, k2) ; /* n l 表示 a 至少有 2 个因子* /if ( n 2) printf (z ,,%d, z, k3) ; /*n2至少有3 个因子, 故应再输出1 因子* /if ( n 3) printf C , %dz ,, k4) ; /* 以下类似* /if ( n 4) printf (, z, %d ” , k5) ;if ( n 5) printf ( , %d ,k6) ;if ( n 6) printf ( ,d ,k7 ) ;if ( n 7 ) printf ( , %d , k8 ) ;if ( n 8 ) printf C , %d ,k9) ;if ( n 9) printf %d ” , klO) ;printf C nz ,) ;方法二:程序如下# inc lud e ma in( ) int m, s, i ;f or( m= 2; m l000; m+ + ) s= 0;f or ( i= l; i m; i+ + )if ( ( m%i) = = 0) s= s+ i;if ( s= = m) printf (/z%d I ts f a c tors a re ,m) ;f or( i= l; i m; i+ + )if ( m%i= = 0) printf (, z%d ,, z, i) ;printf ( b n) ;附 录 第 1 6 页 共 3 6 页方法三:此题用数组方法更为简单。程序如下# inc lud e ma in( ) int k100 ;int i, a , n, s;f or( a = 2; a 1000; a + + ) n= 0;s= a ;f or ( i= l; i a ; i+ + )if ( ( a %i) = = 0) n+ + ;s= s-i;kn = i; /* 将 找 到 的 因 子 赋 给 , k10 * /)if ( s= = 0) printf (z ,%d I ts f a c tors a re , a ) ;f or( i= l; i n; i+ + )printf ( d , , ki ) ;printf ( 级d n , kn ) ;【 习题3-41:# inc lud e ma in ( ) int i, t, n= 20;f loa t a = 2, b= l, s= 0;f or( i= l; i = n; i+ + ) s= s+ a /b;t 二 a ;a = a + b; /* 将前一项分子与分母之和作为下一项的分子* / b= t; /* 将前一项的分子作为下一项的分母* / )printf ( sum= %9. 6f n , s) ;【 习题3-42:f tinc lud e ma in( ) f loa t sn= 100, h n= sn/2;int n;f or ( n= 2; n = 10; n+ + ) sn= sn+ 2* h n; /* 第 n 次落地时共经过的米数*/h n =h n /2 ; /*第 n次反弹的高度*/附 录 第 1 7 页 共 3 6页p r i n t f ( 第1 0次落地时共经过% f m 。 n , s n ) ;p r i n t f (第 1 0 次反弹% f m。 n ,h n ) ;【 习题3 - 43 :#i n c l u d e m a i n () i n t d a y , x l , x 2 ;d a y =9;x 2 =l ;w h i l e (d a y 0) x l = (x 2 + l ) *2 ; /*第1天的桃子数是第2天桃子数加1后 的2倍*/ x 2 =x l ;d a y一 ;)p r i n t f (z ,t o t a l =% d n/z, x l ) ;)【 习题3 - 44:#i n c l u d e m a i n () i n t i , j , k ;f o r (i =0;i =3 ;i + + ) /*输出上面 4 行*号*/ f o r (j =0;j =2 - i ;j + + ) /*输出*号前面的空格*/p r i n t f ( ) ;f o r (k =0; k =2 *i ; k + + ) /*输出*号*/p r i n t f (*) ;p r i n t f ( n ) ;/*输出完一行*号后换行*/f o r (i =0; i =2 ; i + + ) /*输出下面 3 行*号*/ f o r (j =0;j =i ;j + + )p r i n t f () ;/*输出*号前面的空格*/f o r (k =0;k =4- 2 *i ;k + + ) /*输出*号*/p r i n t f 。*) ;p r i n t f ( n ) ; /*输出完一行*号后换行*/)【 习题3 - 4 5 1 参考答案:用迭代法求平方根的算法如下:(1 ) 设定一个x的初值x O ;(2 ) 用上述公式求出x的下一个值x l ;(3 ) 再将x l 代人上述公式,求 出 x的下一个值x 2 ;(4) 如此继续下去,直到前后两次求出的x值 (x n + 1 和 x n ) 满足以下关系:I x n + l - x n I1 0- 5附 录 第 1 8 页 共 3 6页为了便于程序处理,今只用变量x O 和 x l , 先令x的初值x 0=a /2 (也可以是另外的值) ,求 出 x l ;如果此时I x l - x O | 2 1 0 - 5 , 则使x l f x O , 然后用这个新的x O 求出下一个x l , 如此反复,直 到 I x l - x O | 1 0- 5为止。 i n c l u d e #i n c l u d e m a i n O f l o a t a ,x O ,x l ;p r i n t f (Z /En t e r a p o s i t i ve n u m be r :) ;s c a n f (绘f , &a ) ; /*输入 a 的值*/x 0=a /2 ;x l =(x O + a /x O ) /2 ;d o x O =x l ;x l =(x 0+ a /x 0) /2 ;w h i l e (f a bs (x O - x l ) =l e - 5) ;p r i n t f (, zTh e s q u a r e r o o t o f % 5. 2 f i s % 8. 5f n ” , a , x l ) ;)【 习题3 - 46 :牛顿迭代法又称牛顿切线法。它采用以下的方法求根:先任意设定一个与真实的根接近的值x O 作为第一次近似根,由 x O 求 出 f (x O ) ,过 (x O ,f (x O ) ) 点 做 f (x ) 的切 线 ,交 x轴 于 x l , 把它作为第二次近似根,再由x l 求 出 f (x l ) ,过 (x l ,f (x D) 点做f (x )的切线, 交 x轴于x 2 , 求 出 f (x 2 ) ;再作切线如此继续下去,直到足够接近真正的根x *为止, ,见图3 . 1 图 3. 1从图3 .1 可以看出,f (xO)=f(xO)/(xl-xO)因此: xl=xO-f(xO)/f (xO)这就是牛顿迭代公式。可以利用它由xO求 出 x l , 然后再由x2求 出 x3,设 f(x)=2x3-4x2+3x6附 录 第 1 9 页 共 3 6 页可以写成以下形式: f(x) = (2x-4)x+3x-6同样, f (x)可写成: f (x)=6x2-8x+3=(6x-8)x+3用这种方法表示的表达式,在运算时可节省时间。例如求f(x )只需要进行3 次乘法和3次加法,而原来的表达式要经过多次指数运算、对数运算和乘法、加法运算,花费时间较多。现在由于计算机的运算速度愈来愈快,这点时间开销是微不足道的,这是以前计算机的运算速度较慢时所提出的问题。由于过去编写的程序往往采用这种形式,所以我们在此也顺便介绍一下,以便在阅读别人所写的程序时知道其所以然。ttinclude Sinclude main() f l o a t x , x O, f , f l ;x =l . 5;d o x O=x ;f =( ( 2* x 0-4) * x 0+ 3) * x 0-6;f 1=( 6* x 0-8) * x 0+ 3;x =x O-f /f l ; w h i l e ( f a b s ( x -x O) =l e -5) ;p r i n t f ( Th e r o o t o f e q u a t i o n i s % 5. 2f n/z, x ) ;)为了便于循环处理,程序中只设了 x O和x , x O代表前一次的近似根,x代表后一次的近似根。求出一个x后,把它的值赋给x O ,然后用它求下一个xO由于第一次执行循环体时,需要对x O赋值,故在开始时应先对x赋一个初值( 今为1 . 5 ,也可以是接近真实根的其他值) 。【 习题3-47:先分析题目。按题意,画出图3 . 2的示意图。ABCABCXYZ X图中带“ X ”符号的虚线表示不允许的组合。从图中可以看到: X 既不与A 比赛, 又不与C 比赛,必然与B 比赛; C 既不与X 比赛,又不与Z比赛,必然与y比赛; A只能与Z比 赛 ,见 图 3. 3。以上是经过逻辑推理得到的结论。用计算机程序处理此问题时,不可能立即就得出此结论,而必须对所有组合一一检验,看它们是否符合条件。图 3. 2 图 3. 3附 录 第 2 0 页 共 3 6 页 Y Z 开始设计程序时,并不知道A、B、C 与 X、Y、Z中的哪一个进行比赛, 可以假设:A 与 i比赛, B 与 j比赛,C 与 k比赛;即:A iBjCki 、j 、k分别是X、Y、Z之一, 且 i 、j 、k互不相等( 一个队员不能与对方的两个队员比赛) 。NS图见图3.4。FOR i = X TO Z FOR j = X TO Z TFOR k= X* TO Z i 声k AND j # kTT打印 A - C -k i W X , k W X k W Z i B -j FFi Wj F其中,外循环使i由 X 变到 Z , 中循环使j由 X 变到 Z ( 但i 不应与j 相等) 。然后,对 每 组 i 、j的值,找符合条件的k值。k同样也可能是 X 、 Y 、 Z 之但 k也不应 与 i 或 j相等。在 iW jW k的条件下,把 i W x 和 IW X 以及K Z 的 i 、j 、k的值输出即可。S i n c l u d e m a i n ( ) c h a r i , j , k ; / *i 是 a的对手; j 是 b的对手; k是 c的对手*/fo r ( i = X ; i = Z ; i +)fo r ( j = X ; j 0) p r i n t f c ) ; PRTStar(c, n-1); main( )int i, n;s c a n f & n ) ;for (i=l;i=2)附 录 第2 2页 共3 6页当J=1或J=N+1时: 其值为1当J!= l且J!=N+1时: 其值为第N T行的第J-1个值与第N-1行 第J个值之和。 将这些特点提炼成数学公式可表示为:c(x, y) = 1 当 x=l 或 x=N+lc(x, y) = c(x-l, y-1) + c (x T ,y )其它程序如下:int c(int x, int y)if (y -l) | (y=x+D) return(l);else return c(x-1,y-1) + c(x-l, y);m ain() int i,j,n=13;printf(N=);while( n12 )scanf &n);for(i=0;i=n;i+) for(j=0;jn-i;j+) p r in t f ( );for(j=l;ji+2;j+) printf(%6d”, c (i,j);printf (n);4-27main( ) long k=2, N=1;float f=l, S=0;while(N=1E6)S+=f/N;f= - f ;N=N*k+;)printf(S=%fn”, S);)4-28int IsPrime(int x)int k;fo r ( k = 2 ; k x/ 2 ) r e t u r n 1;e l s e r e t u r n 0 ;m a i n ( ) i n t k ;fo r ( k = 9 9 ; k = l ; k - )i f ( I s P r i m e ( k ) p r i n t f ( 绘d , , k );附 录 / *每行开始3 *( n -i )个空格*/ / *每行输出i + 1 个 数 */ 第 23页 共 36页【 习题 【 习题习题五参考答案:一、单项选择题【 习题5 -1】 【 习题5 -8 】 D C A B B D C A二、阅读程序写结果或填空题【 习题5 -9 】 二 4 B 【 习题5 -10 】5【 习题5 -11 a k k 【 习题5 T 2 a 0 a k t【 习题5 -13 b j a m k 12【 习题5-141运行结果为:【 习题5 T 5 】I 1 1【 习题5 -16 三、编写程序题【 习题5 -17 :#i n c l u d e m a i n Oi n t a 10 , b 6 , c 10 ;i n t i , j , k , m ;fo r ( m = 0 ; m 10 ; n i +) s c a n f ( d ,; fo r ( m = 0 ; m 6 ; m +) s c a n f ( d ,;p r i n t f (, znz ,);i = 0 ; k = 0 ;wh i l e ( i 10 ) fo r ( j = 0 ; j = 6 ) c k = a i ; k +; i +;)*y _ r12345678900987654321234806a0=3al=2a2=3a3=3a4=3a5=2fo r ( m = 0 ; m k ; m +) p r i n t f( 3 d , c m );附 录 第 24页 共 3 6页【 习题5 -18 :#i n c l u d e m a i n ( )(i n t a 3 4 , s = O , m ,n ;fo r ( m = 0 ; m 3 ; m +)fo r ( n = 0 ; n 4 ; n +) scanf & amn) ;p r i n t f ( n );fo r ( m = 0 ; m3 ; m +)s = s +a m 0 +a m 3 ;fo r ( n = l ; n3 ; n +)s = s +a 0 n +a 2 n ;p r i n t f (/ /s = %d nz /, s );)【 习题5 -19 :#i n c l u d e #i n c l u d e m a i n O(c h a r a 2 0 , b 2 0 ;i n t m , n , k , f ;g e t s ( a ) ; g e t s ( b );m = s t r l e n ( a ) ; n = s t r l e n ( b );k = 0 ;wh i l e ( ( a k = = b k )&k m &k n ) k +;i f ( k = = m &k = = n ) f= 0 ;e l s e i f( a k b k j ) f= -l ;e l s e f= l ;p r i n t f( d n ” , f);)【 习题5 -2 0】:t t i n c l u d e #i n c l u d e m a i n ( )(c h a r s 2 0 , t ;i n t k ,n = 0 ;g e t s ( s );fo r ( k = O ; k =,A &s k = ,a & & s k = ,z ) ) n+;printf( nn=% d n, n) ;)【 习题5 - 2 1 :附录第 25 页 共 36 页#inc l ud e ma in( )int a 10 , k , m, n, j ;for( j =0;j 10;j +) sc a nf( d , & a j ) ;printf( input k : ) ;sc a nf (, z% dz ,, & k ) ;n=9;d o for( j =0;j =n) b rea k ;el se for( m=j ;mn-1;m+)a m =a m+l ;n=n-l ;) w hil e( l ) ;printf (z , n new a rra y : n, ?) ;for( j =0;j 0& & k 10) for ( i=0;i0; j ) *p=x ; *( p+j ) =*( p+j T ) ;for ( i=0;i10;i+) printf (/z% d , a i ) ;【 习题6-19#inc l ud e std io. h“ #inc l ud e a l l oc .h v oid ma inO inta 3 3 = 42, 6, 12, 33, 55, 25, 45, 7 6, 93) ;int i, j , *sum;sum=( int *) ma l l oc ( 3*siz eof( int) ) ; for ( i=0;i3;i+)(for( j =0;j 3;j +)*( sum+i) +=a i j ; for( i=0;i3;i+) printf(z /% d ,*( sum+i) ) ;【 习题 6-20#inc l ud e std io.h ttinc l ud e a l l oc .h v oid ma in( ) inta 3 3 = l ,2, 5, 4, 3, 6,9, 8, 7 ; int i, j , ( *p) 3 , ma x ;int r, c , f l a g=l ;P=a ;for ( i=0;i3;i+) fl a g=l ; ma x =*( *( p+i) ) ;r=i; c =0; for( j =l ;j 3;j +) if ( ma x *( *( p+i) +j ) ) ma x = *( *( p+i) +j ) ;r二 i; c 二 j ; for( j =0;j *( *( p+j ) +c ) ) fl a g=0;if ( fl a g) printf (/ ,% d , % d , % d n, z, r, c , ma x ) ; 【 习 题 6-21itinc l ud e std io. h #inc l ud e string. h ma in( )附录第 27 页 共 36 页 c ha r str 50 , *pl , *p2; printf ( pl ea se input tw ostrings n) ; gets ( str) ;pl =str;p2=str; w hil e( *p2!=, 0,) p2+; p2-; w hil e( *p1=*p2& & p1 0,) if(*pl-ch)(*pl=ch2; pl+; 6-23#include stdioh Sinclude stringh int main() delStr(char *str, char ch); char str8 0=wearegoodfriends ; char ch;int i;scanf(%c, &ch); printf(%sn ,str); i=delStr(str, ch);附录第 28 页 共 36 页 【 习 题 【 习题 printf (, z%sn, z, str); int delStr(char*str, char ch) int i, j, total, k, sum;char *p;i=0;total=0;p=str; while(*(p+i) !=, 0*) /*pl 字符串是否结束*/(k=i; sum=0; while (*(p+k) =ch) /*k 移动到不要删除位置*/ k+; sum+; /*删除字符个数*/ total+=sum;if (*(p+i)=ch) for (j=i ;*(p+j+sum)!=0; j+)*(p+j)=*(p+j+sum) ; *(p+j)=0; i+; return total; 6-24#inc l ud e “ std io. h #inc l ud e string, h v oid v oid ma in( ) rev ersestr( c ha r *str) ; c ha r str 50 ;printf( pl ea se input tw o strings n) ;gets ( str) ; rev ersestr( str) ; printf( % s n, str) ; v oid rev ersestr( c ha r *str)(c ha r c h, *pl ,*p2; pl =str;p2=str;w hil e( *p2!= 0 ) p2+; p2 ;w hil e( pl p2) c h=*pl ; *pl =*p2;*p2=c h; pl +; p2 ;附 录 第2 9页 共3 6页 【 习题 习题七参考答案:一、单选题【 习题7 -1】 【 习题7 -5】: BD AC B【 习题7 -6】 【 习题7T0 :BC C D A【 习题7T1】 【 习题7T5】:AC AC C【 习题7 - 1 6 【 习题7 -20】:BC C D C【 习题7 - 2 1 【 习题7 -24】:D ABB二、编写程序题【 习题7 -25】参考程序:#inc l ud e “ std io. httinc l ud e “ string, h”struct bookchar name30;int price;);main()(int i ;struct book books 10;clrscr ();for (i=0;i10;i+)(printf (Z/Name%d: n, z, i+1);gets(booksi, name);printf CzPrice%d:n, z, i+1);scanf (z ,%d/z, &booksi. price);for (i=0;i10;i+)(printf(Name: ) ;puts(booksi. name);getchar ();printf( Price:%dn ,booksi. price); 【 习题7 -26 :参考程序:#inc l ud e std io. hstruc t stud ent int num;c ha r na me 8 ;int sc ore1;int sc ore2;int sc ore3;附 录 第 3 0 页 共 3 6 页 int sc ore4;fl oa t a v e; ;v oid funl ( struc t stud ent stu ) int i;for ( i=0;i2;i+)(printf (z /N um% d :z ,, i + 1) ;sc a nf ( 级d ,& stu i . num) ;printf (, ,N a me% d :, z, i+1) ;sc a nf ( s , stu i . na me) ;printf (Z /Sc orel : ) ;sc a nf( % d ,& stu i . sc ore1) ;printf ( Sc ore2: ) ;sc a nf( d ,& stu i . sc ore2) ;printf ( Sc ore3: ) ;sc a nf ( 绘d ,& stu i . sc ore3) ;printf (, zSc ore4:, z) ;sc a nf( % d ,& stu i . sc ore4) ;stu i .a v e=( stu i .sc orel +stu i . sc ore2+stu i , sc ore3+stu i . sc ore4) /4. 0;)v oid fun2( struc t stud ent stu ) int i;printf (z ,N um tN a me tSc orel tSc ore2 tSc ore3 tSc ore4 tAv era ge nz ,);for ( i=0;inumnum)h=s=p;r=p;p=p-next;r-next=NULL;elseh=s=q;r=q;q=q-next;r-next=NULL;while(p&q)(if (p-numnum)r=p;p=p-next;elser=:q;q=q-next;附 录 第 3 2 页 共 3 6 页 s-next=r;s=s-next;if ( p)s-nex t=p;el ses-nex t=q;return h;)【 习题7 -29 参考程序:#inc l ud e std io. h#inc l ud e ma l l oc . hstruc t c hic k en(int c oc k ;int hen;int c hic k ; c h 20hma in ( )int i, j , k , n=0;struc t c hic k en *p;for ( i=0;i=100/5;i+)for( j =0;j =100/3;j +)for( k =0;k =100*3;k +)if ( i+j +k =100& & i*5+j *3+k /3. 0100. 00) c h n . c oc k =i;c h n . hen=j ;c h n . c hic k =k ;n+;P=c h;for( i=0;ic oc k , p-hen, p-c hic k ) ; p+;)习题八参考答案:一、单选题【 习题8 T】 【 习题8-5】:BC C C C【 习题8-6】 【 习题8 T0 :ABAD B附 录 第 3 3 页 共 3 6 页 【 习题8-11 【 习题8 7 2 】:AC二、简答题【 习题8 7 3 】提示:根据文本文件和二进制文件的特点进行回答。【 习题8-14 :文件是指存储在外部介质上一组相关数据的集合。根据文件的组织形式,文件可以分为ASC I I 文件和二进制文件。【 习题8-15 :对文件的操作的步骤:先打开,后读写,最后关闭。三、编写程序题【 习 题8 - 1 6 参考程序:#inc l ud e std io. h#inc l ud e string. hma in ( )(F I L E *fpl , *fp2, *fp3;c ha r str 128 ;if ( ( fpl =fopen(z /tl . tx t, r) ) =N U L L )(printf (z ,C a nnot open fil e. n) ;ex it ( 0) ;)if ( ( fp2=fopen(/zt2. tx t , r) ) 二 二N U L L ) printf( C a nnot open fil e. n) ;ex it ( 0) ;)if ( ( fp3=fopen(, zt3. tx t, w ) ) =N U L L ) printf (z ,C a nnot open fil e. n) ;ex it ( 0) ;)w hil e( ( strl en( fgets( str, 128, fpl ) ) ) 0)fputs( str,fp3) ;printf( % s , str) ;w hil e( ( strl en( fgets( str, 128, fp2) ) ) 0) fputs( str, fp3) ;printf( % s , str) ;)fc l ose( fpl ) ;fc l ose( fp2) ;fc l ose( fp3) ;【 习题8 77:参考程序:#inc l ud e std io. hma in( int a rgc , c ha r *a rgv 3)附 录 第 3 4 页 共 3 6 页F I L E *fp;int c h,sign=O, c ount=0;if( a rgc !=2)printf(z ,error! nN eed a ASC I I fil e na me.)fp二 fopen( a rgv l , r ) ;ex it( 1) ;if( !fp)printfC C a nnot open fil e. n) ;ex it ;)c h=getc ( fp) ;w hil e( c h!=E OF )(if( c h160)if( sign)(sign=0;c ount+;)el sesign=l ;c h=getc ( fp) ;)fc l ose( fp) ;printf ( 版 c onta ins % d ha nz i!, z, a rgv l , c ount) ; 8-18 :参考程序:ftinc l ud e std io. hstruc t studc ha r id 10 ;char name1 0;char birth9 ;float inscore;) ;struct studc(char id1 0;char name1 0;附 录 第 3 5 页 共 3 6 页【 习 题 float cmark;;main ()(int i=5;FILE *fps, *fpd;struct stud data5=2009 1 001 , wang, 1 9 9 01 001 ” , 540,“ 2009 1 002 , zhang , 1 9 9 1 09 30 , 573,2009 1 003 , li , “ 1 9 9 1 1 1 02,532),2009 1 004 , zhao , 1 9 9 09 1 02 , 538 ),“ 2009 1 005 , liu , 1 9 9 1 08 31 , 59 2), tmp;struct studc temp;fps=fopen(, zstu. txt, w);if(!fps) printf(z ,nCannot open file!” );ex it ( 1) ;fw rite( d a ta , siz eof ( struc t stud ) , 5, fps) ;fc l ose( fps) ;fps=fopen(, ,stu. tx t, r) ;if ( !fps) printf(z , nC a nnot open fil e!) ;ex it ;)fpd =fopen (z ma rk . tx t , w ) ;if( !fpd )(printf(z , nC a nnot open fil e!” ) ;ex it ( 1) ;)printf ( nPl ea se input stud ents, ma rk : n/z) ;for( i=0;i5;i+)frea d ( & tmp, siz eof( struc t stud ) , 1, fps) ;printf (z ,id : % s, na me: % 10s, C s ma rk : ,tmp. id , tmp. na me) ; sc a nf ( f ,& temp. c ma rk ) ;strc py ( temp, id , tmp. id ) ;strc py ( temp, na me, tmp. na me) ;fw rite( fetemp, siz eof( struc t stud c ) ,1, fpd ) ;printf( nC ompl ete!) ;fc l ose ( fps) ;fc l ose( fpd ) ;附 录 第3 6页 共3 6页
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号