《C语言程序设计教程(第2版)杨路明著课后习题答案.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计教程(第2版)杨路明著课后习题答案.pdf(81页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计教程(第 2 版)杨路明 著 课后习题答案C语言程序设计教程(第2版)杨路明著课后习题答案第 一 章C语言程序设计概述一习题答案1算法的描述有哪些基本方法?答1、自然语言2、专用工具2C语言程序的基本结构是怎样的?举一个例子说明。答1、C语言程序由函数构成:2、“/*”与“*/”之间的内容构成C语言程序的注释部分;3、用预处理命令#include、#define可以包含有关文件或预定义信息;4、大小写字母在C语言中是有区别的;5、除main。函数和标准库函数外,用户也可以自己编写函数,应用程序般由多个函数组成,这些函数指定实际所需要做的工作。3C语言有什么特点?答1、具有结构语言
2、的特点,程序之间很容易实现段的共享;2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;3、运算符丰富,包含的范围很广;4、数据类型丰富;5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。4指出合法与不合法的标识符命名。答A B 1 2-Jl e e d _ 3 a*b 2 X 8 s t u-X D.K.J o n X E F 3 _ 3 V P A S V i f X X Y
3、 Z 4 3 K 2 VA V E#X Y X _ 7 6 2 V#_ D T 5 X C.D X5说明下列T u r b o C热键的功能。答F2:源文件存盘F10:调用主菜单F4:程序运行到光标所在行(用于调试程序)C tr l+F9:编译并链接成可执行文件A lt+F5:将窗口切换到D OS下,查看程序运行结果。6说明下列Tur b o C方式下输入并运行下列程序,记录下运行结果。ma in ()p r in tf(*n);p r in tf(z,w elco me y o u n);p r in tf(z/ver y go o d n);p r in tf(*n);ma in ()in
4、 t a,b,c,t;p r in tf(/zp lease in p ut th r ee n umb er s;z,);scan f(%d,%d,%d,&a,&b,&c);/*教材 S 是错误的*/t=max(max(a,b),c);p r in tf C max n umb er is:%dn ,t);)in t max(in t x,in t y)in t z;if(x y)z=x;else z=y;r etur n(z);)答运行结果:w elco me y o uver y go o d运行结果:p lease in p ut th r ee n umb er s;3,1,4 /*
5、左侧下划线内容为键盘输入*/max n umb er is:47一 个 C程序是由若干个函数构成的,其中有且只能有一个_ 函数。答main O8在 Tur b o C环境下进行程序调试时,可以使用Run 下拉菜单的 命令或按 键转到用户屏幕查看程序运行结果。答1、User scr een2、A lt+F59 C 语言对标识符与关键字有些什么规定?答1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。10C源程序输入后是如何进行保存的?答是以
6、C为扩展名保存的纯文本文件。第 二 章 C语言程序的基本数据类型与表达式一习题答案1指出下列常数中哪些是符合c 语法规定的。答 -X 101 X 一 X e3 X 019 V O xle Vab n J l.e5 X (2+3)e(4-2)X 5.2 e2.5 X2请找出下列程序中的错误,改正后写出程序运行结果。vo id main()in t x,y=z=5,aver;x=7A VER=(x+y+z)/3p r in tf(,?A VER=%dnz,,aver);)vo id main()ch ar cl=,a,;c2=b ;c3=c;in t a=3.5,b=A p r in tf(/a=
7、%db=,en dn,a,b);p r in tf C,a%cb%cb c%ctab cn,,cl,c2,c3);答)main ()in t x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;p r in tf C,A VER=%dn,/,aver);运行结果:A VER=5 ma in ()ch ar cl=a,c2=b,c3=c;in t a=3,b=A;p r in tf(a=%d,b=%c en dn,a,b);p r in tf(,za%cb%cb c%ctab cn,/,cl,c2,c3);)运行结果:a=3,b=A en daab cc ab c3写出下列赋值的
8、结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。i n t 99-1c h ar h,u n s i g n e d i n t 66f l o at 55.78l o n g i n t 68答i n t 99 1 0 4 66 55 68Tc h ar,ch B7,D,unsigned int 9910466556865535float99.00104.0066.0055.7868.00-1.00long int99104665568-14写出程序运行结果。v o i d m ai n()i n t i,j;i=8,j=1 0;p
9、r i n t f (%d,%d,%d,%d n,i,j,+i,j+);m ai n。i n t a=l,b=2,c=30;p r i n t f(d,%d,%d,%d n,a=b=c,a=b=c,a=(b=c),a=(b=c);注意:a=b=c,a=b=c之间应为逗号,教材有误答运行结果:9,1 1,9,1 0运行结果:30,1,0,0 v o i d m ai n()i n t a=1 0,b=20,c=30,d;d =+a=20|c+;p r i n t f (%d,%d,%d,%d n,a,b,c,d);)答运行结果:1 1,1 9,30,15写出下面表达式的值(设 a=1 0,b=4
10、,c=5,d=l,x=2.5,y=3.5)。a%二(下=3)(2)n+,a+=a-=a*=a(3)(float)(a+c)/2+(int)x%(int)y(4)a*=b+c(5)+a-c+b+(6)+a-c+b a b?x:Ab+=c(9)a+b,18+(b=4)*3,(a/b,a%b)(10)x+a%3*(int)(x+y)%2/4+sizeof(int)(ll)ab?a:c 0?x:-x 的功能是什么?答如 果 X的值是正数,则表达式的值为X 值;如 果 X的值是一非正数,则表达式的值为-X。其实该表达式的值即为x的绝对值,C 语言中提供了一个函数f ab s(x)即可完成此功能,该函数包
11、含在m at h,h头文件中。8用一个条件表达式描述从a、b、c中找出最大都赋给m ax.答m ax=a(b c?b:c)?a:(b c?b:c);9若x为 i n t 型变量,则执行以下语句后x的 值 为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答B.1 0若有以下类型说明语句:c h ar w;i n t x;f l o at y;d o u b l e z;则表达式w*x+z-y 的结果为()类型。A.f l o at B.c h ar C.i n t D.d o u b l e答D.第 三 章 顺序结构程序设计一习题答案1变 量 k为 f l o a
12、t 类型,调用函数s c an f (机 不 能 使 变 量 k得到正确数值的原因是_ _ _ _ _ _ O答格式修饰符与变量类型不致。因为%d输入的数据类型应该为十进制整数,而&k 为占用 4 个字节的f l o at 类型变量的地址。2a=1 2 3 4,b=1 2,c=34,则执行“p r i n t f (%3 c 3 d%-3 d|n”,a,b,c);”后的输出是_a答1 1 2 3 4 1 2 3 4|分析如下:%3 d 为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小 于 3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。%-3 d
13、为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。3 设 有i n t a=2 5 5,b=8;,则p r i n t f (%x,%o n”,a,b);输出是_。答 f f,1 0 如 果 p r i n t f(%X,%。n”,a,b);”则输出为F F,1 0。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如 果 是“x”则输出小写,如 果 是“%X”则输出大写。如果希望在输出十六进制时输出前导符O x或0X,则以上输出语句应改p r i n t f (翩x,%o n”,a,b);为 或p r i n t f (绘#X,%o n”,a,b);
14、。本条解释不必须掌以下程序输出的结果是i n t al=l,a2=0,a3=2;p r i n t f (z/%d,%d,%d nz z,al,al+a2+a3,a3 al);1,3,1p r i n t f函数中用到格式符%5 s,其 中5表示输出字符占用5歹人如果字符串长度大于5,则按 输出;如果字符串长度小于5,则按 输出。实际左端补空格已定义变量如下:i n t al,a2;c h ar c l,c 2;若要求输入al、a2、cl和 c 2 的值,正 确 的 输 入 函 数 调 用 语 句 是。答scanf(%d,%d,%c,%c,&al,&a2,&cl,&c2);7输入两个整型变量a
15、、b 的值,输出下列算式以及运算结果 o a+b、a-b.a*b、a/b、(float)a/b、a%b每个算式占一行。如 a=10,b=5,a+b输出为:10+5=15答设 int a=10,b=5;以下为输出语句及结果:printf(,%d+%d=%dn,/,a,b,a+b);10+5=15printf(z,%d-%d=%dn,z,a,b,a-b);10-5=5printf(%d*刎二%dn,a,b,a*b);10*5=50printf(d/%d=%dn”,a,b,a/b);10/5=2printf(%(float)d/%d二%fn”,a,b,(float)a/b);(float)10/5=
16、2.000000printf(d%d=%dn,a,b,a%b);10%5=08输入一个非负数,计算以这个数为半径的圆周长和面积。答#define PI 3.1415926main()(float r,1,area;printf(Input a positive/);s c a n f&r);l=2*P I*r;ar e a=P I*r*r;p r i n t f (/l=%f t ar e a=%f n/,,1,ar e a);)9输入任意一个3 位数,将其各位数字反序输出(例如输入1 2 3,输 出 3 2 1)。答m ai n()(i n t x,y;p r i n t f (I n p
17、u t a n u m be r(1 0 0-9 9 9):,z);s ca nf&x);y=1 0 0*(x%1 0)+1 0*(x/1 0%1 0)+x/1 0 0;/*注意分析此处算法*/p r i n t f (%d%d n”,x,y);)1 0输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是则输出Y E S,不是 则 输 出 N O T (要求用条件表达式进行判断,不使用i f 语 句)。答m ai n()(i n t x,y,z,o d d c o u n t=0;/*奇数数计数变量*/p r i n t f (I n p u t x,y,z:);sc an f (,z
18、%d,%d,%dz,,&x,&y,&z);x%2=l?o d d c o u n t+:0;y%2=l?o d d c o u n t+:0;z%2=l?o d d c o u n t+:0;o d d c o u n t=2?p r i n t f (Y E S):p r i n t f C N 0 T,z);)1 1求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCH码值,按从大到小的顺序输出这3个字符及其对应的A S C I I码值。答本题考查同学们对字符类型数据的认识,如果在ASCH范围内则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数
19、据是可能参与数值运算的,切记。m ai n()(c h ar c;p r i n t f (I n p u t c h ar ac t e r/);sc an f(%c,&c);p r i n t f (%c-%d n,z,c-l,c-l);p r i n t f (c-%d n,z,c,c);p r i n t f (z z%c-%d n”,c +1,c+1);g et c hO;/*为便于调试程序,运行至此程序停顿,此时可以看到运行结果,按任意键程序真难得结束并返回到编辑环境*/)1 2输入三角形的边长,求三角形面积(面积=sqr t (s(s-a)(s-b)(s-c),s=(a+b+c)
20、/2)。答#inc l u de,zm a t h.hz/*由于程序中使用了开平方函数sqr t(),所以需要包含数学头文件*/m a in()(fl oa t a,b,c,s,a r ea;int ok=0;p r int f(Inp u t a,b,c:,z);sc a nf(f,%f,%f,&a,&b,&c);a+b c?ok+:0;/*以下3 条语句为判断是否输入的数据是否构成封闭三角形*/a+c b?ok+:0;b+c a?ok+:0;ok=3?(s=(a+b+c)/2,a r ea=sqr t(s*(s-a)*(s-b)*(s-c),p r int f(a r ea=%f”,a r
21、 ea):p r int f(er r or );get c h();第四章选择结构程序设计一习题答案1设x、t 均 为 int 型变量,则执行语句“x=1 0;t=x&x 1 0;”后,t的值为 o答2假定所有变量均已正确定义,则程序段:int a=0,y=1 0;if(a=O)y ;el se if(a 0)y+;el se y+二 y;运 行 后 y的值是;答2 03能表 述 2 0 x 3 0 或 x 2 0&x 3 0|+x-1 0 04若有定义语句“int a=2 5,b=1 4,c=1 9;,则以下语句执行结果是一&b=2&c)p r int f(*a+b=%d,a-b 或d*、
22、/,a+b,a-b);el se p r int f(*a=%d,b=%d,c=%d*n,a,b,c);答*a=2 5,b=1 4,c=1 9*5 假 定 i 和 j 为 int 型变量,则执行以下语句后i 的值是i=l;sw it c h(i)(c a se 1:for(j=0;j9;j+)i+=j;b r ea k;c a se 2:for(j=l;j1 0;j+)i+=j;b r ea k;)o if(a=2 5c a se 3:i+;答3 7分析:执行了 c a se 1:和c a se 3:中的代码。同时c a se 1:语 句 中 的 是可以取消的。6以下 两 条i f语句可合并成
23、一条i f语句,即 oif(a b)p r int f(*y二%d n,y);el se p r int f(*x=%d n,x);答if(a l)p r int f(z/ou t side,z);el se if(dl)p r int f(inside);el se p r int f(inside);)1 0输入年号和月份,输出这一年该月的天数(一个年份,先判断是否闰年)。答m a in()(int y,m,d,f;p r int f C Inp u t y ea r a nd m ont h y-m:);sc a nf&y,&m);f=(y%4=0&y/1 0 0!=0|y/4 0 0=
24、0);if(m=2)d=2 8+f;/*依据是否闰年决定2月份的实际天数,若是闰年,则f=l,d即为2 9天*/el sed=3 1-(m=4)+(m=6)+(m=9)+(m=l 1);/*m=4 时其值为 1,则本月为 30 天,典型算法,重要啊*/p r i n t f(,z%d-%d i s%d day s.n,y,m,d);11请将以下语句改写成s w i t ch语 句(a0)。i f(a30)m=l;el s e i f(a4 0)m=2;el s e i f(a50)m=3;el s e i f(a6 0)m=4;el s e m=5答s w i t ch(a/10)(cas e
25、 1:cas e 2:cas e 3:m=l;b r eak;cas e 4:m=2;b r eak;cas e 5:m=3;b r eak;cas e 6:m=4;b r eak;defau l t:m=5;12有一函数x-1-5x 0y=x x=0 x+1 0 x-5&x 0&x-5&x 8)i f(x 0)y=x-l;el s e i f(x=0)y=0:el s e y=x+l;p r i n t f(尸%f n,y);m ai n()fl o at x,y;s can f(%f ,&x);i f(x 0)y=x+l;el s e i f(x=0)y=0;el s e i f(x-5)
26、y=x-l;p r i n t f(y=%f n,y);使用多分支语句程序如下:m ai n Ofl o at x,y;i n t m;p r i n t f(In p u t x:);s can f&x);i f(x-5&x 8)i f(x 0)m=-l;el s e i f(x=0)m=0:el s e m=l;s w i t ch(m)cas e-l:y=x-l;b r eak;cas e 0:y=0;b r eak;cas e 1:y=x+l;b r eak;p r i n t f Cy=%f n,z,y);以下为假设对i n t类型的变量进行处理,但毕竟不算完美m ai n ()i
27、n t x,yp r i n t f(z,T n p u t x:);s can f(绘d,&x);s w i t ch (x)cas e-4:cas e-3:cas e-2:cas e-1:y=x-l;b r eak;cas e 0:y=0;b r eak;cas e 1:cas e 2:cas e 3:cas e 4:cas e 5:cas e 6:cas e 7:y=x+l;b r eak;)p r i n t f(y=%d n,y);)第五章循环结构程序设计一习题答案1 输 入 n个整数,求 这 n个数之中的偶数平均值,并输出。答m ai n()(i n t n,i,x,s u m=O
28、,co u n t=0;p r i n t f(z,l n p u t n:);sc a nf&n);fo r(i=0;i=a&ch 二 z|ch=A&ch=Z )ch ar cn t+;i f(ch=O&ch=,a&ch=,A&ch=,Z )printf c h+3 2);g et ch O ;)5设某县20 0 0年工业总产值为2 0 0亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多少年后该县年工业总产值将超50 0亿元。答m ai n()(fl o at x=20 0;i n t n=0;dox*=(l+0.0 4 5);n+;w h i l e(x 50 0);p r i
29、n t f(n=%d,n);g et ch O ;6输出1 999中能被3 整除,而且至少有一位数字是5 的所有数字。答m ai n()(i n t x,y,fl ag;fo r(x=l;x 10 0 0;x+)fl ag=O;y=x;i f(y%3=0)/*余数为0说明该数能够被3 整除*/(w h i l e(y%10!=0)i f(y%10=5)fl ag=l;/*依个位、十位、百位顺序判断是否余数为5*/y/=10;i f(fl ag=l)p r i n t f(w%d tw,x);getchO;7求爱因斯坦数学题。有一条长阶,若每步跨2 阶,则最后剩1 阶,若每步跨3 阶,则最后 剩
30、 2 阶,若每步跨5 阶,则最后剩4 阶每步跨6 阶,则最后剩5 阶每步跨7 阶,最后正好 1 阶。答main()(int x=0,flag=0;while(l)(x+;if(x%2=Dif(x%3=2)if(x%5=4)if(x%6=5)if(x%7=0)(p r i n t f x);break;g et ch O ;8输入一个3 位数,判断是否是一个“水仙花数 o水仙花数是指3 位数的各位数字的立方和等于这个3 位数本身。例如,153=1*1*1+5*5*5+3*3*3答m ai n()(i n t x,a,b,c;p r i n t f(In p u t n u m b er:);s
31、can f(%d,&x);a=x/10 0;/*变 量 a 中记录x的百位数字*/b=x/10%10;/*变 量 b中记录x的十位数字*/c=x%10;/*变 量 c 中记录x的个位数字*/i f(a*a*a+b*b*b+c*c*c=二 x)(p r i n t f(%d=%d*%d*%d+%d*%d*%d+%d*%d*%d n”,x,a,a,a,b,b,b,c,c,c);p r i n t f(Y E S );)e l s ep r i n t f (N O D ;g e t c h O ;9计算斐波那契分数序列前n项 之 和(n 是某个常数,波那契分数序列为2/1,3/2,5/3,8/5,
32、.)o答m a i n ()(i n t i,n=10;f l o a t f l=l,f 2=2,f,s u m=0;f o r (i=0;i n;i+)(s u m+=f 2/f 1;f=f l+f 2;f l=f 2;f 2=f;p r i n t f (t o t a l 二%d n s u m 二%f ,n,s u m);g e t c h O ;)10输 入 个正整数,各输出n 行的正(倒)三角形宝塔图案。答m a i n()i n t n,i,j;p r i n t f (z,I n p u t n:);s c a n f(d,&n);f o r (i=0;i n;i+)(f o
33、 r (j=i+l;j n;j+)p r i n t f (z,);f o r (j=0;j 2*i+l;j+)p r i n t f (ZVZ);p r i n t f (n);)f o r (i=0;i n-l;i+)(f o r (j=O;j i+l;j+)p r i n t f C,z);f o r(j=2*i-l;j n+l;j+)p r i n t f C*);p r i n t f C nz,);)g e t c h O ;11输出九九乘法表。答m a i n Oi n t i,j;f o r (i=l;i =9;i+)f o r(j=l;j=O&c h =9)x=10*x+c
34、h,O ;y=10*y;i f(x!=0&410*x y)f=0;c o n t i n u e;)e l s e(i f(x!=0)(i f(f=l)(x=-x;n s u m+=x;n c n t+;e l s ep s u m+=x;pcnt+;printf(%dn,x);)f=O;x=O;y=l;continue;)if(x!=0)(if(f=l)(x=-x;nsum+=x;ncnt+;)elsepsum+=x;pcnt+;printf(%dn,x);p r i n t f (n-n);p r i n t f(P l u s:n );p r i n t f(C o u n t 二%d
35、n,p e n t);p r i n t f(A ve r a g e 二/f n ,p s u m/p e n t);p r i n t f (-n);p r i n t f (N e g a t i ve:n);p r i n t f (C o u n t 二%d n ,p e n t);p r i n t f(A ve r a g e 二%f n ,n s u m/n e n t);g e t c h O ;)13一个整数等于该数所有因子之和,则称该数是一个完数。例如,6 和 28都是完数。因为6=1+2+3,28=1+2+4+7+14。输 出 3 位数中所有的完数。答 m a i n(
36、)(i n t k l,k 2,k 3,k 4,k 5,k 6,k 7,k 8,k 9,k l O;i n t i,a,n,s;f o r (a =100;a =999;a+)(n =0;/*n累计因子的个数*/s =a;/*s 存放未求出的因子之和,初值为被测数本身*/f o r (i =1;i 1)p r i n t f (%d,%d”,k l,k 2);/*n l 表示 a 至少有 2 个因子*/i f (n 2)p r i n t f (,%d ,k 3);/*注意以下i f的用法,追加的方法*/i f (n 3)p r i n t f (,z,%dz,,k 4);i f (n 4)p
37、 r i n t f (,%d”,k 5);i f (n 5)p r i n t f (,%d,k 6);i f (n 6)p r i n t f (,%d”,k 7);i f (n 7)p r i n t f (,%d ,k 8);i f (n 8)p r i n t f (,%d”,k 9);i f (n 9)p r i n t f%d,z,k l O);p r i n t f (n);)g e t c h();)14编写程序按下列公式计算e的值(精度为卜-6)。e=l+l/l!+l/2!+l/3!.+l/n!答m a i n()(i n t i;d o u b l e e=0,t=l;f
38、 o r(i=l;t 0.000001;i+)f o r(j=l;j =i;j+)t*=j;t=l/t;e+=t;p r i n t f Cze=%f n,z,e);g e t c h O ;15用二分法求方程2x3-4x2+3 x=0在(TO,10)附近的根(二分法:先找到a、b,使 f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f(a+b)/2,现在假设f(a)0,a b,如 果 f(a+b)2=0,该点就是零点,如果f(a+b)/2 0,则在区间(a+b)/2,b)内有零点,按上述方法再求该区间中点的函数值,通过每次把f(x)的零点所有小区间收缩一半的方法,使区间的两个
39、端点逐步迫近函数的零点,以求得零点的近似值,该值即是方程的根)。答#i n c l u d e,zm a t h.h m a i n()(d o u b l e x,f x,f a,f b,a=-10,b=10,z=0.0001;f a=2*a*a*a-4*a*a+3*a;f b=2*b*b*b-4*b*b+3*b;i f(f a*f b 0)(d o(x=(a+b)/2;f x=2*x*x*x-4*x*x+3*x;i f(f xz);p r i n t f(Th e r o o t i s:%l f n,x);)g e t c h O ;第六章函数与编译预处理一习题答案1写两个函数,分别求两
40、个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。答ma in()(u ns igned int m,n,p,q;for(;)printf(m,n=);s c a nf(d,%d ,&m,&n);if(m0|nn)i=m;m=n;n=i;for(i=m;i0;i-)if(m%i=0&n%i=0)retu rn(i);)int fu nq(int m,int n)(int i;if(m47&c=A&c=Z|c=a&c=z)z m+;els e qt+;printf C,a m=%d,s z=%d,kg=%d,qt=%d n,z m,s z,kg,qt);)制
41、作函数,利用函数调用:#inc lu d e,zs td io.hint a na ly s(c ha r c h);m a i n()(int i,z m=O,s z=O,qt=O,c;printf(I npu t a s tring:);while(c=getc ha r()!二 n)(i=a na ly s(c);s witc h(i)c a s e 1:z m+;b rea k;c a s e 2:s z+;b rea k;c a s e 3:qt+;)printf Czz m=%d,s z=%d,qt=%d n,z m,s z,qt);int a na ly s(c ha r c h
42、)(if(c h=,A&c h 二 Z|c h=a&c h47&c h58)retu rn 2;retu rn 3;)3按照 第 5 章第8 题的要求编写判断水仙花数的函数,从主函数输入正整数n,在主函数中调用判断水仙花数的函数,找出n 以内所有的水仙花数。【输入一个3 位数,判断是否是 一 个“水仙花数”。水仙花数是指3 位数的各位数字的立方和等于这个3 位数本身。例如,153=1*1*1+5*5*5+3*3*3答ma in()(int x,i,f;printf(,zI npu t nu mb er:);s c a nf&x);for(i=0;i=x;i+)f=0;f=fu n(i);if(
43、f=l)printf(,%d t,/,i);)getc hQ ;)int fu n(int x)(int a,b,c;a=x/100;b=x/10%10;c=x%10;if(a*a*a+b*b*b+c*c*c=x)retu rn 1;els e retu rn 0;)4定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。答#d efine f(a,b)(a=a+b,b=a-b,a=a-b)ma in()int x,y;printf(I npu t x,y:);s c a nf(%d,%d ,&x,&y);printf(d,%d,x,y);f(x,y);printf(一
44、%d,%d n,x,y);getc hO ;)5已知二阶F ib ona c c i数列:0 若 n=0F ib(n)=1 若 n=lF ib(n-l)+F ib(n-2)其它情况定义递归函数求F ib (n)。答ma in()(int i,n;printf(I npu t n:);s c a nf(级d ,&n);for(i=0;i=n;i+)printf(,%d tz,,fib(i);getc hO ;int fib(int n)if(n=0)retu rn 0;els e if(n=l)retu rn 1;els e retu rn(fib(n-l)+fib(n-2);)6定义函数求F=
45、(n+m)!+n!,m、n 均为任意正整数。要求使用递归调用。答long int f(int x);ma in()(int i,m,n;long int s u m;printf I npu t m,n:);s c a nf(d,%d ,&m,&n);s u m=f(n+m)+f(n);p r i n t f sum);getc hO ;)long int f(int x)(int i,j;if(x=0|x=l)retu rn 1;els e retu rn(x*f(x-l);)7定义一个函数完成第5 章 第 11题的功能。【输出九九乘法表。】答ma in()(fu n();getc hO :
46、)fu n()(int i,j;for(i=l;i=9;i+)(for(j=l;j=i;j+)printf(绘d*%d=%-3d”,j,i,i*j);printfC nz,);)8如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求 出 30000以内所有的互满数,并显示输出,求一个数它的所有约数(除了它本身以处)的和,用函数实现。答ma in()(int x,y;for(x=l;x 30000;x+)for(y=l;y x;y+)(if(fa c s u m(x)=y&fa c s u m(y)=x)printf(够d,%d)t”,x,y);)getc
47、 hO ;)fa c s u m(int n)int i,s u m=0;for(i=l:in;i+)(if(n%i=0)s u m+=i;retu rn s u m;9编写以下函数:输入职工的姓名和职工号;按职工号由小到大排序,姓名顺序也随之调整;输入一个职工号,找出该职工的姓名。在主函数中调用这些函数。答10设计程序完成下列计算。已经:y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)其中:f(x,n)=l-x 2/2!+x 4/4-.+(-l)n x 2n/(2n)!(n20)当:x=5.6,n=7 时,求:y要求通过嵌套调用完成计算。答ttinc lu d e floa
48、 t f(floa t x,int n);floa t fl(floa t x,int m);floa t f2(int m);ma in()(floa t x=5.6,y;int n=7,i;y=l+f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3);printf(,zy=%f n nz,,y);)floa t f(floa t x,int n)(floa t s u m=0.0;int i;for(i=l;i=n;i+)s u m+=fl(-l,i)*fl(x,2*i)/f2(2*i);retu rn s u m;)floa t fl(floa t x,int m)(int i
49、;floa t y=l.0;for(i=l;i=m;i+)(y*二X;)retu rn y;)floa t f2(int m)(int i;floa t y=l;for(i=l;i=m;i+)y*二i;retu rn y;第 七 章 数 组一习题答案1以下各题中,选择一个正确的答案。1、能正确对一维数组a中所有元素进行初始化的是()。A.int a 5 =B.int a =0C.int a 5=0,0,0,0,0 D.int a 5 =02、有 说 明 int k=3,a 10;则下列可以正确引用数组元素的表达式是()。A.a k B.a 10 C.a l,3 D.a 3*53、有定义 int
50、 d 3 =1,2,3,4,5,6);执行语句 print f(%c ,d l 0+A);结果是()。A.A B.B C.D D.E4、有定义 c ha r c=A,c h 2 0 =C a ,b ,c ,0,d ,0 ;若执行print f r%sz,c h);结果是()。A.a b c B.a b c C.a b e d D.a b c 0d5、对数组进行初始化c ha rc a rr =s ,t ,u ,d ,e ,n,t ,b a rr =s t u d e nt ;则正确的是()oA.c a rr与 b a rr长度相同B.c a rr比 b a rr长C.c a rr 与 b a