C语言程序设计课后习题答案

上传人:桔**** 文档编号:577697697 上传时间:2024-08-22 格式:PDF 页数:52 大小:4.83MB
返回 下载 相关 举报
C语言程序设计课后习题答案_第1页
第1页 / 共52页
C语言程序设计课后习题答案_第2页
第2页 / 共52页
C语言程序设计课后习题答案_第3页
第3页 / 共52页
C语言程序设计课后习题答案_第4页
第4页 / 共52页
C语言程序设计课后习题答案_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《C语言程序设计课后习题答案》由会员分享,可在线阅读,更多相关《C语言程序设计课后习题答案(52页珍藏版)》请在金锄头文库上搜索。

1、第一章 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指出合法与不合法的标识符命名。答AB12- J leed_3- a*b2- X 8stu- X D.KJon- X EF3_3- J PAS- J if- XXYZ43K2- V AVE#XY-X _762- V #_DT5- X C.D-X5说明下列Turbo C热键的功能。

3、答F2:源 文 件 存 盘F 10:调 用 主 菜 单F4:程序运行到光标所在行( 用于调试程序)编译并链接成可执行文件Alt+F5:将窗口切换到D O S下,查看程序运行结果。6说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。C trl+F9:main()printf(H* * * *n) ,printf( welcome you n);printf( very good n);printf(n* * *n) . main。 inta,b,c,t;printf(please input three numbers;);scanf(”%d,%d,%d,&a,&b,&c); /*

4、教材 S 是错误的* /t=max(max(a/b),c);printf(max number is:%dn,t);)int max(int x, int y)int z;if(xy)z=x;else z=y;return(z);答运行结果:*welcome youvery good*运行结果:please input three numbers;3,l,4 /*左侧下划线内容为键盘输入* /max number is:47一个C程序是由若干个函数构成的,其中有且只能有一个. 函数。答main()8在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的 命令或按 键转到用户屏幕查看程序

5、运行结果。答1、User screen2、Alt+F59c语言对标识符与关键字有些什么规定?答1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。2、关键字是种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。10C源程序输入后是如何进行保存的?答是以c为扩展名保存的纯文本文件。第二章 C语言程序的基本数据类型与表达式一习题答案1指出下列常数中哪些是符合C语法规定的。答-X 101-X -X e 3 -x 019- V Oxle- Vabn- V I.e5-X (2+3)e(4-2)-X 5.2e2.5-

6、X2请找出下列程序中的错误,改正后写出程序运行结果。void main()int xzy=z=5zaver;x=7AVER=(x+y+z)/3printf(,AVER=%dn,aver);) void main() char cl=a;c2=,b;c3=c,;int a=3.5zb=A,printf(,a=%db=endn,a,b);printf(a%cb%cbc%ctabcn,cl,c2,c3);)答main()int x,y=5/z=5,aver;x=7;aver=(x+y+z)/3;printf(AVER=%dnzaver);)运行结果:AVER=5(2)main() char cl=,

7、a/ c2=b, c3=c;inta=3zb=A;printf(a=%d,b=%cendn,a,b);pri ntf ( a%cb%cbc%ct a bcn, c lzc2,c3);)运行结果:a=3,b=Aendaabcc abc写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据( 实数保留到小数点后两位) 。int99-1charhunsigned int66float55.78long int68答int99104665568charchB7,Dunsigned int9910466556865535float99.00104.0066.0055

8、.7868.00-1.00long int99104665568写出程序运行结果。 void main()int ij;i=8J=10;printf(”d,%d,%d,%dn”,ij,+ij+);) main。 int a=l,b=2,c=30;printf(%d/%d/%d/%dn,/a=b=c,a=b=cza=(b=c)/a=(b=c);)注意:a二b二c,a=b=c之间应为逗号,教材有误答运行结果:9,11,9,10运行结果:30,1,0,0void main()int a=10,b=20,c=30,d;d=+a=20| |c+;printf(%d,%d,%d,%drT,a,b,c,d)

9、;)答运行结果:11,19,3045写出下面表达式的值( 设 a=10,b=4,c=5,d=lzx=2.5zy=3.5)o(l)a%=(b%=3)(2)n+,a+=a-=a*=a (float)(a+c)/2+(int)x%(int)y(4)a*=b+c(5)+a-c+b+(6)+a-c+b ab?x:7V(8)b+=c(9)a+b/18+(b=4)*3/(a/b/a%b)(10)x+a%3*(int)(x+y)%2/+sizeof(int)(ll)ab?a:c0?x:-x的功能是什么?答如果X 的值是一正数,则表达式的值为X 值;如果X 的值是一非正数,则表达式的值为-X。其实该表达式的值即

10、为X 的绝对值,C 语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。8用一个条件表达式描述从a、b、c 中找出最大都贝武给max.答max=a(bc?b:c)?a:(bc?b:c);9若x 为 int型变量,则执行以下语句后x 的 值 为 (x=6;x+=x-=x*x;A. 36 B.-60 C. 60 D. -24答B.10若有以下类型说明语句:char w; int x; float y; double z;则表达式w*x+z-y的结果为( )类型。A. float B. char C. int D. double答D.第三章 顺序结构程序设计一习题答案

11、1变 量 k 为 float类型,调用函数scanf(%d,&k),不能使变量k 得到正确数值的原因是答格式修饰符与变量类型不一致。因为d 输入的数据类型应该为十进制整数,而& k为占用4 个字节的float类型变量的地址。2a=1234, b=12, c= 3 4 ,则执行 “ printf(|%3d%3d%-3d|n,a,b,c);” 后 的 输 出 是 。答|1234 1234 |分析如下:3d为右时齐输出变量, 且指定输出变量的值宽度为3 个字符位, 如果变量实际位数小于3 , 则左端补空格,如果变量实际位数大于3 , 则按实际长度输出,不受限制。-3 d 为左对齐输出变量,在输出变量

12、时,如是变量实际位数小于3 , 则在右端补空格,否则按实际输出。3设有int a=255,b=8;,则 printf(%x,%on,a,b);输出是_ _ _ _ _ _。答ff,10 如 果 printf(%X,%on,a,b);” 则输出为FF, 10 0说明在输出十六进制字母时, 其大小写受格式修饰符的限制,如果是“x” 则输出小写,如果是“X” 则输出大写。 如 果 希 望 在 输 出 十 六 进 制 时 输 出 前 导 符 O x 或 0X ,则 以 上 输 出 语 句 应 改uprintf(%#x,%on,a,b);M 为或 uprintf(%#X,%on,a,b); 本条解释不必

13、须掌握。4以下 程 序 输 出 的 结 果 是 。main()(int 31=1,32=0,33=2;printf(%d,%d,%dn”,al,al+a2+a3,a3al);)答1,3,15printf函数中用到格式符5 s ,其中5 表示输出字符占用5 歹人如果字符串长度大于5 , 则按 输出;如果字符串长度小于5 , 则按 输出。答实际左端补空格6已定义变量如下:int al,a2;char cl,c2;若要求输入a l、a2、c l 和 c2的值,正 确 的 输 入 函 数 调 用 语 句 是 。答scanf(”d,%d,%c,%c”,&aL&a2,&cl,&c2);7输入两个整型变量a

14、、b 的值,输出下列算式以及运算结果 oa+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(%d-%d=%dnza,b,a-b); 10-5=5(3)printf(%d*%d=%dn/a/b/a*b); 10*5=50 printf(”d/%d=%dn”,a,b,a/b); 10 方=2printf(%(float)d/%d=%fnza,b,(float)a/b); (flo

15、at)10/5=2.000000printf(%d%d=%dn/a,b/a%b); 10%5=08输入一个非负数,计算以这个数为半径的圆周长和面积。答#define PI 3.1415926main()(float olarea;printf(lnput a positive:1);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(l=%ftarea=%fnJ/area);)输入任意一个3 位数,将其各位数字反序输出( 例如输入1 2 3 ,输出321)。答main()(int xzy;printf(lnput a number(100-999):);sca

16、nf(%d,&x);y=100*(x%10)+10*(x/10%10)+x/100; / * 注意分析此处算法 * /printf(%d-%dn,x/y);)10输入任意大小的3 个整数,判断其中是否有两个奇数一个偶数。若是则输出Y E S ,不是则 输 出 NOT ( 要求用条件表达式进行判断,不使用if曲 I )o答main()(int xzy,zzoddcount=0; / * 奇数数计数变量* /printf(lnput x,y,z:);scanf(%d,%d,%dz&x,&y,&z);x%2=l?oddcount+:0;y%2=l?oddcount+:0;z%2=l?oddcount

17、+:0;oddcount=2?printf(YES):printf(NOT);11求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASC II码值,按从大到小的顺序输出这3 个字符及其对应的ASC II码值。答本题考查同学们对字符类型数据的认识,如果在ASC II范围内则即可以显示为字符,又可以显示为整数值;无论是否能够显示为字符,字符类型数据是可能参与数值运算的,切记。main()(char c;printf(lnput character:);scanf(”%c”,&c);printf(%c-%dn,c-l,c-l);printf(%c-%dnc/c);printf(%

18、c-%dn,c +1,0+1);getch(); / * 为便于调试程序,运行至此程序停顿,此时可以看到运行结果,按任意键程序真难得结束并返回到编辑环境* /12输入三角形的边长,求三角形面积( 面积=sqrt(s(s-aMsb)(s-c),s=(a+b+c)/2)。答#includemath.h / * 由于程序中使用了开平方函数sqrt(),所以需要包含数学头文件* /main()float a,b,c,s,area;int ok=0;printf(lnput a,b,c:H);scanf(%f,%f,%f”,&a,&b,&c);a+bc?ok+:0; / * 以下3 条语句为判断是否输入

19、的数据是否构成封闭三角形* /a+cb?ok+:0;b+ca?ok+:0;ok=3?(s=(a+b+c)/2/area=sqrt(s*(s-a)*(s-b)*(s-c),printf(,area=%f,area):printf(error);getchf);)11第四章 选择结构程序设计一习题答案1设x、t 均为int型变量,则执行语句“x=10;t=x&x10;” 后,t 的值为答02假定所有变量均已正确定义,则程序段:int a=0, y=10;if(a=O)y- else if(aO)y+;else y+=y;运 行 后 y 的值是;答203能表 述 20Vx 3 0 或 x20&x30

20、| |+x-1004若有定义语句“ inta=25,b=14,c=19;,则 以 下 语 句 执 行 结 果 是 。if(a=25 & b=2 & c)printf(H*a+b=%dz a-b=%d*n, a+b, a-b);else printf(*a=%d, b=%d, c=%d*n/a/ b, c);答*a=25, b=14,c=19*5 假 定 i 和 j 为 in t型变量,则执行以下语句后i 的值是 oint i=l;switch(i)(case 1: for(j=0; j9; j+) i+=j; break;case 2: for(j=l; j10; j+) i+=j; brea

21、k;case 3: i+;)答37分析:执行了 easel: case 3 : 中的代码。同时easel:语句中的 是可以取消的。6以下 两 条 i f 语句可合并成一条i f 语句,即 oif(ab)printf(*,*y=%dn/ y);else printf(*x=%dn/x);答if(al)printf(outside);else if(d0)oif(a30) m=l;else if(a40) m=2;else if(a50) m=3;else if(a60) m=4;else m=5答switch(a/10)(case 1:case 2:case 3:m=l;break;case 4

22、:m=2;break;case 5:m=3;break;case 6:m=4;break;default:m=5;12有一函数x-1 -5x0y= x x=0x+1 0x-5&x0&x-5&x8)if(x0)y=x-l;else if(x=0)y=0:else y=x+l;printf(y=%fn,y);main()float x,y;scanf(”%f”,&x);if(x0)y=x+l;else if(x=0)y=0;else if(x-5)y=x-l;printf(y=%fn,y);使用多分支语句程序如下:main()(float x,y;int m;printf(lnput x:);sc

23、anf(,%f/&x);if(x-5&x8)if(x0)m=-l;else if(x=0)m=0:else m=l;switch(m)(case -l:y=x-l;break;case 0:y=0;break;case l:y=x+l;break;printf(y=%fnH,y);)以下为假设对int类型的变量进行处理,但毕竟不算完美main()(int x,y;printf(lnput x:);scanf(%d,&x);switch(x)(case -4:case -3:case -2:case -1: y=x-l; break;case 0: y=0; break;case 1:case

24、2:case 3:case 4:case 5:case 6:case 7: y=x+l; break;)printf(y=%dn,y);16牙 亍 工L早循环结构程序设计一习题答案1 输 入 n 个整数,求 这 n 个数之中的偶数平均值,并输出。答main()(int n,i,x,sum=0,count=0;printf(lnput n:);scanf(%dH,&n);for(i=0;i=a&ch=A&ch=0&ch=,a,&ch=,A&ch=,Z)printf(%c/ch+32);)getch();5设某县2000年工业总产值为200亿元,如果该县预计平均年工业总产值增长率为4.5%,那么多

25、少年后该县年工业总产值将超500亿元。答main()(float x=200;int n=0;do(x*=(l+0.045);n+;while(x500);printf(n=%dzn);getch();)6输出1999中能被3 整除,而且至少有一位数字是5 的所有数字。答main()(int x,y,flag;for(x=l;x1000;x+)(flag=O;y=x;if(y%3=0) / * 余数为0 说明该数能够被3 整除* /while(y%10!=0)(if(y%10=5)flag=l; / * 依个位、十位、百位顺序判断是否余数为5*/y/=io;)if(flag=l)printf(

26、%dt,x);)getch();7求爱因斯坦数学题。有 条长阶,若每步跨2 阶,则最后剩1 阶,若每步跨3 阶,则最后剩 2 阶,若每步跨5 阶,则最后剩4 阶每步跨6 阶,则最后剩5 阶每步跨7 阶,最后正好1阶。main()int x=O,flag=O;while(l)(x+;if(x%2=l)if(x%3=2)if(x%5=4)if(x%6=5)if(x%7=0)(printf(%d,x);break;)getch();输 入 个 3 位数,判断是否是一个“ 水仙花数” 。水仙花数是指3 位数的各位数字的立方和等于这个3 位数本身。例 如 , 153 = 1*1*1+5*5*5+3*3*

27、3main()int x,a,b,c;printf(lnput number:);scanf(%d,/&x);a=x/100; / * 变量a 中记录x 的百位数字* /b=x/10%10; / * 变量b 中记录x 的十位数字* /c=x%10; / * 变量c 中记录x 的个位数字* /if(a*a*a+b*b*b+c*c*c=x)(printf(%d=%d*%d*%d+%d*%d*%d+%d*%d*%dn,x,aza/a,b,b,b,c,c,c);printf(YES);)elseprintf(NOT);getch();9计算斐波那契分数序列前n项之和(n是某个常数, 波那契分数序列为2

28、/1, M,53,8万, ) 。答main()(int i,n=10;float fl=l,f2=2f sum=0;for(i=0;in;i+)(sum+=f?/fl;f=fl+f2;fl=f2;f2=f;)printf(total=%dnsum=%f,n/sum);getch();)10输入一个正整数,各输出n 行的正(倒) 三角形宝塔图案。答main()(int nJJ;printf(lnput n:);scanf(,%d,&n);for(i=0;in;i+)(for(j=i+l;jn;j+)printf();for(j=0;j2*i+l;j+)printf(*);printf(nn);)

29、for(i=0;in-l;i+)(for(j=0;ji+l;j+)printf();for(j=2*i-l;jn+l;j+)printf(*);pnntf(nn);)getch();)11输出九九乘法表。答main()(int i,j;for(i=l;i=9;i+)(for(j=l;j=0,&ch=9,)(x=10*x+ch-0;y=10*y;if(x!=O&lO*xy)f=O;continue;)else(if(x!=O)(if(f=l)(x=-x;nsum+=x;ncnt+;)else(psum+=x;pcnt+;)printf(%dnzx);)f=O;x=O;y=l;continue;)

30、if(x!=O)(if(f=l)(x=-x;nsum+=x;ncnt+;)elsepsum+=x;pcnt+;printf(%dnzx);)printf(n-nH);printf(Plus:n);printf(C ount=%dn,pcnt);printf(Average=%fn,psum/pcnt);printf(-nH);printf(Negative:n);printf(C ount=%dnzpcnt);printf(Average=%fn,nsum/ncnt);getch();13一个整数等于该数所有因子之和,则称该数是一个完数。例如,6 和 28都是完数。因为6= 1+2+3, 28

31、 = 2+2+4+7+14。输出3 位数中所有的完数。答main()(int kl, k2, k3, k4, k5, k6, k7, k8, k9, klO;int i,a,n,s;for (a = 100; a = 999; a+)(n = 0;/ * n 累计因子的个数* /s = a;/* s 存放未求出的因子之和, 初值为被测数本身* /for (i = 1; i 1) printf(%dz%d, kl, k2); /* nl 表示 a 至少有 2 个因子 * /if(n2) printfOd, k3); / * 注意以下if的用法, 追加的方法* /if(n3) printf(,/%

32、d/ k4);if(n4) printf(,%d, k5);if (n 5) printf(,%d,k6);if (n 6) printf(,cT/ k7);if(n7) printf(, d , k8);if(n8) print,%d”, k9);if(n9) printfC d, klO);printf(n);)getch();14编写程序按下列公式计算e 的值(精度为le-6)。e=l+l/l!+V2!+3!.+Vn!答main()(int i;double e=0,t=l;for(i=l;t0.000001;i+)(for(j=l;j=i;j+)t*=j;t=l/t;e+=t;)pri

33、ntf(e=%fnze);getch();15用二分法求方程2*342+3*=0在110,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)/20,则在区间(a+b)/2,b)内有零点, 按上述方法再求该区间中点的函数值,通过每次把f(x)的零点所有小区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值,该值即是方程的根) 。答#includemath.hmain()(double x/fx,

34、fa,fb,a=-10,b=10/z=0.0001;fa=2*a*a*a-4*a*a+3*a;fb=2*b*b*b-4*b*b+3*b;if(fa*fb0)(do(x=(a+b)/2;fx=2*x*x*x-4*x*x+3*x;if(fxz);printf(The root is:%lfn,x);)getch();9第 八 早函数与编译预处理一习题答案1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。答main()(unsigned int m,n,p,q;for(;)(printf(,m,n=);scanf(%dz%d,&m/&n);

35、if(m0| |nn)i=m;m=n;n=i;for(i=m;i0;i-)if(m%i=0&n%i=0)return(i);int funq(int mjnt n)(int i;if(mn)i=m;m=n;n=i;for(i=m;i47&c=A&c=a&c=A&ch=a&ch47&ch58)return 2;return 3;)3按照第5 章第8 题的要求编写判断水仙花数的函数,从主函数输入正整数n , 在主函数中调用判断水仙花数的函数,找出n 以内所有的水仙花数。【 输入一个3 位数,判断是否是一个“ 水仙花数” 。水仙花数是指3 位数的各位数字的立方和等于这个3 位数本身。例如,153 =

36、 1*1*1+5*5*5+3*3*3答main()(int x,i,f;printf(lnput number:);scanf(H%d,&x);for(i=0;i=x;i+)f=0;f=fun(i);if(f=l)printf(%dt,i);)getch();)int fun(int x)(int a,bzc;a=x/100;b=x/10%10;c=x%10;if(a*a*a+b*b*b+c*c*c=x)return 1;else return 0;4定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。答#define f(a,b) (a=a+bzb=a-b,a=a-

37、b)main()(int x,y;printf(lnput x,y:);scanf(%d,%d,&x,&y);printf(”d,%d”,x,y);f(x,y);printf(%d,%dn”,x,y);getch();5已知二阶Fibonacci数列:0若 n=0Fib(n)= 1 若 n=lF ib(n-l)+F ib(n-2)其它情况定义递归函数求Fib(n)o答main()int i,n;printf(lnput n:);scanf(”%d”,&n);for(i=0;i=n;i+)printf(dt”,fib(i);getch();)int fib(int n)(if(n=O)retur

38、n 0;else if(n=l)return 1;else return (fib(n-l)+fib(n-2);)6定义函数求F=(n+m)!+n!, m、n 均为任意正整数。要求使用递归调用。答long int f(int x);main()(int i,m,n;long int sum;printf(lnput mzn:);scanf(”d,%cT,&m,&n);sum=f(n+m)+f(n);printf(”ld,sum);getch();)long int f(int x)(int ij;if(x=O| |x=l)return 1;else return(x*f(x-l);)7定义一个

39、函数完成第5 章第11题的功能。【 输出九九乘法表O 答main()(fun();getch();)fun()int i,j;for(i=l;i=9;i+)(for(j=l;j=i;j+)printf (%d*%d=%-3d,j/i,i *j);printf(n);8如果有两个数,每一个数的所有约数( 除了它本身以外) 的和正好等于对方,则称这两个数为互满数,求出30000以内所有的互满数,并显示输出,求一个数它的所有约数( 除了它本身以处) 的和,用函数实现。答main()(int x,y;for(x=l;x30000;x+)(for(y=l;yx;y+)(if(facsum(x)=y&fa

40、csum(y)=x)printf(%d,%d)t,x,y);getch();)facsum(int n)(int i,sum=0;for(i=l;in;i+)(if(n%i=O)sum+=i;)return sum;9编写以下函数:输入职工的姓名和职工号;按职工号由小到大排序,姓名顺序也随之调整;输入一个职工号,找出该职工的姓名。在主函数中调用这些函数。答10设计程序完成下列计算。已经:y=f(x,n)/(f(x+2.3,n)+f(x-3.2,n+3)其 中 : f(xzn)=l-x?/2!+x4-.+(-l)n x2n/(2n)! (nO)当: x=5.6, n=7 时,求:y要求通过嵌套调

41、用完成计算。答include float f(float xjnt n);float fl(float xjnt m);float f2(int m);main()(float x=5.6,y;int n=7,i;y=l+f(x,n)/(f(x+2.3,n)+f(x-3.2zn+3);printf(y=%fnn,y);)float f(float xjnt n)(float sum=0.0;int i;for(i=l;i=n;i+)(sum+=fl(-lj)*fl(x/2*i)/f2(2*i);)return sum;)float fl(float xjnt m)(int i;float y=

42、1.0;for (i=l;i=m;i+)(y*=x;)return y;float f2(int m)(int i;float y=l;for (i=l;i D2阅读下列程序,写出程序的执行结果。1、include include void main()(int ijtemp,d44=l,2,3,4,5,6,7,8,4,3,2,l,l,2,3,4;for(i=0;i4;i+)for(j=0;jdji)dji=dij;for(i=0;i4;i+)(printf(n);for(j=0;j=i)printf(%6d,dij);else printf(%c,);2、若输入十进制数3291时,下列程序输

43、出为:ttinclude void main()(intchar s8;scanf(,%dH,&n);i=0; /*i是用来存放转换后的数组元素下标* /dom=n 应; d=n%8; si=O+d; i+; n=m;while(n!=0);for(i- -)putchar(si); / * 反向输出字符* /答1、15 4 46 7 82 342、 63333程序填空。在 处填写合适的语句,完善下列程序:1、从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。include void main()(int data,temp,k;static int 39=-10,2,4,8

44、,10,15,25,50);printf(nEnter a data:);scanf(,%d,&data); _;f o r ( k = 8 ;k-)if(akak-l)(;ak=ak-l;ak-l=temp;)el se;for(k=0;_ 水 + + )printf(“%7d”,ak);)2、从键盘输入一串英文字符( 不含空格与其他字符) ,统计每个字符的个数,并输出字母及相应的个数。include include / * 本行代码教材中应该加上,因为程序中有putchar() */void main()(int i=0/c52=0zm=0;char str80;printf(lnput

45、a string:);scanff G )_,str);while(stri)(if(stri=A, & )cstrU,A+;if(stri=a & s t r i = z );i+;)for(i=0;i26;i+)if(ci(if(m%8=0)putchar(n);m+;printf(%c:%-dzi+A,ci);)for(i=0;i=l temp=ak (4) break k=82、 %sn stri=Z cstri-a+26+ (4) j+A求一组成绩的平均分数以及高于平均分的成绩,设给定的成绩为90,85,92,77,80,62。答main()(int score6=90,85,92,

46、77,80,62;int i,sum=0;float aver;for(i=0;i6;i+)sum+=scorei;aver=sum/5.0;printf(nAverage:%fn,aver);printf(H igh score:);for(i=0;iaver)printf(%dt,scorei);5编写程序,输入一组整数,将它们排序后由小到大输出。【 提示】 假设为具有1 0 个元素的正整数数组;外层循环从数组的第一个元素开始选取;内层循环从外层循环选定的元素下一个元素开始选取,依次与外层循环选定的元素进行比较,将小者放入外层循环选定的元素中。答#define N 10main()(int

47、for(i=0;iN;i+) / * 提示并为数组元素赋值* /(printf(nlnput a%d:J);scanf(H%d/&ai);)for(i=0;iN;i+) / * 外层选定待比较元素位置* /for(j=i+l;jaU)(t=ai;ai=aj;aj=t;)printf(%dt,ai); / * 输出已更新为较小值之外层选定元素* /)从犍盘输入一个4 X 4 整数矩阵,以主对角线( ) 为对称轴, 将左下角元素中较大元素代替右上角对应元素,将右上角( 含对角线元素) 输出。【 提示】a00 aOl a02 a03al0allal2al3a20a2la22a23a30 a3l a3

48、2 a33答#define M 4main()(int aMM;intprintf(lnput integer number:n);for(i=0;iM;i+) / * 用两层循环为二维数组元素赋值* /for(j=0;jM;j+)(printf(a%d%d=/i/j);scanf(%dz&aij);)for(i=0;iM;i+) / * 用两层循环将数组以矩阵形式在屏幕输出* /(for(j=0;jM;j+)(printf(%dt,aij);)printf(n);)printff-n); / * 分隔线* /for(i=0;iM;i+) / * 选定矩阵待处理的当前行* /for(j=0;j

49、aiD)(t=aji;aUi=aiU;aij=t;)for(j=i;jM;j+) / * 将函对角线的右上角元素输出* / * 本循环为将第i 行 第 i 列开始的右侧元素输出* /(printf(%dtzaij);printf(n);for(k=0水 i+l水 +)printf(t);/*保证显示数据正确位置* /)getch();【 运行结果】a00=la0l=2a02=3a03=4al0=5all=6al2=7al3=8a20=9a2l=10a22=lla23=12a30=13a3l=14a32=15a33=1612345678910111213141516159136101411 15

50、16通过键盘给3 X 4 的二维数组输入数据,然后分别按行和按列输出数组元素。答define M 3#define N 4main()(intaMN,i,j;printfflnput integer number:n);for(i=0;iM;i+) / * 外层选定数组元素左维* /for(j=0;jN;j+) /*内层选定数组元素右维* /(printf(a%d%d=,i,j); / * 提示输出元素位置* /scanf(%d,&aij); / * 为指定元素赋值* /)printf(nOut by row:n); / * 按行输出数组元素值* /for(i=0;iM;i+)for(j=0;

51、jN;j+)printf(%dprintf(nOut by collum:n); / * 按列输出数组元素值* /for(i=0;iN;i+)for(j=0;jM;j+)printf(%d ,aji);getch();)【 运行结果】Input integer number:a00=la0l=2a02=3a=4al0=5all=6al2=7al3=8a2=9a2l=10a22=lla23=12Out by row:1 2 3 4 5 6 7 8 9 1011 12Out by collum:15 9 2 6 10 37 1148128编写程序,将两个字符串连接起来,不要使用strcat函数。答

52、#includestring.hmain()(char strl80,str280;int i=0Jl;printf(lnput strl:);gets(strl); / * 若换成 scanf(”s”,strl);后面应该增加 fflush(stdin);函数语句* /printf(lnput str2:);gets(str2);ll=strlen(strl); / * 计算字符串1 的长度* /while(str2i)(strlll+i=str2i;i+;strlll+i=O; / * 字符串连接后,不能忘记追加一个字符串结束符* /puts(strl); / * 可换成语句:printf

53、(”s,strl);*/getch();9输入一行字符串,统计该字符串中字符对a b 的个数。答#includestring.hmain()(char str80;int i=0,count=0;printf(lnput string:);gets(str);while(stri)if(stri=a & stri+l=b,)(count+;i+=2; / * 如果在当前i 的位置找到一对,则 i 越 过 b 个字母* /)else i+; / * 如果在当前i 的位置未找到,则 i 指向下一个字母* /)printf(%d,count);getch();)10从键盘输入1 0 个字符串,找出一

54、个最长的字符串。答#includestring.hmain()(charstr1080; / * 设置二维字符数组,每一维可以记录最大79个字符的字符串* /int i,len,k10,n=0,max=0;printf(lnput 10 strings:n);for(i=0;imax)max=len;n=O;kn=i;/*记录最长字符串的长度、 个数、 在数组位置( 行) * /else if(len=max)k+n=i; / * 与已记录最大长度相同时,记录其在数组中位置( 行) * /)if(n=O) / * 此时说明只有一个最大长度字符串,是 strk*/printffThe longe

55、st string is String %d:,kO+l); /*输出其序号* /puts(strkO);)else / * 此时说明有不止一个最大长度字符串时需要处理的复合语句* /(printffNot only one!n);for(i=0;imaxb)(cn+=maxa;/*将 a 中最大元素赋值给c 数组当前元素, 并 调 整 c 新元素位置* /i+; / * 调 整 a 中元素位置* /)else(cn+=maxb;/*将 a 中最大元素赋值给c 数组当前元素, 并 调 整 c 新元素位置* /j+; / * 调 整 b 中元素位置* /)printf(%d,cn-l);/*打印

56、 输 出 c 中新赋值元素数据* /while(nM+N); / * 未为数组c 赋值结束时继续以上步骤一一执行循环体* /getchf);17第八章指针一习题答案1选择题。1、若 函 数 f 定义如下:void f(char *d,char *s);while(*d+=*s+);函 数 f 的功能是( ) 。A . 串比较 B . 串复制 C .求串长 D.串反向2、有定义 intarr10=0,l,2,3,4,5,6,7,8,9,*p,i=2;若执行语句:p=arr;pritnf(%d,*(p+i);输出结果为(A. 0 B. 2 C. 3D. 13、有 定 义 int td 3=1,2,

57、3,4,5,6;以下儿种方法中,不能正确表示i 行 j 列元素的是( ) 。A. tdij B. *(tdi+j) C. *(*(td+i)+j) D. *(td+i-j)本题不要求掌握1、 B 2、 B 3、 D2写出下列程序的运行结果。1、void main()(int a,*pl,*p2;a=10;pl=&a;p2=pl;printffThe Value is %d| |%d | |%dn/a/*pl,*p2);*pl=ll;printf(The Value is %d| |%d | |%dn,a,*pl,*p2);)2、若输入字符串program时,写出下列程序输出结果:include

58、 void main()char str80;void prochar(char *stzchar ch);scanf(%s,str);prochastr);puts(str);void prochar(char *str;char ch)(char *p;for(p=str;*p!=0;p+)if(*p=ch)*str=*p;(*str)+;str+;*str=*O;)答1、The Value is 10|10|10The Value is 11| |11| |112、ss3填空题1、下面程序完成从键盘输入两个字符串a 和 b , 再 将 a 和 b 的对应位置字符中的较大者存放在数组c 中

59、,填空完善该程序。include ftinclude void main()(int k=0;char a80,b80,c80=0,*p,*q;P=a; q=b;gets(a); gets(b);w h i l e ( )(if( )ck=*p;else ck=*q;P+; k+; / * 本题教材有误,少了此处的右大括号* /if(*p!=O)strcat(c/p);else strcat(c,q);puts(c);)2、以下程序从键盘输入1 0 个不相同的数到数组a 中,再输入一个数到x 中,在 a 中查找 与 x 值相同的元素所在的位置,填空完善该程序。 。ttinclude void

60、main()int all,xj;printf(lnput 10 integers:n);for(i=l;_ _ ;i+)scanf(%d_ );printf(lnput x:);scanf(H%d,&x);*a=x; i=10;while(x!=*(a+i)_ _ _i f()printf(”6ds position is:%3dn”,x,i);else printf(%6d Not be found!n,x); /*bee 应为 b e ,教材有误,小 case*/答1、 *p!=0,&*q!=0, *p*q q+2、 i04编写函数fu n ,函数的功能是,从字符串中删除指定的字符。同一

61、字母的大、小写按不同字符处理。例如,程序执行时输入字符串为turbo c and borland C + + ,从键盘输入字符n,则输出后变为turbo c ad borlad c+o如果输入的字符在字符串中不存在,则字符串照原样输出。【 提示】答#includestring.hmain()(char s80,*pstr=szchdel;printf(lnput source string:);gets(pstr);printf(C haracter you want delete:1);scanf(%cz&chdel);fun(pstr;chdel);printf(After deleted

62、:);puts(pstr);getch();)int fun(char *szchar ch)(int ij;for(i=0J=0;si;i+)if(si!=ch)sj+=si;sU=O;)5编程将从键盘输入的每个单词的第一个字母转换为大写字母,输入时各单词必须用空格隔开,用 结 束 输 入 。【 提示】 。答【 解法一】#includestdio.hint fun(char *p);main()(int i=0;char ch,str80;printf(lnput string end by.: n);while(ch=getchar() !=.)stri+=ch;stri+=.; stri

63、=O;fun(str);puts(str);getch();)int fun(char *p)(int flag=l;while(*p!=O)(if(*p=- )flag=l;if(*p=a,&*p=z&flag=l)*p-=32;flag=O;P+;)【 解法二】#includestdio.hmain()(int flag=l;char ch;printfflnput string end by.: n);doch=getchar();flag=fun(&chz flag);putchar(ch);while(ch!=.1);printf(n);)fun(char *c,int f)(if

64、(*c=*) return 1;else(if(f&*c=a,)*c-=32;return 0;)6从键盘输入8 个数,用选择法按由大到小的顺序排列并输出,要求用指针实现。【 提示】答#includestdio.h#includestring.hmain()(int data80,i,*pl,*p2,temp;pl=data;printf(Hlnput 8 numbers:1);for(i=0;i8;i+)scanf(”cT,pl+);for(pl=data;pldata+8-l;pl+)for(p2=pl+l;p2data+8;p2+)if(*pl*p2)temp=*pl;*pl=*p2;*

65、p2=temp;for(i=0,pl=data;ilen| |nlen-m)printf(m,n error!n);exit(0);else fun(strl,str2,m,n);puts(str2);getch();)fun(char *s,char *p,int xjnt y)(int i;for(i=0;iy;i+)pi=*(s+x+i-l);)8输 入 8 个整数,将其中最大的数与第一个数对换,最小的数与最后一个数对换。答main()(int a8,i,*p,max,min,t;max=min=0;P=a;printf(Hlnput 8 numbers:*);for(i=0;i8;i+

66、)scanf(%d/&ai);for(i=l;i8; i+)if(*(p+i)*(p+min)min=i;if(min!=7) t=*(p+7);*(p+7)=*(p+min);*(p+min)=t;)for(i=l;i*(p+max)max=i;if(max!=O) t=*(p+O);*(p+O)=*(p+max);*(p+max)=t;)for(p=a;pa+8;p+)printf(%dt,*p);getch();)9输 入 n 个整数排序并输出。 要求将排序单独写成一个函数,n 个整数在主函数中输入, 排序结果在主函数中输出,用指针实现。【 仍有问题】答#includestdio.hso

67、rt(int *p, int n)(intfor(i=0;in-l;i+)(for(j=i+l;j*(p+j)(t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;)main()(int i=O,n,*p;printffPlease input count of numbers:n);scanf(%d,&n);for (i=0;in;i+)(printffThe %d number:,i+1);scanf(%d,*(p+i);)printf(nThe result is :n);sort(p,n);for (i=0;i?dfl2345,将其中连接的数字作为一个整数,依次存放到数组a

68、 中,例如,423放入a0, 156放入a l ,。统计其共有多少个整数,并输出这些数。未做#includestring.hmain()(charstr1080; / * 设置二维字符数组,每一维可以记录最大79个字符的字符串* /int i,len,k10,n=0,max=0;printf(lnput 10 strings:n);for(i=0;imax)max=len;n=O;kn=i;/*记录最长字符串的长度、 个数、 在数组位置(行)* /else if(len=max)k+n=i; / * 与已记录最大长度相同时,记录其在数组中位置(行)* /)if(n=O) / * 此时说明只有一个最大长度字符串,是 strk*/printffThe longest string is String %d:,kO+l); /*输出其序号* /puts(strkO);)else / * 此时说明有不止一个最大长度字符串时需要处理的复合语句* /(printffNot only one!n);for(i=0;i=n;i+) / * 分别输出各序号、字符串* /printf(These are String %d:,ki+l);puts(strki);)getch();

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号